]> Cypherpunks repositories - gostls13.git/commitdiff
test/bench/shootout: support windows
authorChaiShushan <chaishushan@gmail.com>
Fri, 9 May 2014 21:34:50 +0000 (14:34 -0700)
committerIan Lance Taylor <iant@golang.org>
Fri, 9 May 2014 21:34:50 +0000 (14:34 -0700)
1. fix executable extension (a.out -> a.exe).
2. fix pthread build error on mingw
3. if depends lib messing, skip the test

LGTM=iant
R=golang-codereviews, iant
CC=golang-codereviews
https://golang.org/cl/100210043

test/bench/shootout/threadring.c
test/bench/shootout/timing.sh

index a518134ba65e6e8459a4c59607514d99a2e22a7e..606db71dc9912cc4bacabf06f2bd8042703b37d1 100644 (file)
@@ -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);
    }
 
index 2db895c26302c626db23063098c398e851fe8bfe..a06c326c3e34d96b043d6a3d4c5f2d9a228caa18 100755 (executable)
@@ -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