#!/usr/bin/perl use strict; my %workingon = (); my @probmults = (); my $totMmults = 0; my @probend = (); my @Nfiles = ('N-44', 'N-54', 'N-60', 'N-66', 'N-72', 'N-76', 'N-80', 'N-84', 'N-88'); # Read the moduli for each of the subproblems my @moduli = (0); my $f; for (1..20) { foreach $f (@Nfiles) { open(N, $f); while() { if (/^\[(\d+\s*)+\]/) { while(/(\d+)/g) { push @moduli, $1; } } } close(N); push @probend, [$#moduli, $f]; } } while(<>) { chomp; next unless /^(\d+\.\d+):(.*?):(.*)$/; my ($ts, $node, $line) = ($1,$2,$3); if ($line =~ /Subproblem (\d+)/) { $workingon{$node} = $1; } if ($line =~ /(\d+) us \/ (\d+) = \d+ us \/ (\d+) = \d+ ns/) { my $numMmults = $2 * $3 / 1000000; my $elapsed = $1; if ($workingon{$node} > 0) { $probmults[$workingon{$node}] += $numMmults; $totMmults += $numMmults; $workingon{$node} = 0; } else { warn "Node $node completed at $ts but not working\n"; } } } my $p; my $tpm = 0; for ($p=1; $p <= $#probmults; ++$p) { my $m = $probmults[$p]; $tpm += $m; my $r = $moduli[$p]; my $lr = int(log($r)/log(2))+1; my $l = log($m*1000000)/log(2); my $k = $m*1000000/sqrt($r); printf "%4d %15.1f Mmults = 2^%.1f = %10.2f * sqrt(r_%d)\n", $p, $m, $l, $k, $lr; if ($p == $probend[0]->[0]) { printf "\n%4s %15.1f Mmults = 2^%.1f\n\n", $probend[0]->[1], $tpm, log($tpm*1000000)/log(2); $tpm = 0; shift @probend; } } printf "\n tot %15.1f Mmults = 2^%.1f\n", $totMmults, log($totMmults*1000000)/log(2);