X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Fparallel%2Fgrs2gr.pl;fp=utils%2Fparallel%2Fgrs2gr.pl;h=ab398a53d90e9a407cd97f62747b3324a62704b9;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hp=0000000000000000000000000000000000000000;hpb=28a464a75e14cece5db40f2765a29348273ff2d2;p=ghc-hetmet.git diff --git a/utils/parallel/grs2gr.pl b/utils/parallel/grs2gr.pl new file mode 100644 index 0000000..ab398a5 --- /dev/null +++ b/utils/parallel/grs2gr.pl @@ -0,0 +1,48 @@ +#!/usr/local/bin/perl + +# +# 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 = ; + $dateline = ; + $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); +} + +$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; +print $dateline; + +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 = ; + $dateline = ; + $start = ; + while() { + /PE\s+(\d+) \[(\d+)\]/; + printf "PE %2u [%lu]%s", $1, $2 + $delta, $'; + } + close(GR); +}