[project @ 1996-07-25 20:43:49 by partain]
[ghc-hetmet.git] / ghc / utils / parallel / SN.pl
diff --git a/ghc/utils/parallel/SN.pl b/ghc/utils/parallel/SN.pl
new file mode 100644 (file)
index 0000000..0711d68
--- /dev/null
@@ -0,0 +1,280 @@
+#!/usr/local/bin/perl
+#                                      (C) Hans Wolfgang Loidl, November 1995
+#############################################################################
+# Time-stamp: <Sun Nov  5 1995 00:23:45 Stardate: [-31]6545.08 hwloidl>
+#
+# Usage: SN [options] <gr-file>
+#
+# Create a summary of spark names that occur in gr-file (only END events in 
+# gr-file are necessary). Creates a gnuplot impulses graph (spark names by 
+# number of threads) as summary.
+#
+# Options:
+#  -h        ... help; print this text.
+#  -v        ... verbose mode.
+#
+#############################################################################
+
+$gran_dir = $ENV{'GRANDIR'};
+if ( $gran_dir eq "" ) {
+    print STDERR "SN: Warning: Env variable GRANDIR is undefined\n";
+}
+
+push(@INC, $gran_dir, $gran_dir . "/bin");
+# print STDERR "INC: " . join(':',@INC) . "\n";
+
+require "getopts.pl";
+require "aux.pl";
+require "stats.pl";
+
+&Getopts('hv');  
+
+do process_options();
+
+if ( $opt_v ) { do print_verbose_message(); }
+
+# ---------------------------------------------------------------------------
+# Init
+# ---------------------------------------------------------------------------
+
+chop($date = `date`);
+chop($stardate = `stardate`);
+
+open (IN,"<$input") || die "$!: $input";
+$n = 0;
+$is_end=0;
+while (<IN>) {
+    $is_end = 1 if /END\s+(\w+).*SN\s+(\d+).*RT\s*(\d+)/;
+    next unless $is_end;
+    $n++;
+    $sn = $2;
+    $rt = $3;
+    #$sn_dec = hex($sn);
+    $num_sns{$sn}++;
+    $rts_sns{$sn} += $rt;
+    #do inc ($sn_dec);
+    $is_end=0;
+}
+close (IN);
+
+@sorted_keys=sort {$a<=>$b} keys(%num_sns);
+#$max_val=&list_max(@sorted_keys);
+
+open (SUM,">$summary") || die "$!: $summary";
+
+print SUM "# Generated by SN at $date $stardate\n";
+print SUM "# Input file: $input\n";
+print SUM "#" . "-"x77 . "\n";
+print SUM "Total number of threads: $n\n";
+print SUM "# Format: SN: Spark Site N: Number of threads AVG: average RT\n";
+# . "RTS: Sum of RTs ";
+
+foreach $k (@sorted_keys) {
+    $num = $num_sns{$k};
+    $rts = $rts_sns{$k};
+    $avg = $rts/$num;
+    #print SUM "SN: $k \tN: $num \tRTS: $rts \tAVG: $avg\n";
+    print SUM "$k \t$num \t$avg\n";
+}
+close (SUM);
+
+open (OUT,">$output") || die "$!: $output";
+print OUT "# Generated by SN at $date $stardate\n";
+print OUT "# Input file: $input\n";
+print OUT "#" . "-"x77 . "\n";
+
+$max_val=0;
+foreach $k (@sorted_keys) {
+    $num = $num_sns{$k};
+    $max_val = $num      if $num > $max_val;
+    print OUT "$k\t$num\n";
+}
+close (OUT);
+
+do write_gp($gp_file,$ps_file); 
+
+print "Gnu plotting figures ...\n";
+system "gnuplot $gp_file";
+
+print "Extending thickness of impulses ...\n";
+$ext_size = 100;
+$gray = 0.3;
+do gp_ext($ps_file);
+
+exit (0);
+
+# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+
+sub inc {
+    local ($sn) = @_;
+    local (@k);
+    
+    @k = keys(%num_sns);
+    if ( &is_elem($sn, @k) ) { 
+       $num_sns{$sn}++;
+    } else {
+       $num_sns{$sn} = 1;
+    }
+}
+
+# ----------------------------------------------------------------------------
+
+sub is_elem { 
+    local ($x,@list) = @_;
+    local ($found);
+
+    for ($found = 0, $y = shift(@list); 
+        $#list == -1 || $found;  
+        $found = ($x == $y), $y = shift(@list)) {}
+
+    return ($found);
+}
+
+# ----------------------------------------------------------------------------
+
+# -----------------------------------------------------------------------------
+
+sub process_options {
+
+    if ( $opt_h ) {                      
+       open(ME,$0) || die "Can't open myself ($0): $!\n";
+       $n = 0;
+       while (<ME>) {
+           last if $_ =~ /^$/;
+           print $_;
+           $n++;
+       }
+       close(ME);
+       exit ;
+    }
+    
+    if ( $opt_s ) {
+       $opt_s =~ s/[\(\)\[\]]//g;
+       @sparks = split(/[,;. ]+/, $opt_s);
+    } else {
+       @sparks = ( 3, 4, 5, 6, 7, 8, 11, 12, 13, 14, 15);
+    }
+
+    if ( $#ARGV != 0 ) {
+       print "Usage: $0 [options] <gr-file>\n;";
+       print "Use -h option to get details\n";
+       exit 1;
+    }
+
+    $input = $ARGV[0];
+    ($ps_file = $input) =~ s/\.gr/-SN.ps/;
+    ($gp_file = $input) =~ s/\.gr/-SN.gp/;
+    ($summary = $input) =~ s/\.gr/-SN.sn/;
+
+    #($basename = $gr_file) =~ s/\.gr//;
+    #$rts_file = $basename . ".rts";        # "RTS";
+    #$gran_file = "g.ps"; # $basename . ".ps";
+    #$rts_file = $gr_file;
+    #$rts_file =~ s/\.gr/.rts/g;
+
+    if ( $opt_o ) {
+       $output = $opt_o;
+    } else {
+       ($output = $input) =~ s/\.gr/-SN.dat/;
+    }
+
+    if ( $opt_e ) {
+       $ext_size = $opt_e; 
+    } else {
+       $ext_size = 100; 
+    }
+    
+    if ( $opt_i ) {
+       $gray = $opt_i; 
+    } else {
+       $gray = 0; 
+    }
+}
+
+# -----------------------------------------------------------------------------
+
+sub print_verbose_message {
+    print "Input: $input \tOutput: $output\n";
+}
+
+# -----------------------------------------------------------------------------
+
+# ToDo: Takes these from global module:
+
+# ----------------------------------------------------------------------------
+
+sub gp_ext {
+    local (@file_names) = @_;
+    local ($file_name);
+    local ($ps_file_name);
+    local ($prg);
+
+    #$prg = system "which gp-ext-imp";
+    #print "  Using script $prg for impuls extension\n";
+    $prg = $ENV{GRANDIR} ? $ENV{GRANDIR} . "/bin/gp-ext-imp" 
+                        : $ENV{HOME} . "/bin/gp-ext-imp" ;
+    if ( $opt_v ) {
+       print "    (using script $prg)\n";
+    }
+
+    foreach $file_name (@file_names) {
+       $ps_file_name = $file_name; # NB change to orig !!!!&dat2ps_name($file_name);
+        system "$prg -w $ext_size -g $gray " . 
+               $ps_file_name  . " " . 
+               $ps_file_name . "2" ;
+        system "mv " . $ps_file_name . "2 " . $ps_file_name;
+    }
+}
+
+# ----------------------------------------------------------------------------
+
+sub write_gp { 
+    local ($gp_file,$ps_file) = @_;
+    local ($str);
+
+    $xsize = 1;
+    $ysize = 1;
+    $xlabel = "Spark sites";
+    $ylabel = "Number of threads";
+    $xstart = &list_min(@sorted_keys);
+    $xend = &list_max(@sorted_keys);
+    $ymax = $max_val; 
+    $xtics = ""; "(" . join(',',@sorted_keys) . ")\n";
+    $in_file = $output;
+    $out_file = $ps_file;
+
+    open (GP,">$gp_file") || die "$!: $gp_file";
+    print GP "set term postscript \"Roman\" 20\n";
+
+    # identical to the part in write_gp_record of RTS2gran
+
+    $str = "set size " . $xsize . "," . $ysize . "\n" .
+           "set xlabel \"" . $xlabel . "\"\n" .
+           "set ylabel \"" . $ylabel . "\"\n" .
+           ($xstart eq "" ? "" 
+                          : "set xrange [" . int($xstart) .":" . int($xend) . "]\n") .
+           ($opt_Y ? 
+             ("set yrange [" . (index($logaxes,"y") != -1 ? 1 : 0) . ":$opt_Y]\n") :
+             ($ymax eq "" ? "" 
+                        : "set yrange [" . (index($logaxes,"y") != -1 ? 1 : 0) . 
+                          ":" . &list_max(2,int($ymax+$ymax/5)) . "]\n")) .
+           ($xtics ne "" ? "set xtics $xtics" : "") . 
+          "set tics out\n" .
+           "set border\n" .
+           ( $nPEs!=0 ? "set title \"$nPEs PEs\"\n" : "" ) .
+          "set nokey \n" .
+           "set nozeroaxis\n" .
+          "set format xy \"%8.8g\"\n" .
+           (index($logaxes,"x") != -1 ? 
+               "set logscale x\n" : 
+               "set nologscale x\n") .
+           (index($logaxes,"y") != -1 ? 
+               "set logscale y\n" : 
+               "set nologscale y\n") .
+           "set output \"" . $out_file . "\"\n" .
+          "plot \"" . $in_file . "\" with impulses\n\n";
+    print GP $str;
+    close (GP);
+}
+
+# ----------------------------------------------------------------------------