[pypy-commit] extradoc extradoc: a few more becnhmarks and some results
hakanardo
noreply at buildbot.pypy.org
Tue Nov 1 22:07:40 CET 2011
Author: Hakan Ardo <hakan at 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
More information about the pypy-commit
mailing list