X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=ghc%2Futils%2Fparallel%2Fgrs2gr.pl;fp=ghc%2Futils%2Fparallel%2Fgrs2gr.pl;h=d30c7777ce5bbff6b18da798621966d5802015ee;hb=e7d21ee4f8ac907665a7e170c71d59e13a01da09;hp=0000000000000000000000000000000000000000;hpb=e48474bff05e6cfb506660420f025f694c870d38;p=ghc-hetmet.git diff --git a/ghc/utils/parallel/grs2gr.pl b/ghc/utils/parallel/grs2gr.pl new file mode 100644 index 0000000..d30c777 --- /dev/null +++ b/ghc/utils/parallel/grs2gr.pl @@ -0,0 +1,43 @@ +# +# Convert several .gr files (from the same GUM run) into a single +# .gr file with all times adjusted relative to the earliest start +# time. +# + +$count = 0; + +foreach $i (@ARGV) { + open(GR, $i) || die "Can't read $i\n"; + $cmd = ; + $start = ; + ($pe, $timestamp) = ($start =~ /PE\s+(\d+) \[(\d+)\]/); + die "PE $pe too high\n" if $pe > $#ARGV; + $proc[$count++] = $pe; + $prog[$pe] = $cmd; + $time[$pe] = $timestamp; + close(GR) || die "Can't close $i\n"; +} + +$basetime = 0; + +for($i = 0; $i < $count; $i++) { + $pe = $proc[$i]; + die "PE $pe missing?\n" if !defined($time[$pe]); + die "Mismatched .gr files\n" if $pe > 0 && $prog[$pe] ne $prog[$pe - 1]; + $basetime = $time[$pe] if $basetime == 0 || $basetime > $time[$pe]; +} + +print $cmd; + +for($i = 0; $i < $count; $i++) { + $pe = $proc[$i]; + $delta = $time[$pe] - $basetime; + open(GR, $ARGV[$i]) || die "Can't read $ARGV[i]\n"; + $cmd = ; + $start = ; + while() { + /PE\s+(\d+) \[(\d+)\]/; + printf "PE %2u [%lu]%s", $1, $2 + $delta, $'; + } + close(GR) || die "Can't close $ARGV[$i]\n"; +}