[pypy-commit] extradoc extradoc: representation of 2D arrays as a list of arrays

hakanardo noreply at buildbot.pypy.org
Sun Aug 12 20:27:59 CEST 2012


Author: Hakan Ardo <hakan at debian.org>
Branch: extradoc
Changeset: r4527:63e9884bf1b2
Date: 2012-08-12 20:27 +0200
http://bitbucket.org/pypy/extradoc/changeset/63e9884bf1b2/

Log:	representation of 2D arrays as a list of arrays

diff --git a/talk/iwtc11/benchmarks/benchmark.sh b/talk/iwtc11/benchmarks/benchmark.sh
--- a/talk/iwtc11/benchmarks/benchmark.sh
+++ b/talk/iwtc11/benchmarks/benchmark.sh
@@ -50,8 +50,10 @@
     #$* ./runner.py $EXTRA_OPTS image/noborder.py main NoBorderImage range
     #$* ./runner.py $EXTRA_OPTS image/sobel.py main NoBorderImagePadded
     #$* ./runner.py $EXTRA_OPTS image/sobel.py main NoBorderImagePadded uint8
-    $* ./runner.py $EXTRA_OPTS scimark.py SOR 100 32768
-    $* ./runner.py $EXTRA_OPTS scimark.py SOR 1000 256
+    $* ./runner.py $EXTRA_OPTS scimark.py SOR 100 32768 Array2D
+    $* ./runner.py $EXTRA_OPTS scimark.py SOR 1000 256 Array2D
+    $* ./runner.py $EXTRA_OPTS scimark.py SOR 100 32768 ArrayList
+    $* ./runner.py $EXTRA_OPTS scimark.py SOR 1000 256 ArrayList
     $* ./runner.py $EXTRA_OPTS scimark.py SparseMatMult 1000 5000 262144
     $* ./runner.py $EXTRA_OPTS scimark.py SparseMatMult 100000 1000000 1024
     $* ./runner.py $EXTRA_OPTS scimark.py MonteCarlo 268435456
diff --git a/talk/iwtc11/benchmarks/scimark.py b/talk/iwtc11/benchmarks/scimark.py
--- a/talk/iwtc11/benchmarks/scimark.py
+++ b/talk/iwtc11/benchmarks/scimark.py
@@ -60,6 +60,25 @@
             return self.dm1 * float(k);
 
 
+class ArrayList(Array2D):
+    def __init__(self, w, h, data=None):
+        self.width = w
+        self.height = h
+        self.data = [array('d', [0]) * w for y in xrange(h)]
+        if data is not None:
+            self.setup(data)
+
+    def __getitem__(self, idx):
+        if isinstance(idx, tuple):
+            return self.data[idx[1]][idx[0]]
+        else:
+            return self.data[idx]
+
+    def __setitem__(self, idx, val):
+        if isinstance(idx, tuple):
+            self.data[idx[1]][idx[0]] = val
+        else:
+            self.data[idx] = val
 
 def SOR_execute(omega, G, num_iterations):
     for p in xrange(num_iterations):
@@ -68,8 +87,8 @@
                 G[x, y] = omega * 0.25 * (G[x, y-1] + G[x, y+1] + G[x-1, y] + G[x+1, y]) + \
                           (1.0 - omega) * G[x, y]
 def SOR(args):
-    n, cycles = map(int, args)
-    a = Array2D(n, n)
+    n, cycles, Array = map(eval, args)
+    a = Array(n, n)
     SOR_execute(1.25, a, cycles)
     return "SOR(%d, %d)" % (n, cycles)
 


More information about the pypy-commit mailing list