#!/usr/bin/perl -w # # Copyright (c) 2011 Solar Designer # Redistribution and use in source and binary forms, with or without # modification, are permitted. (This is a heavily cut-down "BSD license".) sub parse { if (/^$/) { undef $id; undef $name; undef $kind; undef $real; undef $virtual; return; } if (defined($name)) { ($kind, $real, $reals, $virtual, $virtuals) = /^([\w ]+):\t([\d.]+)([KM]?) c\/s real, ([\d.]+)([KM]?) c\/s virtual$/; undef $id; if ($name && $kind && $real && $virtual) { $id = $name . ':' . $kind; $real *= 1000 if ($reals eq 'K'); $real *= 1000000 if ($reals eq 'M'); $virtual *= 1000 if ($virtuals eq 'K'); $virtual *= 1000000 if ($virtuals eq 'M'); } return; } ($name) = /^Benchmarking: (.+) \[.*\]\.\.\. DONE$/; } die "Usage: $0 BENCHMARK-FILE-1 BENCHMARK-FILE-2" if ($#ARGV != 1); open(B1, '<' . $ARGV[0]) || die "Could not open file: $ARGV[0] ($!)"; open(B2, '<' . $ARGV[1]) || die "Could not open file: $ARGV[1] ($!)"; $_ = ''; parse(); while () { parse(); next unless (defined($id)); $b1r{$id} = $real; $b1v{$id} = $virtual; } close(B1); $_ = ''; parse(); while () { parse(); next unless (defined($id)); $b2r{$id} = $real; $b2v{$id} = $virtual; } close(B2); foreach $id (keys %b1r) { if (!defined($b2r{$id})) { print "Only in file 1: $id\n"; next; } } $mr = $mv = 1.0; $n = 0; foreach $id (keys %b2r) { if (!defined($b1r{$id})) { print "Only in file 2: $id\n"; next; } $kr = $b2r{$id} / $b1r{$id}; $kv = $b2v{$id} / $b1v{$id}; $mr *= $kr; $mv *= $kv; $n++; } $mr **= 1.0 / $n; $mv **= 1.0 / $n; printf "Geometric mean of %d:\t%.6f real, %.6f virtual\n", $n, $mr, $mv; $dr = $dv = 0.0; foreach $id (keys %b2r) { next if (!defined($b1r{$id})); $kr = $b2r{$id} / $b1r{$id}; $kv = $b2v{$id} / $b1v{$id}; $dr += ($kr - $mr) ** 2; $dv += ($kv - $mv) ** 2; } $dr **= 0.5; $dv **= 0.5; printf "Standard deviation:\t%.6f real, %.6f virtual\n", $dr, $dv;