Reorganisation of the source tree
[ghc-hetmet.git] / utils / parallel / SPLIT.pl
diff --git a/utils/parallel/SPLIT.pl b/utils/parallel/SPLIT.pl
new file mode 100644 (file)
index 0000000..b4fe46f
--- /dev/null
@@ -0,0 +1,379 @@
+#!/usr/local/bin/perl
+#                                           (C) Hans Wolfgang Loidl, July 1995
+#############################################################################
+# Time-stamp: <Thu Oct 26 1995 18:23:00 Stardate: [-31]6498.62 hwloidl>
+#
+# Usage: SPLIT [options] <gr-file>
+#
+# Generate a set of granularity graphs out of the GrAnSim profile <gr-file>.
+# The granularity graphs are put into subdirs of the structure: 
+#   <basename of gr-file>-<spark-name>
+#
+# Options:
+#  -s <list> ... a perl list of spark names; the given <gr-file> is scanned 
+#                for each given name in turn and granularity graphs are 
+#                generated for each of these sparks  
+#  -O        ... use gr2RTS and RTS2gran instead of gran-extr;
+#                this generates fewer output files (only granularity graphs)
+#                but should be faster and far less memory consuming
+#  -d <dir>  ... use <dir> as basename for the sub-directories
+#  -o <file> ... use <file> as basename for the generated latex files; 
+#                the overall result is in  <file>.ps
+#  -t <file> ... use <file> as gran-extr type template file 
+#                ('.' for local template, ',' for global template)
+#  -A        ... surpress generation of granularity profiles for overall .gr
+#  -h        ... help; print this text.
+#  -v        ... verbose mode.
+#
+#############################################################################
+
+require "getopts.pl";
+
+&Getopts('hvOAd:o:s:t:');  
+
+do process_options();
+
+if ( $opt_v ) { do print_verbose_message(); }
+
+# ---------------------------------------------------------------------------
+# Init
+# ---------------------------------------------------------------------------
+
+$latex = "/usr/local/tex/bin/latex2e"; # or "/usr/local/tex/bin/latex2e"
+
+do all()  if !$opt_A;
+
+foreach $s (@sparks) {
+    if ( -f $tmp_file ) { system "rm -f $tmp_file"; }
+    system "tf -H -s $s $gr_file > $tmp_file" 
+       || die "Can't open pipe: tf -s $s $gr_file > $tmp_file\n";
+
+    if ( $opt_d ) {
+       $dir = $opt_d;          
+    } else {
+       $dir = $gr_file;
+    }
+    $dir =~ s/\.gr//g;
+    $dir .= "-$s";
+
+    if ( ! -d $dir ) {
+       mkdir($dir,"755");   # system "mkdir $dir";
+       system "chmod u+rwx $dir";
+    }
+
+    system "mv $tmp_file $dir/$gr_file";
+    chdir $dir;             
+    do print_template();
+    do print_va("Title",$s);
+    if ( -f $va_ps_file ) { 
+       local ($old) = $va_ps_file;
+       $old =~ s/\.ps/-o.ps/g;
+       system "mv $va_ps_file $old";
+    }
+    if ( $opt_O ) {
+       system "gr2RTS -o $rts_file $gr_file; " .
+              "RTS2gran -t $template_file $rts_file; " . 
+              "$latex $va_file; dvips $va_dvi_file > $va_ps_file"; 
+    } else {
+       system "gran-extr -t $template_file $gr_file; " . 
+           "$latex $va_file; dvips $va_dvi_file > $va_ps_file"; 
+    }
+    chdir "..";  # system "cd ..";
+}
+
+exit 0;
+
+# -----------------------------------------------------------------------------
+
+sub all {
+
+    $dir = $gr_file;
+    $dir =~ s/\.gr//g;
+    $dir .= "-all";
+
+    if ( ! -d $dir ) {
+       mkdir($dir,"755");   # system "mkdir $dir";
+       system "chmod u+rwx $dir";
+    }
+
+    system "cp $gr_file $dir/$gr_file";
+    chdir $dir;             
+    do print_template();
+    do print_va("All","all");
+    if ( -f $va_ps_file ) { 
+       local ($old) = $va_ps_file;
+       $old =~ s/\.ps/-o.ps/g;
+       system "mv $va_ps_file $old";
+    }
+    if ( $opt_O ) {
+       system "gr2RTS -o $rts_file $gr_file; " .
+              "RTS2gran -t $template_file $rts_file; " . 
+              "$latex $va_file; dvips $va_dvi_file > $va_ps_file"; 
+    } else {
+       system "gran-extr -t $template_file $gr_file; " . 
+           "$latex $va_file; dvips $va_dvi_file > $va_ps_file"; 
+    }
+    chdir "..";  # system "cd ..";
+}
+
+# ---------------------------------------------------------------------------
+
+sub print_template {
+
+    open (TEMPL,">$template_file") || die "Can't open $template_file\n";
+
+    print TEMPL <<EOF;
+-- Originally copied from the master template: GrAn/bin/TEMPL 
+-- Intervals for pure exec. times
+G: (1000, 2000, 3000, 4000, 5000, 10000, 20000, 30000, 40000, 50000, 100000, 200000, 300000)
+-- Intervals for communication (i.e. fetch)  times
+F: (1000, 2000, 3000, 4000, 5000, 10000, 20000, 30000, 40000, 50000, 100000, 200000, 300000)
+-- Intervals for communication percentages 
+C: (0, 1, 2, 5, 8, 10, 20, 30, 40, 50, 100)
+-- Intervals for no. of sparks
+S: (1, 2, 5)
+-- Intervals for heap allocations
+A: (10,20,30,40,50,100,200,300,400,500,1000,2000,3000)
+-- A: (100, 50000, 66000, 100000)
+
+
+g: g.dat
+f: f.dat
+c: c.dat
+s: s.dat
+a: a.dat
+
+-- Select file name corr coeff file
+Xcorr:                 CORR
+
+-- Select file names for GNUPLOT data files for cumulative runtime and
+-- cluster graphs
+Xcumulat-rts:  cumu-rts.dat
+Xcumulat-fts:  cumu-fts.dat
+Xcumulat-has:  cumu-has.dat
+Xcumulat-cps:  cumu-cps.dat
+Xclust-rts:    clust-rts.dat
+Xclust-has:    clust-has.dat
+Xclust-cps:    clust-cps.dat
+
+-- Select file names for GNUPLOT data files for per proc. runnable time
+-- and per spark site runtime
+Xpe:           pe.dat
+Xsn:           sn.dat
+
+-- Select file names for sorted lists of runtimes, heap allocs, number of
+-- local and global sparks and communication percentage
+XRTS:          RTS
+XFTS:          FTS
+XHAS:          HAS
+XLSPS:         LSPS
+XGSPS:         GSPS
+XCPS:          CPS
+XCCPS:         CPS
+
+-- Std log scaling
+L: .
+-- ('g',"xy",'Cg',"xy",'Ca',"xy")
+
+-- Gray level of impulses in the graph (0=black)
+i: 0.3
+
+-- Number of clusters
+k: 2
+
+-- Width of impulses (needed for gp-ext-imp)
+e: 150
+
+-- Input file
+-- -: soda.gr
+EOF
+
+    close(TEMPL);
+}
+
+# -----------------------------------------------------------------------------
+# NB: different file must be generated for $opt_O and default setup.
+# -----------------------------------------------------------------------------
+
+sub print_va {
+    local ($title, $spark) = @_;
+
+    open (VA,">$va_file") || die "Can't open $va_file\n";
+
+    if ( $opt_O ) {
+    print VA <<EOF;
+% Originally copied from master va-file: grasp/tests/va.tex
+\\documentstyle[11pt,psfig]{article}
+
+% Page Format
+\\topmargin=0cm                %0.5cm
+\\textheight=24cm                %22cm
+\\footskip=0cm
+\\oddsidemargin=0cm            %0.75cm
+\\evensidemargin=0cm           %0.75cm
+\\rightmargin=0cm            %0.75cm
+\\leftmargin=0cm            %0.75cm
+\\textwidth=16cm                 %14.5cm
+
+\\title{SPLIT}
+\\author{Me}
+\\date{Today}
+
+\\pssilent
+
+\\begin{document}
+
+\\pagestyle{empty}
+\%\\maketitle
+
+\\nopagebreak
+
+\\begin{figure}[t]
+\\begin{center}
+\\begin{tabular}{c}
+\\centerline{\\psfig{angle=270,width=7cm,file=$gran_file}}
+\\end{tabular}
+\\end{center}
+\\caption{Granularity {\\bf $spark}}
+\\end{figure}
+
+\\begin{figure}[t]
+\\begin{center}
+\\begin{tabular}{cc}
+\\psfig{angle=270,width=7cm,file=cumu-rts.ps} &
+\\psfig{angle=270,width=7cm,file=cumu-rts0.ps}
+\\end{tabular}
+\\end{center}
+\\caption{Cumulative Execution Times  {\\bf $spark}}
+\\end{figure}
+
+\\end{document}
+EOF
+    } else {
+    print VA <<EOF;
+% Originally copied from master va-file: grasp/tests/va.tex
+\\documentstyle[11pt,psfig]{article}
+
+% Page Format
+\\topmargin=0cm                %0.5cm
+\\textheight=24cm                %22cm
+\\footskip=0cm
+\\oddsidemargin=0cm            %0.75cm
+\\evensidemargin=0cm           %0.75cm
+\\rightmargin=0cm            %0.75cm
+\\leftmargin=0cm            %0.75cm
+\\textwidth=16cm                 %14.5cm
+
+\\title{$title; Spark: $spark}
+\\author{}
+\\date{}
+
+\\begin{document}
+
+\\pagestyle{empty}
+%\\maketitle
+
+\\nopagebreak
+
+\\begin{figure}[t]
+\\begin{center}
+\\begin{tabular}{cc}
+\\psfig{angle=270,width=7cm,file=$gran_file} &
+\\psfig{angle=270,width=7cm,file=a.ps}
+\\end{tabular}
+\\end{center}
+\\caption{Granularity \\& Heap Allocations {\\bf $spark}}
+\\end{figure}
+
+\\begin{figure}[t]
+\\begin{center}
+\\begin{tabular}{cc}
+\\psfig{angle=270,width=7cm,file=f.ps} &
+\\psfig{angle=270,width=7cm,file=c.ps}
+\\end{tabular}
+\\end{center}
+\\caption{Fetching Profile  {\\bf $spark}}
+\\end{figure}
+
+\\begin{figure}[t]
+\\begin{center}
+\\begin{tabular}{cc}
+\\psfig{angle=270,width=7cm,file=cumu-rts.ps} &
+\\psfig{angle=270,width=7cm,file=cumu-rts0.ps}
+\\end{tabular}
+\\end{center}
+\\caption{Cumulative Execution Times  {\\bf $spark}}
+\\end{figure}
+
+\\end{document}
+EOF
+}
+    close (VA);
+}
+
+# -----------------------------------------------------------------------------
+
+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;
+    }
+
+    $gr_file = $ARGV[0];
+    ($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 ) {
+       $va_file = $opt_o;
+       $va_dvi_file = $va_file;
+       $va_dvi_file =~ s/\.tex/.dvi/g; 
+       $va_ps_file = $va_file;
+       $va_ps_file =~ s/\.tex/.ps/g; 
+    } else {
+       $va_file = "va.tex";
+       $va_dvi_file = "va.dvi";
+       $va_ps_file = "va.ps";
+    }
+    
+    if ( $opt_t ) {
+       $template_file = $opt_t;
+    } else {
+       $template_file = "TEMPL";
+    }
+
+    $tmp_file = ",t";
+}
+
+# -----------------------------------------------------------------------------
+
+sub print_verbose_message {
+    print "Sparks: (" . join(',',@sparks) . ")\n";
+    print "Files: .gr " . $gr_file . "  template " . $template_file .
+           " va " . $va_file . "\n";
+}
+
+# -----------------------------------------------------------------------------