github.com/razvanm/vanadium-go-1.3@v0.0.0-20160721203343-4a65068e5915/test/bench/shootout/timing.sh (about)

     1  #!/usr/bin/env bash
     2  # Copyright 2009 The Go Authors.  All rights reserved.
     3  # Use of this source code is governed by a BSD-style
     4  # license that can be found in the LICENSE file.
     5  
     6  set -e
     7  
     8  eval $(go tool dist env)
     9  O=$GOCHAR
    10  GC="go tool ${O}g"
    11  LD="go tool ${O}l"
    12  
    13  gccm=""
    14  case "$O" in
    15  8)
    16  	gccm=-m32;;
    17  6)
    18  	gccm=-m64;;
    19  esac
    20  
    21  EXE="out"
    22  havepcre=true
    23  haveglib=true
    24  havegmp=true
    25  case "$(uname)" in
    26  *MINGW* | *WIN32* | *CYGWIN*)
    27  	havepcre=false
    28  	haveglib=false
    29  	havegmp=false
    30  	if which pkg-config >/dev/null 2>&1; then
    31  		if pkg-config --cflags libpcre >/dev/null 2>&1
    32  		then
    33  			echo "havepcre"
    34  			havepcre=true
    35  		fi
    36  		if pkg-config --cflags glib-2.0 >/dev/null 2>&1
    37  		then
    38  			haveglib=true
    39  		fi
    40  		if pkg-config --cflags gmp >/dev/null 2>&1
    41  		then
    42  			havegmp=true
    43  		fi
    44  	fi
    45  	EXE=exe;;
    46  esac
    47  
    48  PATH=.:$PATH
    49  
    50  havegccgo=false
    51  if which gccgo >/dev/null 2>&1
    52  then
    53  	havegccgo=true
    54  fi
    55  
    56  mode=run
    57  case X"$1" in
    58  X-test)
    59  	mode=test
    60  	shift
    61  esac
    62  
    63  gc() {
    64  	$GC $1.go; $LD -o $O.$EXE $1.$O
    65  }
    66  
    67  gc_B() {
    68  	$GC -B $1.go; $LD -o $O.$EXE $1.$O
    69  }
    70  
    71  runonly() {
    72  	if [ $mode = run ]
    73  	then
    74  		"$@"
    75  	fi
    76  }
    77  
    78  run() {
    79  	if [ $mode = test ]
    80  	then
    81  		if echo $1 | grep -q '^gc '
    82  		then
    83  			$1	# compile the program
    84  			program=$(echo $1 | sed 's/gc //')
    85  			shift
    86  			echo $program
    87  			$1 <fasta-1000.out > /tmp/$$
    88  			case $program in
    89  			chameneosredux)
    90  				# exact numbers may vary but non-numbers should match
    91  				grep -v '[0-9]' /tmp/$$ > /tmp/$$x
    92  				grep -v '[0-9]' chameneosredux.txt > /tmp/$$y
    93  				cmp /tmp/$$x /tmp/$$y
    94  				rm -f /tmp/$$ /tmp/$$x /tmp/$$y
    95  				;;
    96  			*)
    97  				cmp /tmp/$$ $program.txt
    98  				rm -f /tmp/$$
    99  			esac
   100  		fi
   101  		return
   102  	fi
   103  	if ! $havegccgo && echo $1 | grep -q '^gccgo '
   104  	then
   105  		return
   106  	fi
   107  	echo -n '	'$1'	'
   108  	$1
   109  	shift
   110  	
   111  	echo $((time -p $* >/dev/null) 2>&1) | awk '{print $4 "u " $6 "s " $2 "r"}'
   112  }
   113  
   114  fasta() {
   115  	runonly echo 'fasta -n 25000000'
   116  	run "gcc $gccm -O2 fasta.c" a.$EXE 25000000
   117  	run 'gccgo -O2 fasta.go' a.$EXE -n 25000000	#commented out until WriteString is in bufio
   118  	run 'gc fasta' $O.$EXE -n 25000000
   119  	run 'gc_B fasta' $O.$EXE -n 25000000
   120  }
   121  
   122  revcomp() {
   123  	runonly gcc -O2 fasta.c
   124  	runonly a.$EXE 25000000 > x
   125  	runonly echo 'reverse-complement < output-of-fasta-25000000'
   126  	run "gcc $gccm -O2 reverse-complement.c" a.$EXE < x
   127  	run 'gccgo -O2 reverse-complement.go' a.$EXE < x
   128  	run 'gc reverse-complement' $O.$EXE < x
   129  	run 'gc_B reverse-complement' $O.$EXE < x
   130  	rm x
   131  }
   132  
   133  nbody() {
   134  	runonly echo 'nbody -n 50000000'
   135  	run "gcc $gccm -O2 nbody.c -lm" a.$EXE 50000000
   136  	run 'gccgo -O2 nbody.go' a.$EXE -n 50000000
   137  	run 'gc nbody' $O.$EXE -n 50000000
   138  	run 'gc_B nbody' $O.$EXE -n 50000000
   139  }
   140  
   141  binarytree() {
   142  	runonly echo 'binary-tree 15 # too slow to use 20'
   143  	run "gcc $gccm -O2 binary-tree.c -lm" a.$EXE 15
   144  	run 'gccgo -O2 binary-tree.go' a.$EXE -n 15
   145  	run 'gccgo -O2 binary-tree-freelist.go' a.$EXE -n 15
   146  	run 'gc binary-tree' $O.$EXE -n 15
   147  	run 'gc binary-tree-freelist' $O.$EXE -n 15
   148  }
   149  
   150  fannkuch() {
   151  	runonly echo 'fannkuch 12'
   152  	run "gcc $gccm -O2 fannkuch.c" a.$EXE 12
   153  	run 'gccgo -O2 fannkuch.go' a.$EXE -n 12
   154  	run 'gccgo -O2 fannkuch-parallel.go' a.$EXE -n 12
   155  	run 'gc fannkuch' $O.$EXE -n 12
   156  	run 'gc fannkuch-parallel' $O.$EXE -n 12
   157  	run 'gc_B fannkuch' $O.$EXE -n 12
   158  }
   159  
   160  regexdna() {
   161  	runonly gcc -O2 fasta.c
   162  	runonly a.$EXE 100000 > x
   163  	runonly echo 'regex-dna 100000'
   164  	if  $havepcre; then
   165  		run "gcc $gccm -O2 regex-dna.c $(pkg-config libpcre --cflags --libs)" a.$EXE <x
   166  	fi
   167  	run 'gccgo -O2 regex-dna.go' a.$EXE <x
   168  	run 'gccgo -O2 regex-dna-parallel.go' a.$EXE <x
   169  	run 'gc regex-dna' $O.$EXE <x
   170  	run 'gc regex-dna-parallel' $O.$EXE <x
   171  	run 'gc_B regex-dna' $O.$EXE <x
   172  	rm x
   173  }
   174  
   175  spectralnorm() {
   176  	runonly echo 'spectral-norm 5500'
   177  	run "gcc $gccm -O2 spectral-norm.c -lm" a.$EXE 5500
   178  	run 'gccgo -O2 spectral-norm.go' a.$EXE -n 5500
   179  	run 'gc spectral-norm' $O.$EXE -n 5500
   180  	run 'gc_B spectral-norm' $O.$EXE -n 5500
   181  }
   182  
   183  knucleotide() {
   184  	runonly gcc -O2 fasta.c
   185  	runonly a.$EXE 1000000 > x  # should be using 25000000
   186  	runonly echo 'k-nucleotide 1000000'
   187  	if [ $mode = run ] && $haveglib; then
   188  		run "gcc -O2 k-nucleotide.c $(pkg-config glib-2.0 --cflags --libs)" a.$EXE <x
   189  	fi
   190  	run 'gccgo -O2 k-nucleotide.go' a.$EXE <x
   191  	run 'gccgo -O2 k-nucleotide-parallel.go' a.$EXE <x
   192  	run 'gc k-nucleotide' $O.$EXE <x
   193  	run 'gc k-nucleotide-parallel' $O.$EXE <x
   194  	run 'gc_B k-nucleotide' $O.$EXE <x
   195  	rm x
   196  }
   197  
   198  mandelbrot() {
   199  	runonly echo 'mandelbrot 16000'
   200  	run "gcc $gccm -O2 mandelbrot.c" a.$EXE 16000
   201  	run 'gccgo -O2 mandelbrot.go' a.$EXE -n 16000
   202  	run 'gc mandelbrot' $O.$EXE -n 16000
   203  	run 'gc_B mandelbrot' $O.$EXE -n 16000
   204  }
   205  
   206  meteor() {
   207  	runonly echo 'meteor 2098'
   208  	run "gcc $gccm -O2 meteor-contest.c" a.$EXE 2098
   209  	run 'gccgo -O2 meteor-contest.go' a.$EXE -n 2098
   210  	run 'gc meteor-contest' $O.$EXE -n 2098
   211  	run 'gc_B  meteor-contest' $O.$EXE -n 2098
   212  }
   213  
   214  pidigits() {
   215  	runonly echo 'pidigits 10000'
   216  	if  $havegmp; then
   217  		run "gcc $gccm -O2 pidigits.c -lgmp" a.$EXE 10000
   218  	fi
   219  	run 'gccgo -O2 pidigits.go' a.$EXE -n 10000
   220  	run 'gc pidigits' $O.$EXE -n 10000
   221  	run 'gc_B  pidigits' $O.$EXE -n 10000
   222  }
   223  
   224  threadring() {
   225  	runonly echo 'threadring 50000000'
   226  	run "gcc $gccm -O2 threadring.c -lpthread" a.$EXE 50000000
   227  	run 'gccgo -O2 threadring.go' a.$EXE -n 50000000
   228  	run 'gc threadring' $O.$EXE -n 50000000
   229  }
   230  
   231  chameneos() {
   232  	runonly echo 'chameneos 6000000'
   233  	run "gcc $gccm -O2 chameneosredux.c -lpthread" a.$EXE 6000000
   234  	run 'gccgo -O2 chameneosredux.go' a.$EXE 6000000
   235  	run 'gc chameneosredux' $O.$EXE 6000000
   236  }
   237  
   238  case $# in
   239  0)
   240  	run="fasta revcomp nbody binarytree fannkuch regexdna spectralnorm knucleotide mandelbrot meteor pidigits threadring chameneos"
   241  	;;
   242  *)
   243  	run=$*
   244  esac
   245  
   246  for i in $run
   247  do
   248  	$i
   249  	runonly echo
   250  done