Author: Hakan Ardo <ha...@debian.org> Branch: extradoc Changeset: r3956:94871ac1f542 Date: 2011-11-01 22:06 +0100 http://bitbucket.org/pypy/extradoc/changeset/94871ac1f542/
Log: a few more becnhmarks and some results diff --git a/talk/iwtc11/benchmarks/iter/generator.py b/talk/iwtc11/benchmarks/iter/generator.py --- a/talk/iwtc11/benchmarks/iter/generator.py +++ b/talk/iwtc11/benchmarks/iter/generator.py @@ -55,6 +55,35 @@ for x, y in range2(w, h): sa += a[y*w + x] + x + y +def _mean1d(a): + sa = 0 + for i in range1(len(a)): + sa = (i*sa + a[i])/(i + 1.0); + +def _median1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 1.0/(i + 1.0) + elif sa < a[i]: + sa += 1.0/(i + 1.0) + +def _ripple1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 0.1 + elif sa < a[i]: + sa += 0.1 + +def _ripple2d(a, w, h): + sa = 0 + for x, y in range2(w, h): + if sa > a[y*w + x]: + sa -= 0.1 + elif sa < a[y*w + x]: + sa += 0.1 + def sum1d(args): run1d(args, _sum1d) return "sum1d" @@ -87,15 +116,37 @@ run2d(args, _xysum2d) return "xysum2d" -def run1d(args, f): - a = array('d', [1]) * 100000000 +def mean1d(args): + run1d(args, _mean1d, [1, -1]) + return "mean1d" + +def median1d(args): + run1d(args, _median1d, [1, -1]) + return "median1d" + +def ripple1d(args): + run1d(args, _ripple1d, [1, -1]) + return "ripple1d" + +def ripple2d(args): + run2d(args, _ripple2d, [1, -1]) + return "ripple2d" + +def run1d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a) return "sum1d" -def run2d(args, f): - a = array('d', [1]) * 100000000 +def run2d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a, 10000, 10000) diff --git a/talk/iwtc11/benchmarks/iter/generator2.py b/talk/iwtc11/benchmarks/iter/generator2.py --- a/talk/iwtc11/benchmarks/iter/generator2.py +++ b/talk/iwtc11/benchmarks/iter/generator2.py @@ -30,6 +30,35 @@ for i in range1(len(a)): sa += a[i] + len(a) +def _mean1d(a): + sa = 0 + for i in range1(len(a)): + sa = (i*sa + a[i])/(i + 1.0); + +def _median1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 1.0/(i + 1.0) + elif sa < a[i]: + sa += 1.0/(i + 1.0) + +def _ripple1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 0.1 + elif sa < a[i]: + sa += 0.1 + +def _ripple2d(a, w, h): + sa = 0 + for x, y in range2(w, h): + if sa > a[y*w + x]: + sa -= 0.1 + elif sa < a[y*w + x]: + sa += 0.1 + def _sum2d(a, w, h): sa = 0 for x, y in range2(w, h): @@ -87,15 +116,37 @@ run2d(args, _xysum2d) return "xysum2d" -def run1d(args, f): - a = array('d', [1]) * 100000000 +def mean1d(args): + run1d(args, _mean1d, [1, -1]) + return "mean1d" + +def median1d(args): + run1d(args, _median1d, [1, -1]) + return "median1d" + +def ripple1d(args): + run1d(args, _ripple1d, [1, -1]) + return "ripple1d" + +def ripple2d(args): + run2d(args, _ripple2d, [1, -1]) + return "ripple2d" + +def run1d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a) return "sum1d" -def run2d(args, f): - a = array('d', [1]) * 100000000 +def run2d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a, 10000, 10000) diff --git a/talk/iwtc11/benchmarks/iter/iterator.py b/talk/iwtc11/benchmarks/iter/iterator.py --- a/talk/iwtc11/benchmarks/iter/iterator.py +++ b/talk/iwtc11/benchmarks/iter/iterator.py @@ -82,6 +82,36 @@ for x, y in range2(w, h): sa += a[y*w + x] + x + y +def _mean1d(a): + sa = 0 + for i in range1(len(a)): + sa = (i*sa + a[i])/(i + 1.0); + +def _median1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 1.0/(i + 1.0) + elif sa < a[i]: + sa += 1.0/(i + 1.0) + +def _ripple1d(a): + sa = 0 + for i in range1(len(a)): + if sa > a[i]: + sa -= 0.1 + elif sa < a[i]: + sa += 0.1 + +def _ripple2d(a, w, h): + sa = 0 + for x, y in range2(w, h): + if sa > a[y*w + x]: + sa -= 0.1 + elif sa < a[y*w + x]: + sa += 0.1 + + def sum1d(args): run1d(args, _sum1d) return "sum1d" @@ -114,18 +144,39 @@ run2d(args, _xysum2d) return "xysum2d" -def run1d(args, f): - a = array('d', [1]) * 100000000 +def mean1d(args): + run1d(args, _mean1d, [1, -1]) + return "mean1d" + +def median1d(args): + run1d(args, _median1d, [1, -1]) + return "median1d" + +def ripple1d(args): + run1d(args, _ripple1d, [1, -1]) + return "ripple1d" + +def ripple2d(args): + run2d(args, _ripple2d, [1, -1]) + return "ripple2d" + +def run1d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a) return "sum1d" -def run2d(args, f): - a = array('d', [1]) * 100000000 +def run2d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a, 10000, 10000) return "sum1d" - diff --git a/talk/iwtc11/benchmarks/iter/mean1d.c b/talk/iwtc11/benchmarks/iter/mean1d.c new file mode 100644 --- /dev/null +++ b/talk/iwtc11/benchmarks/iter/mean1d.c @@ -0,0 +1,25 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +double result; + +double sum(double *a, int n) { + int i; + double sa = 0; + for (i=0; i<n; i++) + sa = (((double)i)*sa + a[i])/(((double)i) + 1.0); + return sa; +} + +#define N 100000000 + +int main(int ac, char **av) { + double *a = malloc(N*sizeof(double)); + int i, n = atoi(av[1]); + double data[] = {-1.0, 1.0}; + for (i=0; i<N; i++) a[i] = data[i&1]; + for (i=0; i<n; i++) result = sum(a, N); + fprintf(stderr, "sum1d: "); + return 0; +} diff --git a/talk/iwtc11/benchmarks/iter/median1d.c b/talk/iwtc11/benchmarks/iter/median1d.c new file mode 100644 --- /dev/null +++ b/talk/iwtc11/benchmarks/iter/median1d.c @@ -0,0 +1,30 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +double result; + +double sum(double *a, int n) { + int i; + double sa = 0; + for (i=0; i<n; i++) { + if (sa > a[i]) { + sa -= 1.0/(i + 1.0); + } else if (sa < a[i]) { + sa += 1.0/(i + 1.0); + } + } + return sa; +} + +#define N 100000000 + +int main(int ac, char **av) { + double *a = malloc(N*sizeof(double)); + int i, n = atoi(av[1]); + double data[] = {-1.0, 1.0}; + for (i=0; i<N; i++) a[i] = data[i&1]; + for (i=0; i<n; i++) result = sum(a, N); + fprintf(stderr, "sum1d: "); + return 0; +} diff --git a/talk/iwtc11/benchmarks/iter/range.py b/talk/iwtc11/benchmarks/iter/range.py --- a/talk/iwtc11/benchmarks/iter/range.py +++ b/talk/iwtc11/benchmarks/iter/range.py @@ -45,6 +45,36 @@ for x in xrange(w): sa += a[y*w + x] + x + y +def _mean1d(a): + sa = 0 + for i in xrange(len(a)): + sa = (i*sa + a[i])/(i + 1.0); + +def _median1d(a): + sa = 0 + for i in xrange(len(a)): + if sa > a[i]: + sa -= 1.0/(i + 1.0) + elif sa < a[i]: + sa += 1.0/(i + 1.0) + +def _ripple1d(a): + sa = 0 + for i in xrange(len(a)): + if sa > a[i]: + sa -= 0.1 + elif sa < a[i]: + sa += 0.1 + +def _ripple2d(a, w, h): + sa = 0 + for y in xrange(h): + for x in xrange(w): + if sa > a[y*w + x]: + sa -= 0.1 + elif sa < a[y*w + x]: + sa += 0.1 + def sum1d(args): run1d(args, _sum1d) return "sum1d" @@ -77,18 +107,39 @@ run2d(args, _xysum2d) return "xysum2d" -def run1d(args, f): - a = array('d', [1]) * 100000000 +def mean1d(args): + run1d(args, _mean1d, [1, -1]) + return "mean1d" + +def median1d(args): + run1d(args, _median1d, [1, -1]) + return "median1d" + +def ripple1d(args): + run1d(args, _ripple1d, [1, -1]) + return "ripple1d" + +def ripple2d(args): + run2d(args, _ripple2d, [1, -1]) + return "ripple2d" + +def run1d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a) return "sum1d" -def run2d(args, f): - a = array('d', [1]) * 100000000 +def run2d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a, 10000, 10000) return "sum1d" - diff --git a/talk/iwtc11/benchmarks/iter/result.txt b/talk/iwtc11/benchmarks/iter/result.txt new file mode 100644 --- /dev/null +++ b/talk/iwtc11/benchmarks/iter/result.txt @@ -0,0 +1,84 @@ +gcc -O3 +sum1d: 1.28 +- 0.0 +sum2d: 1.282 +- 0.004472135955 +whsum2d: 1.348 +- 0.0148323969742 +wsum1d: 1.312 +- 0.00836660026534 +wsum2d: 1.296 +- 0.00894427191 +xsum1d: 2.67 +- 0.0 +xsum2d: 2.684 +- 0.00894427191 +xysum2d: 3.89 +- 0.00707106781187 +sum1d: 12.246 +- 0.0955510334847 +sum1d: 8.712 +- 0.0383405790254 +sum1d: 2.534 +- 0.0167332005307 +sum2d: 1.294 +- 0.00547722557505 + +pypy iter/generator2.py +sum1d: 23.9832116127 +- 0.614888065755 +sum2d: 25.14532938 +- 0.539002370348 +whsum2d: 25.3205077648 +- 0.95213818417 +wsum1d: 23.9423354149 +- 0.350982347591 +wsum2d: 25.5328037739 +- 0.0682052173271 +xsum1d: 23.7376705647 +- 0.25634553829 +xsum2d: 24.7689536095 +- 0.0512726458591 +xysum2d: 25.1449195862 +- 0.16430452312 +mean1d: 31.7602347374 +- 0.427882906402 +median1d: 43.1415281773 +- 0.210466180126 +ripple1d: 34.0283002853 +- 0.499598282172 +ripple2d: 38.4699347973 +- 0.0901560447042 + +pypy iter/generator.py +sum1d: 23.7244842052 +- 0.0689331205409 +sum2d: 21.658352232 +- 0.416635728484 +whsum2d: 22.5176876068 +- 0.502224419925 +wsum1d: 23.8211816788 +- 0.266302896949 +wsum2d: 21.1811442852 +- 0.0340298556226 +xsum1d: 23.5302821636 +- 0.347050395147 +xsum2d: 21.3646360397 +- 0.0404815336251 +xysum2d: 23.3054399967 +- 0.605652073438 +mean1d: 29.9068798542 +- 0.137142642142 +median1d: 47.3418916225 +- 0.745256472188 +ripple1d: 38.7682027817 +- 0.151127654833 +ripple2d: 34.50409832 +- 0.450633025924 + +pypy iter/iterator.py +sum1d: 9.11433362961 +- 0.152338942619 +sum2d: 24.8545044422 +- 0.337170412246 +whsum2d: 25.8045747757 +- 0.20809202412 +wsum1d: 9.10523662567 +- 0.0244805405482 +wsum2d: 26.1566844463 +- 0.318886535207 +xsum1d: 9.19495682716 +- 0.0873697747873 +xsum2d: 25.3517719746 +- 0.164766505808 +xysum2d: 26.6187932014 +- 0.209184440299 +mean1d: 16.4915462017 +- 0.017852602834 +median1d: 20.7653402328 +- 0.0630841106192 +ripple1d: 17.4464035511 +- 0.0158743067755 +ripple2d: 39.4511544228 +- 0.627375567049 + +pypy iter/range.py +sum1d: 4.49761414528 +- 0.0188623565601 +sum2d: 4.55957078934 +- 0.00243949374013 +whsum2d: 5.00070867538 +- 0.00618486143797 +wsum1d: 4.49047336578 +- 0.00411149414617 +wsum2d: 4.96318297386 +- 0.00222332048187 +xsum1d: 4.49802703857 +- 0.00188882921078 +xsum2d: 4.9497563839 +- 0.00264963854777 +xysum2d: 5.36755475998 +- 0.0024734467877 +mean1d: 14.0295339584 +- 0.242603017308 +median1d: 13.3812539577 +- 0.219532477212 +ripple1d: 9.65058441162 +- 0.258182544452 +ripple2d: 17.3434608459 +- 0.254643240791 + +pypy iter/while.py +sum1d: 2.96192045212 +- 0.0202773262937 +sum2d: 4.09613256454 +- 0.00233141002671 +whsum2d: 4.1995736599 +- 0.00203621363823 +wsum1d: 3.02741799355 +- 0.00262930561514 +wsum2d: 4.09814844131 +- 0.00222148567149 +xsum1d: 3.31641759872 +- 0.00301746769052 +xsum2d: 4.09652075768 +- 0.00237008101856 +xysum2d: 4.10714039803 +- 0.00191674465195 +mean1d: 13.9958492279 +- 0.244810166895 +median1d: 14.8796311855 +- 0.242170910321 +ripple1d: 7.4315820694 +- 0.24302663505 +ripple2d: 12.0281677723 +- 0.262682059117 + diff --git a/talk/iwtc11/benchmarks/iter/ripple1d.c b/talk/iwtc11/benchmarks/iter/ripple1d.c new file mode 100644 --- /dev/null +++ b/talk/iwtc11/benchmarks/iter/ripple1d.c @@ -0,0 +1,30 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +double result; + +double sum(double *a, int n) { + int i; + double sa = 0; + for (i=0; i<n; i++) { + if (sa > a[i]) { + sa -= 0.1; + } else if (sa < a[i]) { + sa += 0.1; + } + } + return sa; +} + +#define N 100000000 + +int main(int ac, char **av) { + double *a = malloc(N*sizeof(double)); + int i, n = atoi(av[1]); + double data[] = {-1.0, 1.0}; + for (i=0; i<N; i++) a[i] = data[i&1]; + for (i=0; i<n; i++) result = sum(a, N); + fprintf(stderr, "sum1d: "); + return 0; +} diff --git a/talk/iwtc11/benchmarks/iter/ripple2d.c b/talk/iwtc11/benchmarks/iter/ripple2d.c new file mode 100644 --- /dev/null +++ b/talk/iwtc11/benchmarks/iter/ripple2d.c @@ -0,0 +1,29 @@ +#include <stdio.h> +#include <math.h> +#include <stdlib.h> + +double result; + +double sum(double *a, int w, int h) { + int x, y; + double sa = 0; + for (y=0; y<h; y++) for(x=0; x<w; x++) { + if (sa > a[y*w + x]) { + sa -= 0.1; + } else if (sa < a[y*w + x]) { + sa += 0.1; + } + } + return sa; +} + +#define W 10000 +#define H 10000 + +int main(int ac, char **av) { + double *a = malloc(W*H*sizeof(double)); + int i, n = atoi(av[1]); + for (i=0; i<n; i++) result=sum(a, W, H); + fprintf(stderr, "sum2d: "); + return 0; +} diff --git a/talk/iwtc11/benchmarks/iter/while.py b/talk/iwtc11/benchmarks/iter/while.py --- a/talk/iwtc11/benchmarks/iter/while.py +++ b/talk/iwtc11/benchmarks/iter/while.py @@ -65,6 +65,43 @@ x += 1 y += 1 +def _mean1d(a): + sa = i = 0 + while i < len(a): + sa = (i*sa + a[i])/(i + 1.0); + i += 1 + +def _median1d(a): + sa = i = 0 + while i < len(a): + if sa > a[i]: + sa -= 1.0/(i + 1.0) + elif sa < a[i]: + sa += 1.0/(i + 1.0) + i += 1 + +def _ripple1d(a): + sa = i = 0 + while i < len(a): + if sa > a[i]: + sa -= 0.1 + elif sa < a[i]: + sa += 0.1 + i += 1 + +def _ripple2d(a, w, h): + sa = 0 + sa = y = 0 + while y < h: + x = 0 + while x < w: + if sa > a[y*w + x]: + sa -= 0.1 + elif sa < a[y*w + x]: + sa += 0.1 + x += 1 + y += 1 + def sum1d(args): run1d(args, _sum1d) return "sum1d" @@ -97,18 +134,39 @@ run2d(args, _xysum2d) return "xysum2d" -def run1d(args, f): - a = array('d', [1]) * 100000000 +def mean1d(args): + run1d(args, _mean1d, [1, -1]) + return "mean1d" + +def median1d(args): + run1d(args, _median1d, [1, -1]) + return "median1d" + +def ripple1d(args): + run1d(args, _ripple1d, [1, -1]) + return "ripple1d" + +def ripple2d(args): + run2d(args, _ripple2d, [1, -1]) + return "ripple2d" + +def run1d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a) return "sum1d" -def run2d(args, f): - a = array('d', [1]) * 100000000 +def run2d(args, f, data=None): + if data: + a = array('d', data) * (100000000/len(data)) + else: + a = array('d', [1]) * 100000000 n = int(args[0]) for i in xrange(n): f(a, 10000, 10000) return "sum1d" - diff --git a/talk/iwtc11/benchmarks/runiter.sh b/talk/iwtc11/benchmarks/runiter.sh --- a/talk/iwtc11/benchmarks/runiter.sh +++ b/talk/iwtc11/benchmarks/runiter.sh @@ -1,17 +1,16 @@ #!/bin/sh -BENCHMARKS="sum1d sum2d whsum2d wsum1d wsum2d xsum1d xsum2d xysum2d" - +BENCHMARKS="sum1d sum2d whsum2d wsum1d wsum2d xsum1d xsum2d xysum2d mean1d median1d ripple1d ripple2d" echo gcc -O3 for b in $BENCHMARKS; do - echo ./runner.py -n 5 -c "gcc -O3" iter/$b.c 10 + ./runner.py -n 5 -c "gcc -O3" iter/$b.c 10 done echo for p in iter/*.py; do echo pypy $p for b in $BENCHMARKS; do - pypy ./runner.py -n 5 $p $b 10 + /tmp/pypy-trunk ./runner.py -n 5 $p $b 10 done echo done \ No newline at end of file _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit