Author: Hakan Ardo <ha...@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 _______________________________________________ pypy-commit mailing list pypy-commit@python.org http://mail.python.org/mailman/listinfo/pypy-commit