[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