2 # This file is part of NIT ( http://www.nitlanguage.org ).
4 # Licensed under the Apache License, Version 2.0 (the "License");
5 # you may not use this file except in compliance with the License.
6 # You may obtain a copy of the License at
8 # http://www.apache.org/licenses/LICENSE-2.0
10 # Unless required by applicable law or agreed to in writing, software
11 # distributed under the License is distributed on an "AS IS" BASIS,
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 # See the License for the specific language governing permissions and
14 # limitations under the License.
16 # This shell script helps running benchmarks
18 # TODO: cleanup and libify the helper-parts
20 source .
/bench_plot.sh
22 ## CONFIGURATION OPTIONS ##
24 # Default number of times a command must be run with bench_command
25 # Can be overrided with 'the option -n'
28 ### HELPER FUNCTIONS ##
36 # Run a single command multiple time and store the execution times
37 # in the current $res file.
39 # $1: title of the command
40 # $2: long desription of the command
41 # rest: the command to execute
42 function bench_command
()
44 if [ "$dry_run" = "true" ]; then return; fi
49 if test "$verbose" = true
; then outputopts
="/dev/stdout"; else outputopts
="/dev/null"; fi
51 echo "$title" > "$timeout"
52 echo "# $desc" >> "$timeout"
53 echo "\$ $@" >> "$timeout"
55 echo "** [$title] $desc **"
58 # Execute the commands $count times
59 for i
in `seq 1 "$count"`; do
60 (ulimit -t
60; /usr
/bin
/time -f
"%U" -o
"$timeout" -a
"$@") > $outputopts 2>&1 || die
"$1: failed"
65 line
=`compute_stats "$timeout"`
71 # Run a simple command witout storing the execution time
72 # Used to display command on verbose and skip long executions when dry_run is given
73 # $@ command to execute
74 function run_command
()
76 if [ "$dry_run" = "true" ]; then return; fi
78 (ulimit -t
180; "$@") || die
"$@: failed"
81 # Check if the test should be skiped according to its name
82 # $1: name of the test
83 # $2: description of the test
84 # $NOTSKIPED: arguments
87 if test -z
"$NOTSKIPED"; then
91 if test "$NOTSKIPED" = "all"; then
93 elif echo "$1" |
egrep "$NOTSKIPED" >/dev
/null
2>&1; then
94 : # Found one to execute
108 echo "run_bench: [options]* benchname"
109 echo " -v: verbose mode"
110 echo " -n count: number of execution for each bar (default: $count)"
111 echo " --dry: Do not run the commands, just reuse the data and generate the graph"
112 echo " --fast: Run less and faster tests"
113 echo " -h: this help"
117 while [ "$stop" = false
]; do
119 -v
) verbose
=true
; shift;;
121 -n
) count
="$2"; shift; shift;;
122 --dry
) dry_run
=true
; shift;;
123 --fast
) fast
=true
; shift;;
130 if test -z
"$NOTSKIPED"; then
132 echo "List of available benches:"
133 echo "* all: run all the benches"
138 test -f .
/nitc_3 || .
/ncall.sh
-O
140 test -f .
/nitg || ..
/src
/nitc_3 ..
/src
/nitg.nit
-O
-v
142 ## EFFECTIVE BENCHS ##
144 function bench_typetest_languages
()
147 skip_test
"$name" && return
151 seq="w2_h2 w50_h2 w2_h25 w50_h25"
153 run_command .
/nitg languages
/gen.nit
154 run_command .
/gen.bin
"${t}_$b" "$b"
157 prepare_res
"$name-g++.dat" "g++" "g++"
159 run_command g
++ "${t}_$b.cpp" -O2
-o
"${t}_$b.g++.bin"
160 bench_command
"$b" "" "./${t}_$b.g++.bin" $s
163 prepare_res
"$name-clang++.dat" "clang++" "clang++"
165 run_command clang
++ "${t}_$b.cpp" -O2
-o
"${t}_$b.clang++.bin"
166 bench_command
"$b" "" "./${t}_$b.clang++.bin" $s
169 prepare_res
"$name-java.dat" "java" "java"
171 run_command javac
${t}_
$b.java
172 bench_command
"$b" "" java
"${t}_$b" $s
175 prepare_res
"$name-scala.dat" "scala" "scala"
177 run_command scalac
${t}_
$b.scala
178 bench_command
"$b" "" scala
"${t}_$b" $s
181 prepare_res
"$name-cs.dat" "c#" "c#"
183 run_command gmcs
${t}_
$b.cs
184 bench_command
"$b" "" mono
"${t}_$b.exe" $s
187 prepare_res
"$name-es.dat" "es" "es"
189 run_command ec
-clean
-finalize
${t}_
$b/app
${t}_
$b.e
191 mv app
${t}_
$b ${t}_
$b.es.bin
192 bench_command
"$b" "" "./${t}_$b.es.bin" $s
195 prepare_res
"$name-se.dat" "se" "se"
197 run_command se compile
-no_check app
${t}_
${b}_se.e
-loadpath
${t}_
${b}_se
-o
${t}_
$b.se.bin
198 bench_command
"$b" "" "./${t}_$b.se.bin" $s
202 #prepare_res "$name-nitg.dat" "nitg" "nitg"
204 # run_command ./nitg "${t}_$b.nit" -o "${t}_$b.nitg.bin" --make-flags "CFLAGS=\"-g -O2 -DNOBOEHM\""
205 # bench_command "$b" "" "./${t}_$b.nitg.bin" $s
208 prepare_res
"$name-nitg-s.dat" "nitg-s" "nitg-s"
210 run_command .
/nitg
${t}_
$b.nit
--separate
-o
"${t}_$b.nitg-s.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
211 bench_command
"$b" "" "./${t}_$b.nitg-s.bin" $s
214 prepare_res
"$name-nitg-su.dat" "nitg-su" "nitg-su"
216 run_command .
/nitg
${t}_
$b.nit
--separate
--no
-check
-covariance
-o
"${t}_$b.nitg-su.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
217 bench_command
"$b" "" "./${t}_$b.nitg-su.bin" $s
221 prepare_res
"$name-nitg-e.dat" "nitg-e" "nitg-e"
223 run_command .
/nitg
${t}_
$b.nit
--erasure
-o
"${t}_$b.nitg-e.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
224 bench_command
"$b" "" "./${t}_$b.nitg-e.bin" $s
227 prepare_res
"$name-nitg-eu.dat" "nitg-eu" "nitg-eu"
229 run_command .
/nitg
${t}_
$b.nit
--erasure
--no
-check
-covariance
--no
-check
-erasure
-cast
-o
"${t}_$b.nitg-eu.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
230 bench_command
"$b" "" "./${t}_$b.nitg-eu.bin" $s
235 bench_typetest_languages
237 function bench_typetest_depth
()
240 skip_test
"$name" && return
242 basedir
="./${name}.out"
250 run_command .
/nitg languages
/$name.nit
-o
$basedir/$name.bin
251 run_command
$basedir/$name.bin
$basedir "${t}_$b" "$b"
254 prepare_res
$basedir/$name-g
++.dat
"g++" "g++"
255 cppdir
="${basedir}/cpp"
257 run_command g
++ "${cppdir}/${t}_$b.cpp" -O2
-o
"${cppdir}/${t}_$b.g++.bin"
258 bench_command
"$b" "" "${cppdir}/${t}_$b.g++.bin" $s
261 prepare_res
$basedir/$name-clang
++.dat
"clang++" "clang++"
263 run_command clang
++ "${cppdir}/${t}_$b.cpp" -O2
-o
"${cppdir}/${t}_$b.clang++.bin"
264 bench_command
"$b" "" "${cppdir}/${t}_$b.clang++.bin" $s
267 prepare_res
$basedir/$name-java.dat
"java" "java"
268 javadir
="${basedir}/java"
270 run_command javac
"${javadir}/${t}_$b.java"
271 bench_command
"$b" "" java
-cp "${javadir}/" "${t}_$b" $s
274 prepare_res
$basedir/$name-scala.dat
"scala" "scala"
275 scaladir
="${basedir}/scala"
277 run_command scalac
"${scaladir}/${t}_$b.scala" -d
"${scaladir}"
278 bench_command
"$b" "" scala
-cp "${scaladir}/" "${t}_$b" $s
281 prepare_res
$basedir/$name-cs.dat
"c#" "c#"
282 csdir
="${basedir}/cs"
284 run_command gmcs
"$csdir/${t}_$b.cs"
285 bench_command
"$b" "" mono
"$csdir/${t}_$b.exe" $s
288 prepare_res
$basedir/$name-es.dat
"es" "es"
289 esdir
="${basedir}/es"
292 run_command ec
-clean
-finalize
${t}_
$b/app
${t}_
$b.e
294 mv app
${t}_
$b ${t}_
$b.es.bin
296 bench_command
"$b" "" "$esdir/${t}_$b.es.bin" $s
299 prepare_res
$basedir/$name-se.dat
"se" "se"
300 sedir
="${basedir}/se"
303 run_command se compile
-no_check app
${t}_
${b}_se.e
-loadpath
${t}_
${b}_se
-o
${t}_
$b.se.bin
305 bench_command
"$b" "" "$sedir/${t}_$b.se.bin" $s
308 nitdir
="${basedir}/nit"
309 prepare_res
$nitdir/$name-nitg.dat
"nitg" "nitg"
311 run_command .
/nitg
$nitdir/${t}_
$b.nit
-o
"$nitdir/${t}_$b.nitg.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
312 bench_command
"$b" "" "$nitdir/${t}_$b.nitg.bin" $s
315 prepare_res
$nitdir/$name-nitg
-s.dat
"nitg-s" "nitg-s"
317 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
-o
"$nitdir/${t}_$b.nitg-s.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
318 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-s.bin" $s
321 prepare_res
$nitdir/$name-nitg
-su.dat
"nitg-su" "nitg-su"
323 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
--no
-check
-covariance
-o
"$nitdir/${t}_$b.nitg-su.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
324 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-su.bin" $s
327 prepare_res
$nitdir/$name-nitg
-e.dat
"nitg-e" "nitg-e"
329 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
-o
"$nitdir/${t}_$b.nitg-e.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
330 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-e.bin" $s
333 prepare_res
$nitdir/$name-nitg
-eu.dat
"nitg-eu" "nitg-eu"
335 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
--no
-check
-covariance
--no
-check
-erasure
-cast
-o
"$nitdir/${t}_$b.nitg-eu.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
336 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-eu.bin" $s
339 plot
$basedir/$name.gnu
343 function bench_typetest_fts_depth
()
346 skip_test
"$name" && return
348 basedir
="./${name}.out"
356 run_command .
/nitg languages
/$name.nit
-o
$basedir/$name.bin
357 run_command
$basedir/$name.bin
$basedir "${t}_$b" "$b"
360 prepare_res
$basedir/$name-cs.dat
"c#" "c#"
361 csdir
="${basedir}/cs"
363 run_command gmcs
"$csdir/${t}_$b.cs"
364 bench_command
"$b" "" mono
"$csdir/${t}_$b.exe" $s
367 prepare_res
$basedir/$name-es.dat
"es" "es"
368 esdir
="${basedir}/es"
371 run_command ec
-clean
-finalize
${t}_
$b/app
${t}_
$b.e
373 mv app
${t}_
$b ${t}_
$b.es.bin
375 bench_command
"$b" "" "$esdir/${t}_$b.es.bin" $s
378 prepare_res
$basedir/$name-se.dat
"se" "se"
379 sedir
="${basedir}/se"
382 run_command se compile
-no_check app
${t}_
${b}_se.e
-loadpath
${t}_
${b}_se
-o
${t}_
$b.se.bin
384 bench_command
"$b" "" "$sedir/${t}_$b.se.bin" $s
387 nitdir
="${basedir}/nit"
388 prepare_res
$nitdir/$name-nitg.dat
"nitg" "nitg"
390 run_command .
/nitg
$nitdir/${t}_
$b.nit
-o
"$nitdir/${t}_$b.nitg.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
391 bench_command
"$b" "" "$nitdir/${t}_$b.nitg.bin" $s
394 prepare_res
$nitdir/$name-nitg
-s.dat
"nitg-s" "nitg-s"
396 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
-o
"$nitdir/${t}_$b.nitg-s.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
397 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-s.bin" $s
400 prepare_res
$nitdir/$name-nitg
-su.dat
"nitg-su" "nitg-su"
402 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
--no
-check
-covariance
-o
"$nitdir/${t}_$b.nitg-su.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
403 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-su.bin" $s
406 prepare_res
$nitdir/$name-nitg
-e.dat
"nitg-e" "nitg-e"
408 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
-o
"$nitdir/${t}_$b.nitg-e.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
409 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-e.bin" $s
412 prepare_res
$nitdir/$name-nitg
-eu.dat
"nitg-eu" "nitg-eu"
414 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
--no
-check
-covariance
--no
-check
-erasure
-cast
-o
"$nitdir/${t}_$b.nitg-eu.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
415 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-eu.bin" $s
418 plot
$basedir/$name.gnu
420 bench_typetest_fts_depth
422 function bench_typetest_fts_width
()
425 skip_test
"$name" && return
427 basedir
="./${name}.out"
436 run_command .
/nitg languages
/$name.nit
-o
$basedir/$name.bin
437 run_command
$basedir/$name.bin
$basedir "${t}_$b" $depth $b
440 prepare_res
$basedir/$name-cs.dat
"c#" "c#"
441 csdir
="${basedir}/cs"
443 run_command gmcs
"$csdir/${t}_$b.cs"
444 bench_command
"$b" "" mono
"$csdir/${t}_$b.exe" $s
447 prepare_res
$basedir/$name-es.dat
"es" "es"
448 esdir
="${basedir}/es"
451 run_command ec
-clean
-finalize
${t}_
$b/app
${t}_
$b.e
453 mv app
${t}_
$b ${t}_
$b.es.bin
455 bench_command
"$b" "" "$esdir/${t}_$b.es.bin" $s
458 prepare_res
$basedir/$name-se.dat
"se" "se"
459 sedir
="${basedir}/se"
462 run_command se compile
-no_check app
${t}_
${b}_se.e
-loadpath
${t}_
${b}_se
-o
${t}_
$b.se.bin
464 bench_command
"$b" "" "$sedir/${t}_$b.se.bin" $s
467 nitdir
="${basedir}/nit"
469 prepare_res
$nitdir/$name-nitg.dat
"nitg" "nitg"
471 run_command .
/nitg
$nitdir/${t}_
$b.nit
-o
"$nitdir/${t}_$b.nitg.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
472 bench_command
"$b" "" "$nitdir/${t}_$b.nitg.bin" $s
475 prepare_res
$nitdir/$name-nitg
-s.dat
"nitg-s" "nitg-s"
477 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
-o
"$nitdir/${t}_$b.nitg-s.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
478 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-s.bin" $s
481 prepare_res
$nitdir/$name-nitg
-su.dat
"nitg-su" "nitg-su"
483 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
--no
-check
-covariance
-o
"$nitdir/${t}_$b.nitg-su.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
484 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-su.bin" $s
487 prepare_res
$nitdir/$name-nitg
-e.dat
"nitg-e" "nitg-e"
489 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
-o
"$nitdir/${t}_$b.nitg-e.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
490 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-e.bin" $s
493 prepare_res
$nitdir/$name-nitg
-eu.dat
"nitg-eu" "nitg-eu"
495 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
--no
-check
-covariance
--no
-check
-erasure
-cast
-o
"$nitdir/${t}_$b.nitg-eu.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
496 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-eu.bin" $s
499 plot
$basedir/$name.gnu
501 bench_typetest_fts_width
503 function bench_typetest_fts_nesting
()
506 skip_test
"$name" && return
508 basedir
="./${name}.out"
517 run_command .
/nitg languages
/$name.nit
-o
$basedir/$name.bin
518 run_command
$basedir/$name.bin
$basedir "${t}_$b" $depth $b
521 prepare_res
$basedir/$name-cs.dat
"c#" "c#"
522 csdir
="${basedir}/cs"
524 run_command gmcs
"$csdir/${t}_$b.cs"
525 bench_command
"$b" "" mono
"$csdir/${t}_$b.exe" $s
528 prepare_res
$basedir/$name-es.dat
"es" "es"
529 esdir
="${basedir}/es"
532 run_command ec
-clean
-finalize
${t}_
$b/app
${t}_
$b.e
534 mv app
${t}_
$b ${t}_
$b.es.bin
536 bench_command
"$b" "" "$esdir/${t}_$b.es.bin" $s
539 prepare_res
$basedir/$name-se.dat
"se" "se"
540 sedir
="${basedir}/se"
543 run_command se compile
-no_check app
${t}_
${b}_se.e
-loadpath
${t}_
${b}_se
-o
${t}_
$b.se.bin
545 bench_command
"$b" "" "$sedir/${t}_$b.se.bin" $s
548 nitdir
="${basedir}/nit"
550 prepare_res
$nitdir/$name-nitg.dat
"nitg" "nitg"
552 run_command .
/nitg
$nitdir/${t}_
$b.nit
-o
"$nitdir/${t}_$b.nitg.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
553 bench_command
"$b" "" "$nitdir/${t}_$b.nitg.bin" $s
556 prepare_res
$nitdir/$name-nitg
-s.dat
"nitg-s" "nitg-s"
558 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
-o
"$nitdir/${t}_$b.nitg-s.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
559 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-s.bin" $s
562 prepare_res
$nitdir/$name-nitg
-su.dat
"nitg-su" "nitg-su"
564 run_command .
/nitg
$nitdir/${t}_
$b.nit
--separate
--no
-check
-covariance
-o
"$nitdir/${t}_$b.nitg-su.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
565 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-su.bin" $s
568 prepare_res
$nitdir/$name-nitg
-e.dat
"nitg-e" "nitg-e"
570 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
-o
"$nitdir/${t}_$b.nitg-e.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
571 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-e.bin" $s
574 prepare_res
$nitdir/$name-nitg
-eu.dat
"nitg-eu" "nitg-eu"
576 run_command .
/nitg
$nitdir/${t}_
$b.nit
--erasure
--no
-check
-covariance
--no
-check
-erasure
-cast
-o
"$nitdir/${t}_$b.nitg-eu.bin" --make-flags
"CFLAGS=\"-g -O2 -DNOBOEHM\""
577 bench_command
"$b" "" "$nitdir/${t}_$b.nitg-eu.bin" $s
580 plot
$basedir/$name.gnu
582 bench_typetest_fts_nesting
584 if test -n
"$died"; then
585 echo "Some commands failed"