[pypy-commit] benchmarks default: more tweaks

Raemi noreply at buildbot.pypy.org
Mon Apr 28 17:04:36 CEST 2014


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: 
Changeset: r255:2193a2976d5b
Date: 2014-04-28 16:35 +0200
http://bitbucket.org/pypy/benchmarks/changeset/2193a2976d5b/

Log:	more tweaks

diff --git a/multithread/bench.py b/multithread/bench.py
--- a/multithread/bench.py
+++ b/multithread/bench.py
@@ -34,7 +34,7 @@
 def get_error(times):
     ts = sorted(times)[:args.k]
     best = float(ts[0])
-    
+
     return max((t / best) - 1.0 for t in ts)
 
 def within_error(args, times):
@@ -51,6 +51,7 @@
     test = import_file(os.path.basename(args.file))
 
     times = []
+    results = []
     k = 1
     try:
         while True:
@@ -60,14 +61,15 @@
 
             test_time = time.time()
             if args.p:
-                test.run(*args.more)
+                results.append(test.run(*args.more))
             else:
                 with nostdout():
-                    test.run(*args.more)
+                    results.append(test.run(*args.more))
             times.append(time.time() - test_time)
 
             if not args.q:
                 print "took {} s".format(times[-1])
+                print "returned", results[-1]
 
             if k >= args.k:
                 if within_error(args, times):
@@ -83,7 +85,9 @@
             k += 1
     finally:
         if not args.q:
-            print "times:", times
+            print "== times ==\n", "\n".join(map(str, times))
+            print "== reported results ==\n", "\n".join(
+                map(str, filter(None, results)))
 
         if times:
             times = sorted(times)[:args.k]
diff --git a/multithread/btree/btree.py b/multithread/btree/btree.py
--- a/multithread/btree/btree.py
+++ b/multithread/btree/btree.py
@@ -344,16 +344,18 @@
 
     c_len = operations // threads
     fs = []
+    parallel_time = time.time()
     for i in xrange(threads):
         fs.append(Future(task, i, tree, c_len))
     for f in fs:
         f()
-
+    parallel_time = time.time() - parallel_time
     # print "tree:"
     # print tree
 
     # shutdown current pool
     set_thread_pool(None)
+    return parallel_time
 
 
 
diff --git a/multithread/common/abstract_threading.py b/multithread/common/abstract_threading.py
--- a/multithread/common/abstract_threading.py
+++ b/multithread/common/abstract_threading.py
@@ -10,6 +10,49 @@
         return 1
 
 
+class TLQueue_concurrent(object):
+    def __init__(self):
+        my_id = thread.get_ident()
+        self._tl_items = {my_id : []}
+        self._new_items = Condition()
+        self._c = 0
+
+    def put(self, v):
+        # conflicts with any put() and get()s from
+        # the chosen queue:
+        c = (id(v) // 5) % len(self._tl_items)
+        items = self._tl_items.values()[c]
+
+        with self._new_items:
+            items.append(v)
+            self._new_items.notify_all()
+
+    def _get_my_items(self):
+        my_id = thread.get_ident()
+        try:
+            items = self._tl_items[my_id]
+        except KeyError:
+            items = []
+            self._tl_items[my_id] = items
+        return items
+
+    def get(self):
+        # tries first to get item from its
+        # own thread-local queue
+        items = self._get_my_items()
+        with atomic:
+            if items:
+                return items.pop()
+
+        while True:
+            with self._new_items:
+                # steal from other queues
+                for its in self._tl_items.values():
+                    with atomic:
+                        if its:
+                            return its.pop()
+                self._new_items.wait()
+
 class TLQueue(object):
     def __init__(self):
         self.items = []
diff --git a/multithread/mandelbrot/mandelbrot.py b/multithread/mandelbrot/mandelbrot.py
--- a/multithread/mandelbrot/mandelbrot.py
+++ b/multithread/mandelbrot/mandelbrot.py
@@ -1,5 +1,5 @@
 from common.abstract_threading import atomic, Future, set_thread_pool, ThreadPool
-import sys
+import sys, time
 
 
 def calculate(a, b, im_size, max_iter=255):
@@ -11,8 +11,7 @@
     real_step = (br - ar) / (width - 1)
     print "real/width:%s, imag/height:%s" % (real_step, imag_step)
 
-    with atomic:
-        result = [[0] * width for y in xrange(height)]
+    result = [[0] * width for y in xrange(height)]
     for y in xrange(height):
         zi = ai + y * imag_step
         for x in xrange(width):
@@ -64,6 +63,7 @@
     res = []
     ai = -1.5
     bi = ai + step
+    parallel_time = time.time()
     for i in xrange(threads):
         res.append(Future(calculate,
                           a=(ar, ai + i * step),
@@ -72,9 +72,11 @@
             ))
 
     res = [f() for f in res]
+    parallel_time = time.time() - parallel_time
 
     set_thread_pool(None)
-    return merge_imgs(res)
+    merge_imgs(res)
+    return parallel_time
 
 
 
diff --git a/multithread/raytrace/raytrace.py b/multithread/raytrace/raytrace.py
--- a/multithread/raytrace/raytrace.py
+++ b/multithread/raytrace/raytrace.py
@@ -160,15 +160,18 @@
     img = []
     for x in range(w):
         img.append([0.0] * h)
+    parallel_time = time.time()
     for x in range(w):
         future_dispatcher(ths, img, x, h, cameraPos, objs, lightSource)
 
     for f in futures:
         print f()
     del futures[:]
+    parallel_time = time.time() - parallel_time
 
     # shutdown current pool
     set_thread_pool(None)
+    return parallel_time
 
 
 
diff --git a/multithread/skiplist/skiplist.py b/multithread/skiplist/skiplist.py
--- a/multithread/skiplist/skiplist.py
+++ b/multithread/skiplist/skiplist.py
@@ -123,16 +123,19 @@
 
     c_len = operations // threads
     fs = []
+    parallel_time = time.time()
     for i in xrange(threads):
         fs.append(Future(task, i, slist, c_len))
     for f in fs:
         f()
+    parallel_time = time.time() - parallel_time
 
     # print "list:"
     # slist.printList()
 
     # shutdown current pool
     set_thread_pool(None)
+    return parallel_time
 
 
 
diff --git a/multithread/threadworms/threadworms.py b/multithread/threadworms/threadworms.py
--- a/multithread/threadworms/threadworms.py
+++ b/multithread/threadworms/threadworms.py
@@ -157,6 +157,7 @@
 
     # Create the worm objects.
     worms = [] # a list that contains all the worm objects
+    parallel_time = time.time()
     for i in range(NUM_WORMS):
         worms.append(Worm())
     for w in worms:
@@ -164,6 +165,8 @@
 
     for t in worms:
         t.join()
+    parallel_time = time.time() - parallel_time
+    return parallel_time
 
 
 


More information about the pypy-commit mailing list