[pypy-commit] extradoc extradoc: merge heads

arigo noreply at buildbot.pypy.org
Fri Nov 4 12:58:48 CET 2011


Author: Armin Rigo <arigo at tunes.org>
Branch: extradoc
Changeset: r3960:8831869b67ff
Date: 2011-11-04 12:58 +0100
http://bitbucket.org/pypy/extradoc/changeset/8831869b67ff/

Log:	merge heads

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,18 +116,43 @@
     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"
 
+if __name__ == '__main__':
+    import sys
+    eval(sys.argv[1])(sys.argv[2:])
     
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,18 +116,42 @@
     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"
 
-    
+if __name__ == '__main__':
+    import sys
+    eval(sys.argv[1])(sys.argv[2:])
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,42 @@
     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"
 
-    
+if __name__ == '__main__':
+    import sys
+    eval(sys.argv[1])(sys.argv[2:])
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, "mean1d:     ");
+  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, "median1d:     ");
+  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,42 @@
     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"
 
-    
+if __name__ == '__main__':
+    import sys
+    eval(sys.argv[1])(sys.argv[2:])
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
+mean1d: 12.246 +- 0.0955510334847
+median1d: 8.712 +- 0.0383405790254
+ripple1d: 2.534 +- 0.0167332005307
+ripple2d: 2.644 +- 0.0219089023002
+
+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, "ripple1d:     ");
+  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,31 @@
+#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]);
+  double data[] = {-1.0, 1.0};
+  for (i=0; i<W*H; i++) a[i] = data[i&1];
+  for (i=0; i<n; i++) result=sum(a, W, H);
+  fprintf(stderr, "ripple2d:     ");
+  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,43 @@
     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"
 
+if __name__ == '__main__':
+    import sys
+    eval(sys.argv[1])(sys.argv[2:])
     
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