[pypy-commit] pypy stm-thread-2: Check in the latest version of richards.

arigo noreply at buildbot.pypy.org
Mon Feb 18 16:54:18 CET 2013


Author: Armin Rigo <arigo at tunes.org>
Branch: stm-thread-2
Changeset: r61411:cb03b88cc37a
Date: 2013-02-18 16:54 +0100
http://bitbucket.org/pypy/pypy/changeset/cb03b88cc37a/

Log:	Check in the latest version of richards.

diff --git a/rpython/translator/stm/test/richards.py b/rpython/translator/stm/test/richards.py
--- a/rpython/translator/stm/test/richards.py
+++ b/rpython/translator/stm/test/richards.py
@@ -7,7 +7,10 @@
 #  Translation from C++, Mario Wolczko
 #  Outer loop added by Alex Jacoby
 
-import transaction
+try:
+    import transaction
+except ImportError:
+    import transaction_emulator as transaction
 
 
 # Task IDs
@@ -345,6 +348,8 @@
 
 import time
 
+
+
 def prepare_schedule(taskWorkArea):
     t = taskWorkArea.taskList
     transaction.add(schedule_one, taskWorkArea, t)
@@ -428,8 +433,15 @@
 
 if __name__ == '__main__':
     import sys
-    transaction.set_num_threads(4)
-    if len(sys.argv) >= 2:
-        main(iterations = int(sys.argv[1]))
+    max_num_threads = 5
+    if len(sys.argv) > 1:
+        iterations = int(sys.argv[1])
+        if len(sys.argv) > 2:
+            max_num_threads = int(sys.argv[2])
+            assert max_num_threads <= iterations
     else:
-        main()
+        iterations = 10
+    num_threads = min(iterations, max_num_threads)
+    print "Running %d iterations on %d threads" % (iterations, num_threads)
+    transaction.set_num_threads(num_threads)
+    main(iterations = iterations)
diff --git a/rpython/translator/stm/test/transaction_emulator.py b/rpython/translator/stm/test/transaction_emulator.py
new file mode 100644
--- /dev/null
+++ b/rpython/translator/stm/test/transaction_emulator.py
@@ -0,0 +1,32 @@
+print "warning: using transaction_emulator"
+
+from collections import deque
+
+pending = deque()
+
+def add(f, *args):
+    #print 'add:', f, args
+    pending.append((f, args))
+
+def run():
+    while pending:
+        f, args = pending.popleft()
+        #print 'run:', f, args
+        f(*args)
+
+def set_num_threads(num):
+    pass
+
+def add_epoll(ep, callback):
+    def poll_reader():
+        # assume only one epoll is added.  If the _pending list is
+        # now empty, wait.  If not, then just poll non-blockingly.
+        if len(pending) == 0:
+            timeout = -1
+        else:
+            timeout = 0
+        got = ep.poll(timeout=timeout)
+        for fd, events in got:
+            add(callback, fd, events)
+        add(poll_reader)
+    add(poll_reader)


More information about the pypy-commit mailing list