[project @ 1996-07-25 20:43:49 by partain]
[ghc-hetmet.git] / ghc / utils / parallel / grs2gr.pl
1 #!/usr/local/bin/perl
2
3 #
4 # Convert several .gr files (from the same GUM run) into a single
5 # .gr file with all times adjusted relative to the earliest start
6 # time.
7 #
8
9 $count = 0;
10
11 foreach $i (@ARGV) {
12     open(GR, $i) || die "Can't read $i\n";
13     $cmd = <GR>;
14     $dateline = <GR>;
15     $start = <GR>;
16     ($pe, $timestamp) = ($start =~ /PE\s+(\d+) \[(\d+)\]/);
17     die "PE $pe too high\n" if $pe > $#ARGV;
18     $proc[$count++] = $pe;
19     $prog[$pe] = $cmd;
20     $time[$pe] = $timestamp;
21     close(GR);
22 }
23
24 $basetime = 0;
25
26 for($i = 0; $i < $count; $i++) {
27     $pe = $proc[$i];
28     die "PE $pe missing?\n" if !defined($time[$pe]);
29     die "Mismatched .gr files\n" if $pe > 0 && $prog[$pe] ne $prog[$pe - 1];
30     $basetime = $time[$pe] if $basetime == 0 || $basetime > $time[$pe];
31 }
32
33 print $cmd;
34 print $dateline;
35
36 for($i = 0; $i < $count; $i++) {
37     $pe = $proc[$i];
38     $delta = $time[$pe] - $basetime;
39     open(GR, $ARGV[$i]) || die "Can't read $ARGV[i]\n";
40     $cmd = <GR>;
41     $dateline = <GR>;
42     $start = <GR>;
43     while(<GR>) {
44         /PE\s+(\d+) \[(\d+)\]/;
45         printf "PE %2u [%lu]%s", $1, $2 + $delta, $';
46     }
47     close(GR);
48 }