Ian Hodson | 2ee91b4 | 2012-05-14 12:29:36 +0100 | [diff] [blame] | 1 | #!/usr/bin/perl |
| 2 | # XXX |
| 3 | |
| 4 | sub table() { |
| 5 | my ($name) = @_; |
| 6 | print <<'EOF'; |
| 7 | <table border=0> |
| 8 | <tr><th>System</th><th>PCRE</th><th>RE2</th></tr> |
| 9 | EOF |
| 10 | foreach my $sys (@sys) { |
| 11 | my $ns_pcre = $data{$sys}->{sprintf($name, "PCRE")}->{'ns/op'}; |
| 12 | my $ns_re2 = $data{$sys}->{sprintf($name, "RE2")}->{'ns/op'}; |
| 13 | printf "<tr><td>%s</td><td>%.1f µs</td><td>%.1f µs</td></tr>\n", $sysname{$sys}, $ns_pcre/1000., $ns_re2/1000.; |
| 14 | } |
| 15 | print <<'EOF'; |
| 16 | <tr height=5><td colspan=3></td></tr> |
| 17 | </table> |
| 18 | EOF |
| 19 | } |
| 20 | |
| 21 | @sizes = ( |
| 22 | "8", "16", "32", "64", "128", "256", "512", |
| 23 | "1K", "2K", "4K", "8K", "16K", "32K", "64K", "128K", "256K", "512K", |
| 24 | "1M", "2M", "4M", "8M", "16M" |
| 25 | ); |
| 26 | |
| 27 | %color = ( |
| 28 | "PCRE" => "0.7 0 0", |
| 29 | "RE2" => "0 0 1", |
| 30 | ); |
| 31 | |
| 32 | $ngraph = 0; |
| 33 | |
| 34 | sub graph() { |
| 35 | my ($name) = @_; |
| 36 | |
| 37 | my $sys = "wreck"; |
| 38 | my $base = sprintf("regexp3g%d", ++$ngraph); |
| 39 | |
| 40 | open(JGR, ">$base.jgr") || die "open >$base.jgr: $!"; |
| 41 | printf JGR "bbox -20 -12 392 95\n"; |
| 42 | printf JGR "newgraph clip x_translate 0.25 y_translate 0.25\n"; |
| 43 | $ymax = 0; |
| 44 | %lastx = (); |
| 45 | %lasty = (); |
| 46 | foreach my $who ("PCRE", "RE2") { |
| 47 | printf JGR "newcurve pts\n"; |
| 48 | for(my $i=0; $i<@sizes; $i++) { |
| 49 | my $key = sprintf("%s%s/%s", $name, $who, $sizes[$i]); |
| 50 | my $val = $data{$sys}->{$key}->{'MB/s'}; |
| 51 | next if !defined($val); |
| 52 | if($val > $ymax) { |
| 53 | $ymax = $val; |
| 54 | } |
| 55 | $lastx{$who} = $i; |
| 56 | $lasty{$who} = $val; |
| 57 | printf JGR "$i %f (* %s *)\n", $val, $key; |
| 58 | } |
| 59 | my $color = $color{$who}; |
| 60 | printf JGR "marktype none color $color linethickness 2 linetype solid label : $who\n"; |
| 61 | } |
| 62 | my $n = @sizes; |
| 63 | printf JGR "xaxis min -1 max $n size 5 label : text size (bytes)\n"; |
| 64 | printf JGR " no_auto_hash_marks hash_labels fontsize 9\n"; |
| 65 | for($i=0; $i<@sizes; $i+=3) { |
| 66 | printf JGR " hash_at $i hash_label at $i : $sizes[$i]\n"; |
| 67 | } |
| 68 | my $y = 1; |
| 69 | while(10*$y <= $ymax) { |
| 70 | $y = 10*$y; |
| 71 | } |
| 72 | for($i=2; $i<=10; $i++) { |
| 73 | if($i*$y > $ymax) { |
| 74 | $y = $i*$y; |
| 75 | last; |
| 76 | } |
| 77 | } |
| 78 | foreach my $who ("PCRE", "RE2") { |
| 79 | $x1 = $lastx{$who}; |
| 80 | $y1 = $lasty{$who}; |
| 81 | $x1 *= 1.01; |
| 82 | my $v = "vjc"; |
| 83 | if($y1 < 0.05 * $y) { |
| 84 | $v = "vjb"; |
| 85 | $y1 = 0.05 * $y; |
| 86 | } |
| 87 | printf JGR "newstring x $x1 y $y1 hjl $v : $who\n"; |
| 88 | } |
| 89 | printf JGR "yaxis min 0 max $y size 1 label : speed (MB/s)\n"; |
| 90 | printf JGR " hash_labels fontsize 9\n"; |
| 91 | # printf JGR "legend defaults font Times-Roman fontsize 10 x 0 y $y hjl vjt\n"; |
| 92 | |
| 93 | system("jgraph $base.jgr >$base.eps"); # die "system: $!"; |
| 94 | system("gs -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -dEPSCrop -sDEVICE=png16m -r100 -sOutputFile=$base.png -dBATCH -dQUIT -dQUIET -dNOPAUSE $base.eps"); |
| 95 | |
| 96 | printf "<img src=$base.png>\n" |
| 97 | |
| 98 | } |
| 99 | |
| 100 | sub skip() { |
| 101 | while(<>) { |
| 102 | if(/^<!-- -->/) { |
| 103 | print; |
| 104 | last; |
| 105 | } |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | @sys = ("r70", "c2", "wreck", "mini"); |
| 110 | %sysname = ( |
| 111 | "r70" => "AMD Opteron 8214 HE, 2.2 GHz", |
| 112 | "c2" => "Intel Core2 Duo E7200, 2.53 GHz", |
| 113 | "wreck" => "Intel Xeon 5150, 2.66 GHz (Mac Pro)", |
| 114 | "mini" => "Intel Core2 T5600, 1.83 GHz (Mac Mini)", |
| 115 | ); |
| 116 | |
| 117 | %func = ( |
| 118 | "table" => \&table, |
| 119 | "graph" => \&graph, |
| 120 | |
| 121 | ); |
| 122 | |
| 123 | foreach my $sys (@sys) { |
| 124 | open(F, "benchlog.$sys") || die "open benchlog.$sys: $!"; |
| 125 | my %sysdat; |
| 126 | while(<F>) { |
| 127 | if(/^([A-Za-z0-9_\/]+)\s+(\d+)\s+(\d+) ns\/op/) { |
| 128 | my %row; |
| 129 | $row{"name"} = $1; |
| 130 | $row{"iter"} = $2; |
| 131 | $row{"ns/op"} = $3; |
| 132 | if(/([\d.]+) MB\/s/){ |
| 133 | $row{"MB/s"} = $1; |
| 134 | } |
| 135 | $sysdat{$row{"name"}} = \%row; |
| 136 | } |
| 137 | } |
| 138 | close F; |
| 139 | $data{$sys} = \%sysdat; |
| 140 | } |
| 141 | |
| 142 | while(<>) { |
| 143 | print; |
| 144 | if(/^<!-- benchlog (\w+) -->/) { |
| 145 | $func{$1}(); |
| 146 | skip(); |
| 147 | next; |
| 148 | } |
| 149 | if(/^<!-- benchlog (\w+) ([%\w]+) -->/) { |
| 150 | $func{$1}($2); |
| 151 | skip(); |
| 152 | next; |
| 153 | } |
| 154 | } |
| 155 | |