[pypy-commit] extradoc extradoc: iteration becnhmakrs
hakanardo
noreply at buildbot.pypy.org
Tue Nov 1 16:04:31 CET 2011
Author: Hakan Ardo <hakan at debian.org>
Branch: extradoc
Changeset: r3955:17ee08a6ac71
Date: 2011-11-01 16:04 +0100
http://bitbucket.org/pypy/extradoc/changeset/17ee08a6ac71/
Log: iteration becnhmakrs
diff --git a/talk/iwtc11/benchmarks/image/numpy_compare.py b/talk/iwtc11/benchmarks/image/numpy_compare.py
--- a/talk/iwtc11/benchmarks/image/numpy_compare.py
+++ b/talk/iwtc11/benchmarks/image/numpy_compare.py
@@ -63,8 +63,14 @@
else:
self.extend(data)
- def new(self):
- return Image(self.width, self.height, self.typecode)
+ def new(self, width=None, height=None, typecode=None):
+ if width is None:
+ width = self.width
+ if height is None:
+ height = self.height
+ if typecode is None:
+ typecode = self.typecode
+ return Image(width, height, typecode)
def clone(self):
return Image(self.width, self.height, self.typecode, self)
diff --git a/talk/iwtc11/benchmarks/iter/generator.py b/talk/iwtc11/benchmarks/iter/generator.py
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/generator.py
@@ -0,0 +1,104 @@
+from array import array
+
+def range1(n):
+ i = 0
+ while i < n:
+ yield i
+ i += 1
+
+def range2(w, h):
+ y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ yield x, y
+ x += 1
+ y += 1
+
+def _sum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i]
+
+def _xsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + i
+
+def _wsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + len(a)
+
+def _sum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x]
+
+def _wsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w
+
+def _xsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x
+
+def _whsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w + h
+
+def _xysum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x + y
+
+def sum1d(args):
+ run1d(args, _sum1d)
+ return "sum1d"
+
+def xsum1d(args):
+ run1d(args, _xsum1d)
+ return "xsum1d"
+
+def wsum1d(args):
+ run1d(args, _wsum1d)
+ return "wsum1d"
+
+def sum2d(args):
+ run2d(args, _sum2d)
+ return "sum2d"
+
+def wsum2d(args):
+ run2d(args, _wsum2d)
+ return "wsum2d"
+
+def xsum2d(args):
+ run2d(args, _xsum2d)
+ return "xsum2d"
+
+def whsum2d(args):
+ run2d(args, _whsum2d)
+ return "whsum2d"
+
+def xysum2d(args):
+ run2d(args, _xysum2d)
+ return "xysum2d"
+
+def run1d(args, f):
+ 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
+ n = int(args[0])
+ for i in xrange(n):
+ f(a, 10000, 10000)
+ return "sum1d"
+
+
diff --git a/talk/iwtc11/benchmarks/iter/generator2.py b/talk/iwtc11/benchmarks/iter/generator2.py
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/generator2.py
@@ -0,0 +1,104 @@
+from array import array
+
+def range1(n):
+ i = 0
+ while i < n:
+ yield i
+ i += 1
+
+def range2(w, h):
+ y = x = 0
+ while y < h:
+ yield x, y
+ x += 1
+ if x >= w:
+ x = 0
+ y += 1
+
+def _sum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i]
+
+def _xsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + i
+
+def _wsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + len(a)
+
+def _sum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x]
+
+def _wsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w
+
+def _xsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x
+
+def _whsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w + h
+
+def _xysum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x + y
+
+def sum1d(args):
+ run1d(args, _sum1d)
+ return "sum1d"
+
+def xsum1d(args):
+ run1d(args, _xsum1d)
+ return "xsum1d"
+
+def wsum1d(args):
+ run1d(args, _wsum1d)
+ return "wsum1d"
+
+def sum2d(args):
+ run2d(args, _sum2d)
+ return "sum2d"
+
+def wsum2d(args):
+ run2d(args, _wsum2d)
+ return "wsum2d"
+
+def xsum2d(args):
+ run2d(args, _xsum2d)
+ return "xsum2d"
+
+def whsum2d(args):
+ run2d(args, _whsum2d)
+ return "whsum2d"
+
+def xysum2d(args):
+ run2d(args, _xysum2d)
+ return "xysum2d"
+
+def run1d(args, f):
+ 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
+ n = int(args[0])
+ for i in xrange(n):
+ f(a, 10000, 10000)
+ return "sum1d"
+
+
diff --git a/talk/iwtc11/benchmarks/iter/iterator.py b/talk/iwtc11/benchmarks/iter/iterator.py
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/iterator.py
@@ -0,0 +1,131 @@
+from array import array
+
+class range1(object):
+ def __init__(self, n):
+ self.i = -1
+ self.n = n
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ self.i += 1
+ if self.i >= self.n:
+ raise StopIteration
+ return self.i
+
+class range2(object):
+ def __init__(self, w, h):
+ self.x = -1
+ self.y = 0
+ self.w = w
+ self.h = h
+
+ def __iter__(self):
+ return self
+
+ def next(self):
+ self.x += 1
+ if self.x >= self.w:
+ self.x = 0
+ self.y += 1
+ if self.y >= self.h:
+ raise StopIteration
+ return self.x, self.y
+
+def range2(w, h):
+ y = x = 0
+ while y < h:
+ yield x, y
+ x += 1
+ if x >= w:
+ x = 0
+ y += 1
+
+def _sum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i]
+
+def _xsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + i
+
+def _wsum1d(a):
+ sa = 0
+ for i in range1(len(a)):
+ sa += a[i] + len(a)
+
+def _sum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x]
+
+def _wsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w
+
+def _xsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x
+
+def _whsum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + w + h
+
+def _xysum2d(a, w, h):
+ sa = 0
+ for x, y in range2(w, h):
+ sa += a[y*w + x] + x + y
+
+def sum1d(args):
+ run1d(args, _sum1d)
+ return "sum1d"
+
+def xsum1d(args):
+ run1d(args, _xsum1d)
+ return "xsum1d"
+
+def wsum1d(args):
+ run1d(args, _wsum1d)
+ return "wsum1d"
+
+def sum2d(args):
+ run2d(args, _sum2d)
+ return "sum2d"
+
+def wsum2d(args):
+ run2d(args, _wsum2d)
+ return "wsum2d"
+
+def xsum2d(args):
+ run2d(args, _xsum2d)
+ return "xsum2d"
+
+def whsum2d(args):
+ run2d(args, _whsum2d)
+ return "whsum2d"
+
+def xysum2d(args):
+ run2d(args, _xysum2d)
+ return "xysum2d"
+
+def run1d(args, f):
+ 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
+ n = int(args[0])
+ for i in xrange(n):
+ f(a, 10000, 10000)
+ return "sum1d"
+
+
diff --git a/talk/iwtc11/benchmarks/iter/range.py b/talk/iwtc11/benchmarks/iter/range.py
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/range.py
@@ -0,0 +1,94 @@
+from array import array
+
+def _sum1d(a):
+ sa = 0
+ for i in xrange(len(a)):
+ sa += a[i]
+
+def _xsum1d(a):
+ sa = 0
+ for i in xrange(len(a)):
+ sa += a[i] + i
+
+def _wsum1d(a):
+ sa = 0
+ for i in xrange(len(a)):
+ sa += a[i] + len(a)
+
+def _sum2d(a, w, h):
+ sa = 0
+ for y in xrange(h):
+ for x in xrange(w):
+ sa += a[y*w + x]
+
+def _wsum2d(a, w, h):
+ sa = 0
+ for y in xrange(h):
+ for x in xrange(w):
+ sa += a[y*w + x] + w
+
+def _xsum2d(a, w, h):
+ sa = 0
+ for y in xrange(h):
+ for x in xrange(w):
+ sa += a[y*w + x] + x
+
+def _whsum2d(a, w, h):
+ sa = 0
+ for y in xrange(h):
+ for x in xrange(w):
+ sa += a[y*w + x] + w + h
+
+def _xysum2d(a, w, h):
+ sa = 0
+ for y in xrange(h):
+ for x in xrange(w):
+ sa += a[y*w + x] + x + y
+
+def sum1d(args):
+ run1d(args, _sum1d)
+ return "sum1d"
+
+def xsum1d(args):
+ run1d(args, _xsum1d)
+ return "xsum1d"
+
+def wsum1d(args):
+ run1d(args, _wsum1d)
+ return "wsum1d"
+
+def sum2d(args):
+ run2d(args, _sum2d)
+ return "sum2d"
+
+def wsum2d(args):
+ run2d(args, _wsum2d)
+ return "wsum2d"
+
+def xsum2d(args):
+ run2d(args, _xsum2d)
+ return "xsum2d"
+
+def whsum2d(args):
+ run2d(args, _whsum2d)
+ return "whsum2d"
+
+def xysum2d(args):
+ run2d(args, _xysum2d)
+ return "xysum2d"
+
+def run1d(args, f):
+ 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
+ n = int(args[0])
+ for i in xrange(n):
+ f(a, 10000, 10000)
+ return "sum1d"
+
+
diff --git a/talk/iwtc11/benchmarks/iter/sum1d.c b/talk/iwtc11/benchmarks/iter/sum1d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/sum1d.c
@@ -0,0 +1,22 @@
+#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 += a[i];
+ return sa;
+}
+
+#define N 100000000
+
+int main(int ac, char **av) {
+ double *a = malloc(N*sizeof(double));
+ int i, n = atoi(av[1]);
+ for (i=0; i<n; i++) result = sum(a, N);
+ fprintf(stderr, "sum1d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/sum2d.c b/talk/iwtc11/benchmarks/iter/sum2d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/sum2d.c
@@ -0,0 +1,23 @@
+#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++) sa += a[y*w + x];
+ 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
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/while.py
@@ -0,0 +1,114 @@
+from array import array
+
+def _sum1d(a):
+ sa = i = 0
+ while i < len(a):
+ sa += a[i]
+ i += 1
+
+def _xsum1d(a):
+ sa = i = 0
+ while i < len(a):
+ sa += a[i] + i
+ i += 1
+
+def _wsum1d(a):
+ sa = i = 0
+ while i < len(a):
+ sa += a[i] + len(a)
+ i += 1
+
+def _sum2d(a, w, h):
+ sa = y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ sa += a[y*w + x]
+ x += 1
+ y += 1
+
+def _wsum2d(a, w, h):
+ sa = y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ sa += a[y*w + x] + w
+ x += 1
+ y += 1
+
+def _xsum2d(a, w, h):
+ sa = y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ sa += a[y*w + x] + x
+ x += 1
+ y += 1
+ sa = 0
+
+def _whsum2d(a, w, h):
+ sa = y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ sa += a[y*w + x] + w + h
+ x += 1
+ y += 1
+ sa = 0
+
+def _xysum2d(a, w, h):
+ sa = y = 0
+ while y < h:
+ x = 0
+ while x < w:
+ sa += a[y*w + x] + x + y
+ x += 1
+ y += 1
+
+def sum1d(args):
+ run1d(args, _sum1d)
+ return "sum1d"
+
+def xsum1d(args):
+ run1d(args, _xsum1d)
+ return "xsum1d"
+
+def wsum1d(args):
+ run1d(args, _wsum1d)
+ return "wsum1d"
+
+def sum2d(args):
+ run2d(args, _sum2d)
+ return "sum2d"
+
+def wsum2d(args):
+ run2d(args, _wsum2d)
+ return "wsum2d"
+
+def xsum2d(args):
+ run2d(args, _xsum2d)
+ return "xsum2d"
+
+def whsum2d(args):
+ run2d(args, _whsum2d)
+ return "whsum2d"
+
+def xysum2d(args):
+ run2d(args, _xysum2d)
+ return "xysum2d"
+
+def run1d(args, f):
+ 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
+ n = int(args[0])
+ for i in xrange(n):
+ f(a, 10000, 10000)
+ return "sum1d"
+
+
diff --git a/talk/iwtc11/benchmarks/iter/whsum2d.c b/talk/iwtc11/benchmarks/iter/whsum2d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/whsum2d.c
@@ -0,0 +1,23 @@
+#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++) sa += a[y*w + x] + w + h;
+ 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, "whsum2d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/wsum1d.c b/talk/iwtc11/benchmarks/iter/wsum1d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/wsum1d.c
@@ -0,0 +1,22 @@
+#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 += a[i] + n;
+ return sa;
+}
+
+#define N 100000000
+
+int main(int ac, char **av) {
+ double *a = malloc(N*sizeof(double));
+ int i, n = atoi(av[1]);
+ for (i=0; i<n; i++) result = sum(a, N);
+ fprintf(stderr, "wsum1d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/wsum2d.c b/talk/iwtc11/benchmarks/iter/wsum2d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/wsum2d.c
@@ -0,0 +1,23 @@
+#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++) sa += a[y*w + x] + w;
+ 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, "wsum2d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/xsum1d.c b/talk/iwtc11/benchmarks/iter/xsum1d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/xsum1d.c
@@ -0,0 +1,22 @@
+#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 += a[i] + i;
+ return sa;
+}
+
+#define N 100000000
+
+int main(int ac, char **av) {
+ double *a = malloc(N*sizeof(double));
+ int i, n = atoi(av[1]);
+ for (i=0; i<n; i++) result = sum(a, N);
+ fprintf(stderr, "xsum1d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/xsum2d.c b/talk/iwtc11/benchmarks/iter/xsum2d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/xsum2d.c
@@ -0,0 +1,23 @@
+#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++) sa += a[y*w + x] + x;
+ 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, "xsum2d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/iter/xysum2d.c b/talk/iwtc11/benchmarks/iter/xysum2d.c
new file mode 100644
--- /dev/null
+++ b/talk/iwtc11/benchmarks/iter/xysum2d.c
@@ -0,0 +1,23 @@
+#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++) sa += a[y*w + x] + x + y;
+ 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, "xysum2d: ");
+ return 0;
+}
diff --git a/talk/iwtc11/benchmarks/runiter.sh b/talk/iwtc11/benchmarks/runiter.sh
new file mode 100755
--- /dev/null
+++ b/talk/iwtc11/benchmarks/runiter.sh
@@ -0,0 +1,17 @@
+#!/bin/sh
+
+BENCHMARKS="sum1d sum2d whsum2d wsum1d wsum2d xsum1d xsum2d xysum2d"
+
+echo gcc -O3
+for b in $BENCHMARKS; do
+ echo ./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
+ done
+ echo
+done
\ No newline at end of file
More information about the pypy-commit
mailing list