12ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson#!/usr/bin/perl 22ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson# XXX 32ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 42ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonsub table() { 52ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my ($name) = @_; 62ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson print <<'EOF'; 72ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson<table border=0> 82ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson<tr><th>System</th><th>PCRE</th><th>RE2</th></tr> 92ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian HodsonEOF 102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson foreach my $sys (@sys) { 112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $ns_pcre = $data{$sys}->{sprintf($name, "PCRE")}->{'ns/op'}; 122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $ns_re2 = $data{$sys}->{sprintf($name, "RE2")}->{'ns/op'}; 132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf "<tr><td>%s</td><td>%.1f µs</td><td>%.1f µs</td></tr>\n", $sysname{$sys}, $ns_pcre/1000., $ns_re2/1000.; 142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson print <<'EOF'; 162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson<tr height=5><td colspan=3></td></tr> 172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson</table> 182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian HodsonEOF 192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} 202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson@sizes = ( 222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "8", "16", "32", "64", "128", "256", "512", 232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", "512K", 242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "1M", "2M", "4M", "8M", "16M" 252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson); 262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson%color = ( 282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "PCRE" => "0.7 0 0", 292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "RE2" => "0 0 1", 302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson); 312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson$ngraph = 0; 332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonsub graph() { 352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my ($name) = @_; 362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $sys = "wreck"; 382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $base = sprintf("regexp3g%d", ++$ngraph); 392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson open(JGR, ">$base.jgr") || die "open >$base.jgr: $!"; 412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "bbox -20 -12 392 95\n"; 422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "newgraph clip x_translate 0.25 y_translate 0.25\n"; 432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $ymax = 0; 442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson %lastx = (); 452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson %lasty = (); 462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson foreach my $who ("PCRE", "RE2") { 472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "newcurve pts\n"; 482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson for(my $i=0; $i<@sizes; $i++) { 492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $key = sprintf("%s%s/%s", $name, $who, $sizes[$i]); 502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $val = $data{$sys}->{$key}->{'MB/s'}; 512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson next if !defined($val); 522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if($val > $ymax) { 532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $ymax = $val; 542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $lastx{$who} = $i; 562ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $lasty{$who} = $val; 572ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "$i %f (* %s *)\n", $val, $key; 582ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 592ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $color = $color{$who}; 602ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "marktype none color $color linethickness 2 linetype solid label : $who\n"; 612ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 622ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $n = @sizes; 632ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "xaxis min -1 max $n size 5 label : text size (bytes)\n"; 642ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR " no_auto_hash_marks hash_labels fontsize 9\n"; 652ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson for($i=0; $i<@sizes; $i+=3) { 662ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR " hash_at $i hash_label at $i : $sizes[$i]\n"; 672ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 682ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $y = 1; 692ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson while(10*$y <= $ymax) { 702ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $y = 10*$y; 712ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 722ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson for($i=2; $i<=10; $i++) { 732ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if($i*$y > $ymax) { 742ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $y = $i*$y; 752ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson last; 762ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 772ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 782ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson foreach my $who ("PCRE", "RE2") { 792ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $x1 = $lastx{$who}; 802ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $y1 = $lasty{$who}; 812ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $x1 *= 1.01; 822ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my $v = "vjc"; 832ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if($y1 < 0.05 * $y) { 842ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $v = "vjb"; 852ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $y1 = 0.05 * $y; 862ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 872ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "newstring x $x1 y $y1 hjl $v : $who\n"; 882ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 892ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR "yaxis min 0 max $y size 1 label : speed (MB/s)\n"; 902ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf JGR " hash_labels fontsize 9\n"; 912ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson # printf JGR "legend defaults font Times-Roman fontsize 10 x 0 y $y hjl vjt\n"; 922ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 932ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson system("jgraph $base.jgr >$base.eps"); # die "system: $!"; 942ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson system("gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dEPSCrop -sDEVICE=png16m -r100 -sOutputFile=$base.png -dBATCH -dQUIT -dQUIET -dNOPAUSE $base.eps"); 952ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 962ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson printf "<img src=$base.png>\n" 972ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 982ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} 992ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1002ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonsub skip() { 1012ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson while(<>) { 1022ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if(/^<!-- -->/) { 1032ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson print; 1042ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson last; 1052ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1062ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1072ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} 1082ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1092ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson@sys = ("r70", "c2", "wreck", "mini"); 1102ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson%sysname = ( 1112ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "r70" => "AMD Opteron 8214 HE, 2.2 GHz", 1122ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "c2" => "Intel Core2 Duo E7200, 2.53 GHz", 1132ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "wreck" => "Intel Xeon 5150, 2.66 GHz (Mac Pro)", 1142ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "mini" => "Intel Core2 T5600, 1.83 GHz (Mac Mini)", 1152ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson); 1162ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1172ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson%func = ( 1182ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "table" => \&table, 1192ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson "graph" => \&graph, 1202ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1212ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson); 1222ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1232ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonforeach my $sys (@sys) { 1242ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson open(F, "benchlog.$sys") || die "open benchlog.$sys: $!"; 1252ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my %sysdat; 1262ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson while(<F>) { 1272ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if(/^([A-Za-z0-9_\/]+)\s+(\d+)\s+(\d+) ns\/op/) { 1282ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson my %row; 1292ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $row{"name"} = $1; 1302ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $row{"iter"} = $2; 1312ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $row{"ns/op"} = $3; 1322ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if(/([\d.]+) MB\/s/){ 1332ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $row{"MB/s"} = $1; 1342ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1352ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $sysdat{$row{"name"}} = \%row; 1362ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1372ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1382ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson close F; 1392ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $data{$sys} = \%sysdat; 1402ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} 1412ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 1422ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodsonwhile(<>) { 1432ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson print; 1442ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if(/^<!-- benchlog (\w+) -->/) { 1452ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $func{$1}(); 1462ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson skip(); 1472ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson next; 1482ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1492ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson if(/^<!-- benchlog (\w+) ([%\w]+) -->/) { 1502ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson $func{$1}($2); 1512ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson skip(); 1522ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson next; 1532ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson } 1542ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson} 1552ee91b4af4353b9e6a9d591c32fedfc58fd4ef35Ian Hodson 156