[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