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