tabulate.sc

(define *n* 3)

(define (best l) (reduce min l infinity))

(define (skip string strings)
 (if (substring? string (first strings))
     strings
     (skip string (rest strings))))

(define (skipn string i strings)
 (skip (string-append  string " " (number->string i)) strings))

(define (ikarus-u+s string lines)
 (best
  (map-n
   (lambda (i)
    (/ (string->number
	(field-ref (first (skip "elapsed cpu time" (skipn string i lines))) 0))
       1000))
   *n*)))

(define (u+s string lines)
 (best
  (map-n
   (lambda (i)
    (+ (string->number
	(list->string
	 (but-last
	  (string->list
	   (field-ref (first (skip "pf+" (skipn string i lines))) 0)))))
       (string->number
	(list->string
	 (but-last
	  (string->list
	   (field-ref (first (skip "pf+" (skipn string i lines))) 1)))))))
   *n*)))

(define (larceny-u+s string lines)
 (best
  (map-n
   (lambda (i)
    (/ (+ (string->number
	   (field-ref (first (skip "Elapsed time" (skipn string i lines))) 5))
	  (string->number
	   (field-ref (first (skip "Elapsed time" (skipn string i lines))) 8)))
       1000))
   *n*)))

(define (scmutils-u+s string lines)
 (best
  (map-n
   (lambda (i)
    (+ (string->number
	(field-ref
	 (first
	  (skip "Timings:" (rest (skip "Timings:" (skipn string i lines)))))
	 1))
       (string->number
	(field-ref
	 (first
	  (skip "Timings:" (rest (skip "Timings:" (skipn string i lines)))))
	 2))))
   *n*)))

(call-with-output-file "run.tex"
 (lambda (run)
  (let* ((lines (read-file "run.text"))
	 (saddle-ikarus (ikarus-u+s "saddle Ikarus" lines))
	 (saddle-stalin (u+s "saddle Stalin" lines))
	 (saddle-s2c (u+s "saddle Scheme->C" lines))
	 (saddle-chicken (u+s "saddle Chicken" lines))
	 (saddle-bigloo (u+s "saddle Bigloo" lines))
	 (saddle-gambit (u+s "saddle Gambit" lines))
	 (saddle-larceny (larceny-u+s "saddle Larceny" lines))
	 (saddle-mzc (u+s "saddle MzC" lines))
	 (saddle-mzscheme (u+s "saddle MzScheme" lines))
	 (saddle-scmutils (scmutils-u+s "saddle Scmutils" lines))
	 (saddle-mlton (u+s "saddle MLton" lines))
	 (saddle-smlnj (u+s "saddle SML/NJ" lines))
	 (saddle-ocaml (u+s "saddle OCaml" lines))
	 (saddle-ghc (u+s "saddle GHC" lines))
	 (saddle-fadbad++ (u+s "saddle FADBAD++" lines))
	 (saddle-adifor (/ (u+s "saddle ADIFOR" lines) 1000))
	 (saddle-tapenade (/ (u+s "saddle Tapenade" lines) 1000))
	 (saddle-stalingrad (/ (u+s "saddle Stalingrad" lines) 1000))
	 (particle-ikarus (ikarus-u+s "particle Ikarus" lines))
	 (particle-stalin (u+s "particle Stalin" lines))
	 (particle-s2c (u+s "particle Scheme->C" lines))
	 (particle-chicken (u+s "particle Chicken" lines))
	 (particle-bigloo (u+s "particle Bigloo" lines))
	 (particle-gambit (u+s "particle Gambit" lines))
	 (particle-larceny (larceny-u+s "particle Larceny" lines))
	 (particle-mzc (u+s "particle MzC" lines))
	 (particle-mzscheme (u+s "particle MzScheme" lines))
	 (particle-scmutils (scmutils-u+s "particle Scmutils" lines))
	 (particle-mlton (u+s "particle MLton" lines))
	 (particle-smlnj (u+s "particle SML/NJ" lines))
	 (particle-ocaml (u+s "particle OCaml" lines))
	 (particle-ghc (u+s "particle GHC" lines))
	 (particle-fadbad++ (u+s "particle FADBAD++" lines))
	 (particle-adifor (/ (u+s "particle ADIFOR" lines) 1000))
	 (particle-tapenade (/ (u+s "particle Tapenade" lines) 1000))
	 (particle-stalingrad (/ (u+s "particle Stalingrad" lines) 1000)))
   (format run "\\begin{tabular}{l@{\\hspace{1em}}*{18}{r@{\\hspace{8pt}}}}~%")
   (format run "\\toprule~%")
   (format run "&\\multicolumn{18}{c}{\\textbf{Language/Implementation}}\\\\~%")
   (format run "\\cmidrule{2-19}~%")
   (format run "\\textbf{Example}~%")
   ;; Technically should be \GambitC
   (format run "&\\Stalingrad&\\Ikarus&\\Stalin&\\SchemeToC&\\Chicken&\\Bigloo&\\Gambit&\\Larceny&\\MzC&\\MzScheme&\\SCMUTILS&\\MLton&\\SMLNJ&\\OCaml&\\GHC&\\FADBADplusplus&\\ADIFOR&\\Tapenade\\\\~%")
   (format run "\\midrule~%")
   (format run "\\texttt{saddle}&1.00&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a\\\\~%"
	   (number->string-of-length-and-precision
	    (/ saddle-ikarus saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-stalin saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-s2c saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-chicken saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-bigloo saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-gambit saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-larceny saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mzc saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mzscheme saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-scmutils saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mlton saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-smlnj saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-ocaml saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-ghc saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-fadbad++ saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-adifor saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-tapenade saddle-stalingrad) 7 2))
   (format run "\\texttt{particle}&1.00&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a&~a\\\\~%"
	   (number->string-of-length-and-precision
	    (/ particle-ikarus particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-stalin particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-s2c particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-chicken particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-bigloo particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-gambit particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-larceny particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mzc particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mzscheme particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-scmutils particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mlton particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-smlnj particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-ocaml particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-ghc particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-fadbad++ particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-adifor particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-tapenade particle-stalingrad) 7 2))
   (format run "\\bottomrule~%")
   (format run "\\end{tabular}~%"))))

(call-with-output-file "run.html"
 (lambda (run)
  (let* ((lines (read-file "run.text"))
	 (saddle-ikarus (ikarus-u+s "saddle Ikarus" lines))
	 (saddle-stalin (u+s "saddle Stalin" lines))
	 (saddle-s2c (u+s "saddle Scheme->C" lines))
	 (saddle-chicken (u+s "saddle Chicken" lines))
	 (saddle-bigloo (u+s "saddle Bigloo" lines))
	 (saddle-gambit (u+s "saddle Gambit" lines))
	 (saddle-larceny (larceny-u+s "saddle Larceny" lines))
	 (saddle-mzc (u+s "saddle MzC" lines))
	 (saddle-mzscheme (u+s "saddle MzScheme" lines))
	 (saddle-scmutils (scmutils-u+s "saddle Scmutils" lines))
	 (saddle-mlton (u+s "saddle MLton" lines))
	 (saddle-smlnj (u+s "saddle SML/NJ" lines))
	 (saddle-ocaml (u+s "saddle OCaml" lines))
	 (saddle-ghc (u+s "saddle GHC" lines))
	 (saddle-fadbad++ (u+s "saddle FADBAD++" lines))
	 (saddle-adifor (/ (u+s "saddle ADIFOR" lines) 1000))
	 (saddle-tapenade (/ (u+s "saddle Tapenade" lines) 1000))
	 (saddle-stalingrad (/ (u+s "saddle Stalingrad" lines) 1000))
	 (particle-ikarus (ikarus-u+s "particle Ikarus" lines))
	 (particle-stalin (u+s "particle Stalin" lines))
	 (particle-s2c (u+s "particle Scheme->C" lines))
	 (particle-chicken (u+s "particle Chicken" lines))
	 (particle-bigloo (u+s "particle Bigloo" lines))
	 (particle-gambit (u+s "particle Gambit" lines))
	 (particle-larceny (larceny-u+s "particle Larceny" lines))
	 (particle-mzc (u+s "particle MzC" lines))
	 (particle-mzscheme (u+s "particle MzScheme" lines))
	 (particle-scmutils (scmutils-u+s "particle Scmutils" lines))
	 (particle-mlton (u+s "particle MLton" lines))
	 (particle-smlnj (u+s "particle SML/NJ" lines))
	 (particle-ocaml (u+s "particle OCaml" lines))
	 (particle-ghc (u+s "particle GHC" lines))
	 (particle-fadbad++ (u+s "particle FADBAD++" lines))
	 (particle-adifor (/ (u+s "particle ADIFOR" lines) 1000))
	 (particle-tapenade (/ (u+s "particle Tapenade" lines) 1000))
	 (particle-stalingrad (/ (u+s "particle Stalingrad" lines) 1000)))
   (format run "<table border=\"3\" frame=\"all\" rules=\"all\" cellpadding=\"3%\" summary=\"example\">~%")
   (format run "<caption align=\"bottom\">~%")
   (format run "Run times of the examples, normalized relative to a unit run time for <span style=\"font-variant: small-caps;\">Stalingrad</span>~%")
   (format run "</caption>~%")
   (format run "<tr>~%")
   (format run "<th rowspan=\"2\"></th>~%")
   (format run "<th align=\"center\" colspan=\"18\">Language/Implementation</th>~%")
   (format run "</tr>~%")
   (format run "<tr>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Stalingrad</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Ikarus</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Stalin</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Scheme</span>->C</th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Chicken</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Bigloo</span></th>~%")
   ;; Technically should be Gambit-C
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Gambit</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Larceny</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MzC</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MzScheme</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">scmutils</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">MLton</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">sml/nj</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">OCaml</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">ghc</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">fadbad</span>++</th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">adifor</span></th>~%")
   (format run "<th align=\"center\"><span style=\"font-variant: small-caps;\">Tapenade</span></th>~%")
   (format run "</tr>~%")
   (format run "<tr>~%<th align=\"left\"><tt>saddle</tt></th>~%<td align=\"right\">   1.00</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%</tr>~%"
	   (number->string-of-length-and-precision
	    (/ saddle-ikarus saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-stalin saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-s2c saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-chicken saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-bigloo saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-gambit saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-larceny saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mzc saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mzscheme saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-scmutils saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-mlton saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-smlnj saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-ocaml saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-ghc saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-fadbad++ saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-adifor saddle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ saddle-tapenade saddle-stalingrad) 7 2))
   (format run "<tr>~%<th align=\"left\"><tt>particle</tt></th>~%<td align=\"right\">   1.00</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%<td align=\"right\">~a</td>~%</tr>~%"
	   (number->string-of-length-and-precision
	    (/ particle-ikarus particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-stalin particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-s2c particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-chicken particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-bigloo particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-gambit particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-larceny particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mzc particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mzscheme particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-scmutils particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-mlton particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-smlnj particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-ocaml particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-ghc particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-fadbad++ particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-adifor particle-stalingrad) 7 2)
	   (number->string-of-length-and-precision
	    (/ particle-tapenade particle-stalingrad) 7 2))
   (format run "</table>~%"))))

Generated by GNU enscript 1.6.4.