[pypy-commit] benchmarks default: some use of hint_commit_soon

Raemi noreply at buildbot.pypy.org
Wed May 28 09:17:32 CEST 2014


Author: Remi Meier <remi.meier at inf.ethz.ch>
Branch: 
Changeset: r261:0d81c9b1ec8e
Date: 2014-05-28 09:18 +0200
http://bitbucket.org/pypy/benchmarks/changeset/0d81c9b1ec8e/

Log:	some use of hint_commit_soon

diff --git a/multithread/bottle/app.py b/multithread/bottle/app.py
--- a/multithread/bottle/app.py
+++ b/multithread/bottle/app.py
@@ -1,4 +1,5 @@
-from common.abstract_threading import atomic, Future, set_thread_pool, ThreadPool
+from common.abstract_threading import (
+    atomic, Future, set_thread_pool, ThreadPool, hint_commit_soon)
 from BaseHTTPServer import HTTPServer
 
 import threading, time
@@ -55,7 +56,12 @@
 
 @bottle.route('/')
 def index():
-    time.sleep(0.5)
+    with atomic:
+        i = 10000
+        res = ""
+        while i:
+            i -= 1
+            res += str(i)
     return "hi from " + threading.currentThread().getName()
 
 
diff --git a/multithread/btree/btree.py b/multithread/btree/btree.py
--- a/multithread/btree/btree.py
+++ b/multithread/btree/btree.py
@@ -1,6 +1,8 @@
 # https://github.com/MartinThoma/algorithms/tree/master/datastructures
 
-from common.abstract_threading import atomic, Future, set_thread_pool, ThreadPool
+from common.abstract_threading import (
+    atomic, Future, set_thread_pool, ThreadPool,
+    hint_commit_soon, print_abort_info)
 import time, threading
 
 import random
@@ -203,6 +205,7 @@
             ancestors.append((node, index))
         node, index = ancestors.pop()
         node.insert(index, item, ancestors)
+        hint_commit_soon()
         return True
 
     def remove(self, item):
@@ -211,6 +214,7 @@
         if self._present(item, ancestors):
             node, index = ancestors.pop()
             node.remove(index, ancestors)
+            hint_commit_soon()
         # else:
         #     raise ValueError("%r not in %s" % (item, self.__class__.__name__))
 
@@ -307,7 +311,8 @@
 ######################################################################
 ######################################################################
 
-OPS = [BTree.__contains__] * 98 + [BTree.insert, BTree.remove]
+CONFLICTING = [BTree.insert, BTree.remove]
+OPS = [BTree.__contains__] * 98 + CONFLICTING
 
 ITEM_RANGE = 10000
 
@@ -319,8 +324,12 @@
     for _ in xrange(ops):
         op = r.choice(OPS)
         elem = r.randint(1, ITEM_RANGE)
+        # cflts = op in CONFLICTING
+        # if cflts:
+        #     hint_commit_soon()
         with atomic:
             op(tree, elem)
+        #print_abort_info(0.00001)
 
     print "task ended"
 
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
@@ -3,13 +3,16 @@
 import thread, atexit, sys, time
 
 try:
-    from atomic import atomic, getsegmentlimit, print_abort_info
+    from atomic import (atomic, getsegmentlimit, print_abort_info,
+                        hint_commit_soon)
 except:
     atomic = RLock()
     def getsegmentlimit():
         return 1
     def print_abort_info(tm=0.0):
         pass
+    def hint_commit_soon():
+        pass
 
 
 class TLQueue_concurrent(object):
@@ -140,7 +143,9 @@
     def _task(self, func, *args, **kwargs):
         with self._cond:
             try:
+                hint_commit_soon()
                 self._result = func(*args, **kwargs)
+                hint_commit_soon()
             except Exception as e:
                 self._exception = e
             finally:
diff --git a/multithread/raytrace/raytrace.py b/multithread/raytrace/raytrace.py
--- a/multithread/raytrace/raytrace.py
+++ b/multithread/raytrace/raytrace.py
@@ -2,7 +2,9 @@
 # Date: 14.03.2013
 
 from math import sqrt, pi
-from common.abstract_threading import atomic, Future, set_thread_pool, ThreadPool
+from common.abstract_threading import (
+    atomic, Future, set_thread_pool, ThreadPool,
+    print_abort_info, hint_commit_soon)
 import time
 
 AMBIENT = 0.1
@@ -133,6 +135,7 @@
                       (Vector(x/50.0-5,y/50.0-5,0)-cameraPos).normal())
             col = trace(ray, objs, lightSource, 10)
             line[y] = (col.x + col.y + col.z) / 3.0
+        #print_abort_info(0.00001)
     return x
 
 
@@ -142,7 +145,6 @@
 
 
 
-
 def run(ths=8, w=1024, h=1024):
     ths = int(ths)
     w = int(w)
diff --git a/multithread/skiplist/skiplist.py b/multithread/skiplist/skiplist.py
--- a/multithread/skiplist/skiplist.py
+++ b/multithread/skiplist/skiplist.py
@@ -1,6 +1,8 @@
 # https://github.com/kunigami/blog-examples/tree/master/2012-09-23-skip-list
 
-from common.abstract_threading import atomic, Future, set_thread_pool, ThreadPool
+from common.abstract_threading import (atomic, Future,
+                                       set_thread_pool, ThreadPool,
+                                       print_abort_info, hint_commit_soon)
 import time, threading
 
 import random
@@ -52,7 +54,7 @@
     def insert(self, elem):
         node = SkipNode(self.randomHeight(), elem)
 
-        # conflicts with every find():
+        # conflicts with everything else:
         self.maxHeight = max(self.maxHeight, len(node.next))
 
         while len(self.head.next) < len(node.next):
@@ -64,16 +66,19 @@
                 node.next[i] = update[i].next[i]
                 update[i].next[i] = node
             self.len += 1
+        hint_commit_soon()
 
     def remove(self, elem):
         update = self.updateList(elem)
         x = self.find(elem, update)
         if x != None:
+            # conflicts with everything else:
             for i in reversed(range(len(x.next))):
                 update[i].next[i] = x.next[i]
                 if self.head.next[i] == None:
                     self.maxHeight -= 1
             self.len -= 1
+            hint_commit_soon()
 
     def printList(self):
         for i in range(len(self.head.next)-1, -1, -1):
@@ -84,9 +89,9 @@
             print ''
 
 
-
-OPS = [SkipList.find] * 98 + [SkipList.insert, SkipList.remove]
-ITEM_RANGE = 10000
+CONFLICTING = [SkipList.insert, SkipList.remove]
+OPS = [SkipList.find] * 98 + CONFLICTING
+ITEM_RANGE = 1000000
 
 def task(id, slist, ops):
     print "start task with %s ops" % ops
@@ -97,9 +102,13 @@
     for _ in xrange(ops):
         op = r.choice(OPS)
         elem = r.randint(1, ITEM_RANGE)
+        # if op in CONFLICTING:
+        #     hint_commit_soon()
         with atomic:
             op(slist, elem)
 
+        #print_abort_info(0.0001)
+
     print "task ended"
 
 


More information about the pypy-commit mailing list