github.com/bgentry/go@v0.0.0-20150121062915-6cf5a733d54d/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