diff options
author | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:22:53 +0200 |
---|---|---|
committer | Michael Stapelberg <stapelberg@debian.org> | 2014-06-19 09:22:53 +0200 |
commit | 8a39ee361feb9bf46d728ff1ba4f07ca1d9610b1 (patch) | |
tree | 4449f2036cccf162e8417cc5841a35815b3e7ac5 /test/bench | |
parent | c8bf49ef8a92e2337b69c14b9b88396efe498600 (diff) | |
download | golang-upstream/1.3.tar.gz |
Imported Upstream version 1.3upstream/1.3
Diffstat (limited to 'test/bench')
-rw-r--r-- | test/bench/shootout/threadring.c | 12 | ||||
-rwxr-xr-x | test/bench/shootout/timing.sh | 157 |
2 files changed, 105 insertions, 64 deletions
diff --git a/test/bench/shootout/threadring.c b/test/bench/shootout/threadring.c index a518134ba..606db71dc 100644 --- a/test/bench/shootout/threadring.c +++ b/test/bench/shootout/threadring.c @@ -41,8 +41,12 @@ POSSIBILITY OF SUCH DAMAGE. #include <string.h> #include <limits.h> -#define THREADS (503) +// PTHREAD_STACK_MIN undeclared on mingw +#ifndef PTHREAD_STACK_MIN +#define PTHREAD_STACK_MIN 65535 +#endif +#define THREADS (503) struct stack { char x[PTHREAD_STACK_MIN]; @@ -94,7 +98,13 @@ int main(int argc, char **argv) pthread_mutex_init(mutex + i, NULL); pthread_mutex_lock(mutex + i); +#if defined(__MINGW32__) || defined(__MINGW64__) + pthread_attr_setstackaddr(&stack_attr, &stacks[i]); + pthread_attr_setstacksize(&stack_attr, sizeof(struct stack)); +#else pthread_attr_setstack(&stack_attr, &stacks[i], sizeof(struct stack)); +#endif + pthread_create(&cthread, &stack_attr, thread, (void*)(uintptr_t)i); } diff --git a/test/bench/shootout/timing.sh b/test/bench/shootout/timing.sh index 2db895c26..a06c326c3 100755 --- a/test/bench/shootout/timing.sh +++ b/test/bench/shootout/timing.sh @@ -18,6 +18,33 @@ case "$O" in gccm=-m64;; esac +EXE="out" +havepcre=true +haveglib=true +havegmp=true +case "$(uname)" in +*MINGW* | *WIN32* | *CYGWIN*) + havepcre=false + haveglib=false + havegmp=false + if which pkg-config >/dev/null 2>&1; then + if pkg-config --cflags libpcre >/dev/null 2>&1 + then + echo "havepcre" + havepcre=true + fi + if pkg-config --cflags glib-2.0 >/dev/null 2>&1 + then + haveglib=true + fi + if pkg-config --cflags gmp >/dev/null 2>&1 + then + havegmp=true + fi + fi + EXE=exe;; +esac + PATH=.:$PATH havegccgo=false @@ -34,11 +61,11 @@ X-test) esac gc() { - $GC $1.go; $LD $1.$O + $GC $1.go; $LD -o $O.$EXE $1.$O } gc_B() { - $GC -B $1.go; $LD $1.$O + $GC -B $1.go; $LD -o $O.$EXE $1.$O } runonly() { @@ -86,122 +113,126 @@ run() { fasta() { runonly echo 'fasta -n 25000000' - run "gcc $gccm -O2 fasta.c" a.out 25000000 - run 'gccgo -O2 fasta.go' a.out -n 25000000 #commented out until WriteString is in bufio - run 'gc fasta' $O.out -n 25000000 - run 'gc_B fasta' $O.out -n 25000000 + run "gcc $gccm -O2 fasta.c" a.$EXE 25000000 + run 'gccgo -O2 fasta.go' a.$EXE -n 25000000 #commented out until WriteString is in bufio + run 'gc fasta' $O.$EXE -n 25000000 + run 'gc_B fasta' $O.$EXE -n 25000000 } revcomp() { runonly gcc -O2 fasta.c - runonly a.out 25000000 > x + runonly a.$EXE 25000000 > x runonly echo 'reverse-complement < output-of-fasta-25000000' - run "gcc $gccm -O2 reverse-complement.c" a.out < x - run 'gccgo -O2 reverse-complement.go' a.out < x - run 'gc reverse-complement' $O.out < x - run 'gc_B reverse-complement' $O.out < x + run "gcc $gccm -O2 reverse-complement.c" a.$EXE < x + run 'gccgo -O2 reverse-complement.go' a.$EXE < x + run 'gc reverse-complement' $O.$EXE < x + run 'gc_B reverse-complement' $O.$EXE < x rm x } nbody() { runonly echo 'nbody -n 50000000' - run "gcc $gccm -O2 nbody.c -lm" a.out 50000000 - run 'gccgo -O2 nbody.go' a.out -n 50000000 - run 'gc nbody' $O.out -n 50000000 - run 'gc_B nbody' $O.out -n 50000000 + run "gcc $gccm -O2 nbody.c -lm" a.$EXE 50000000 + run 'gccgo -O2 nbody.go' a.$EXE -n 50000000 + run 'gc nbody' $O.$EXE -n 50000000 + run 'gc_B nbody' $O.$EXE -n 50000000 } binarytree() { runonly echo 'binary-tree 15 # too slow to use 20' - run "gcc $gccm -O2 binary-tree.c -lm" a.out 15 - run 'gccgo -O2 binary-tree.go' a.out -n 15 - run 'gccgo -O2 binary-tree-freelist.go' a.out -n 15 - run 'gc binary-tree' $O.out -n 15 - run 'gc binary-tree-freelist' $O.out -n 15 + run "gcc $gccm -O2 binary-tree.c -lm" a.$EXE 15 + run 'gccgo -O2 binary-tree.go' a.$EXE -n 15 + run 'gccgo -O2 binary-tree-freelist.go' a.$EXE -n 15 + run 'gc binary-tree' $O.$EXE -n 15 + run 'gc binary-tree-freelist' $O.$EXE -n 15 } fannkuch() { runonly echo 'fannkuch 12' - run "gcc $gccm -O2 fannkuch.c" a.out 12 - run 'gccgo -O2 fannkuch.go' a.out -n 12 - run 'gccgo -O2 fannkuch-parallel.go' a.out -n 12 - run 'gc fannkuch' $O.out -n 12 - run 'gc fannkuch-parallel' $O.out -n 12 - run 'gc_B fannkuch' $O.out -n 12 + run "gcc $gccm -O2 fannkuch.c" a.$EXE 12 + run 'gccgo -O2 fannkuch.go' a.$EXE -n 12 + run 'gccgo -O2 fannkuch-parallel.go' a.$EXE -n 12 + run 'gc fannkuch' $O.$EXE -n 12 + run 'gc fannkuch-parallel' $O.$EXE -n 12 + run 'gc_B fannkuch' $O.$EXE -n 12 } regexdna() { runonly gcc -O2 fasta.c - runonly a.out 100000 > x + runonly a.$EXE 100000 > x runonly echo 'regex-dna 100000' - run "gcc $gccm -O2 regex-dna.c -lpcre" a.out <x - run 'gccgo -O2 regex-dna.go' a.out <x - run 'gccgo -O2 regex-dna-parallel.go' a.out <x - run 'gc regex-dna' $O.out <x - run 'gc regex-dna-parallel' $O.out <x - run 'gc_B regex-dna' $O.out <x + if $havepcre; then + run "gcc $gccm -O2 regex-dna.c $(pkg-config libpcre --cflags --libs)" a.$EXE <x + fi + run 'gccgo -O2 regex-dna.go' a.$EXE <x + run 'gccgo -O2 regex-dna-parallel.go' a.$EXE <x + run 'gc regex-dna' $O.$EXE <x + run 'gc regex-dna-parallel' $O.$EXE <x + run 'gc_B regex-dna' $O.$EXE <x rm x } spectralnorm() { runonly echo 'spectral-norm 5500' - run "gcc $gccm -O2 spectral-norm.c -lm" a.out 5500 - run 'gccgo -O2 spectral-norm.go' a.out -n 5500 - run 'gc spectral-norm' $O.out -n 5500 - run 'gc_B spectral-norm' $O.out -n 5500 + run "gcc $gccm -O2 spectral-norm.c -lm" a.$EXE 5500 + run 'gccgo -O2 spectral-norm.go' a.$EXE -n 5500 + run 'gc spectral-norm' $O.$EXE -n 5500 + run 'gc_B spectral-norm' $O.$EXE -n 5500 } knucleotide() { runonly gcc -O2 fasta.c - runonly a.out 1000000 > x # should be using 25000000 + runonly a.$EXE 1000000 > x # should be using 25000000 runonly echo 'k-nucleotide 1000000' - if [ $mode = run ]; then - run "gcc -O2 k-nucleotide.c $(pkg-config glib-2.0 --cflags --libs)" a.out <x + if [ $mode = run ] && $haveglib; then + run "gcc -O2 k-nucleotide.c $(pkg-config glib-2.0 --cflags --libs)" a.$EXE <x fi - run 'gccgo -O2 k-nucleotide.go' a.out <x - run 'gccgo -O2 k-nucleotide-parallel.go' a.out <x - run 'gc k-nucleotide' $O.out <x - run 'gc k-nucleotide-parallel' $O.out <x - run 'gc_B k-nucleotide' $O.out <x + run 'gccgo -O2 k-nucleotide.go' a.$EXE <x + run 'gccgo -O2 k-nucleotide-parallel.go' a.$EXE <x + run 'gc k-nucleotide' $O.$EXE <x + run 'gc k-nucleotide-parallel' $O.$EXE <x + run 'gc_B k-nucleotide' $O.$EXE <x rm x } mandelbrot() { runonly echo 'mandelbrot 16000' - run "gcc $gccm -O2 mandelbrot.c" a.out 16000 - run 'gccgo -O2 mandelbrot.go' a.out -n 16000 - run 'gc mandelbrot' $O.out -n 16000 - run 'gc_B mandelbrot' $O.out -n 16000 + run "gcc $gccm -O2 mandelbrot.c" a.$EXE 16000 + run 'gccgo -O2 mandelbrot.go' a.$EXE -n 16000 + run 'gc mandelbrot' $O.$EXE -n 16000 + run 'gc_B mandelbrot' $O.$EXE -n 16000 } meteor() { runonly echo 'meteor 2098' - run "gcc $gccm -O2 meteor-contest.c" a.out 2098 - run 'gccgo -O2 meteor-contest.go' a.out -n 2098 - run 'gc meteor-contest' $O.out -n 2098 - run 'gc_B meteor-contest' $O.out -n 2098 + run "gcc $gccm -O2 meteor-contest.c" a.$EXE 2098 + run 'gccgo -O2 meteor-contest.go' a.$EXE -n 2098 + run 'gc meteor-contest' $O.$EXE -n 2098 + run 'gc_B meteor-contest' $O.$EXE -n 2098 } pidigits() { runonly echo 'pidigits 10000' - run "gcc $gccm -O2 pidigits.c -lgmp" a.out 10000 - run 'gccgo -O2 pidigits.go' a.out -n 10000 - run 'gc pidigits' $O.out -n 10000 - run 'gc_B pidigits' $O.out -n 10000 + if $havegmp; then + run "gcc $gccm -O2 pidigits.c -lgmp" a.$EXE 10000 + fi + run 'gccgo -O2 pidigits.go' a.$EXE -n 10000 + run 'gc pidigits' $O.$EXE -n 10000 + run 'gc_B pidigits' $O.$EXE -n 10000 } threadring() { runonly echo 'threadring 50000000' - run "gcc $gccm -O2 threadring.c -lpthread" a.out 50000000 - run 'gccgo -O2 threadring.go' a.out -n 50000000 - run 'gc threadring' $O.out -n 50000000 + run "gcc $gccm -O2 threadring.c -lpthread" a.$EXE 50000000 + run 'gccgo -O2 threadring.go' a.$EXE -n 50000000 + run 'gc threadring' $O.$EXE -n 50000000 } chameneos() { runonly echo 'chameneos 6000000' - run "gcc $gccm -O2 chameneosredux.c -lpthread" a.out 6000000 - run 'gccgo -O2 chameneosredux.go' a.out 6000000 - run 'gc chameneosredux' $O.out 6000000 + run "gcc $gccm -O2 chameneosredux.c -lpthread" a.$EXE 6000000 + run 'gccgo -O2 chameneosredux.go' a.$EXE 6000000 + run 'gc chameneosredux' $O.$EXE 6000000 } case $# in |