X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=utils%2Fparallel%2FSN.pl;fp=utils%2Fparallel%2FSN.pl;h=bc33e2a60c467ecec12a1978d195f1ac6771d068;hb=0065d5ab628975892cea1ec7303f968c3338cbe1;hp=0000000000000000000000000000000000000000;hpb=28a464a75e14cece5db40f2765a29348273ff2d2;p=ghc-hetmet.git diff --git a/utils/parallel/SN.pl b/utils/parallel/SN.pl new file mode 100644 index 0000000..bc33e2a --- /dev/null +++ b/utils/parallel/SN.pl @@ -0,0 +1,280 @@ +#!/usr/local/bin/perl +# (C) Hans Wolfgang Loidl, November 1995 +############################################################################# +# Time-stamp: +# +# Usage: SN [options] +# +# 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 "par-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 () { + $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 () { + 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] \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); +} + +# ----------------------------------------------------------------------------