[pypy-commit] lang-smalltalk demo: Demo VM (without debug prints) and Game-of-Life image via "-m gol"
amintos
noreply at buildbot.pypy.org
Thu Apr 3 11:33:07 CEST 2014
Author: amintos
Branch: demo
Changeset: r765:8898f3e243d6
Date: 2014-01-21 14:13 +0100
http://bitbucket.org/pypy/lang-smalltalk/changeset/8898f3e243d6/
Log: Demo VM (without debug prints) and Game-of-Life image via "-m gol"
diff --git a/images/Squeak4.5-12568.changes b/images/Squeak4.5-12568.changes
--- a/images/Squeak4.5-12568.changes
+++ b/images/Squeak4.5-12568.changes
@@ -305,4 +305,139 @@
initialField: (GameOfLifeField gliderFieldRows: 32 columns: 32);
simulateRounds: 5.
- ! !
----End fileIn of a stream----!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:55'!
gol
STMSimulation benchmark! !
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:56' prior: 33632815!
gol
STMSimulation benchmark printString! !
----SNAPSHOT----{21 January 2014 . 10:56:17 am} Squeak4.5-12568.image priorSource: 63448!
^STMSimulation benchmark printString!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:59' prior: 33632930!
gol
^STMSimulation benchmark printString! !
----QUIT/NOSAVE----{21 January 2014 . 11:00:27 am} Squeak4.5-12568.image priorSource: 78543!
----STARTUP----{21 January 2014 . 11:00:33 am} as /home/bot/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 11:00' prior: 33632930!
gol
^ STMSimulation benchmark printString! !
----SNAPSHOT----{21 January 2014 . 11:00:44 am} Squeak4.5-12568.image priorSource: 78543!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 11:04'!
gol2
^ STMSimulation benchmark2 printString! !
Simulation benchmark!
----SNAPSHOT----{21 January 2014 . 11:06:45 am} Squeak4.5-12568.image priorSource: 79132!
\ No newline at end of file
+ ! !
----End fileIn of a stream----!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:55'!
gol
STMSimulation benchmark! !
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:56' prior: 33632815!
gol
STMSimulation benchmark printString! !
----SNAPSHOT----{21 January 2014 . 10:56:17 am} Squeak4.5-12568.image priorSource: 63448!
^STMSimulation benchmark printString!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 10:59' prior: 33632930!
gol
^STMSimulation benchmark printString! !
----QUIT/NOSAVE----{21 January 2014 . 11:00:27 am} Squeak4.5-12568.image priorSource: 78543!
----STARTUP----{21 January 2014 . 11:00:33 am} as /home/bot/lang-smalltalk/images/Squeak4.5-12568.image!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 11:00' prior: 33632930!
gol
^ STMSimulation benchmark printString! !
----SNAPSHOT----{21 January 2014 . 11:00:44 am} Squeak4.5-12568.image priorSource: 78543!
!Integer methodsFor: 'benchmarks' stamp: 'toma 1/21/2014 11:04'!
gol2
^ STMSimulation benchmark2 printString! !
Simulation benchmark!
----SNAPSHOT----{21 January 2014 . 11:06:45 am} Squeak4.5-12568.image priorSource: 79132!
!STMSimulation methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:05'!
print
! !
!GameOfLifeField methodsFor: 'accessing' stamp: 'toma 1/21/2014 13:09' prior: 33619796!
print
+
+ | resultString |
+ resultString := ''.
+ (1 to: self height) do: [:y |
+ (1 to: self width) do: [ :x |
+ resultString := resultString , ((self data at: y at: x) = 1) ifTrue: ['[]'] ifFalse: ['. '].].
+ resultString := resultString , Character cr ].
+ ^ resultString ! !
!GameOfLifeField methodsFor: 'accessing' stamp: 'toma 1/21/2014 13:09' prior: 33634066!
print
+
+ | resultString |
+ resultString := ''.
+ (1 to: self height) do: [:y |
+ (1 to: self width) do: [ :x |
+ resultString := resultString , ((self data at: y at: x) > 0) ifTrue: ['[]'] ifFalse: ['. '].].
+ resultString := resultString , Character cr ].
+ ^ resultString ! !
!STMSimulation methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:11' prior: 33624205!
simulateRounds: numberOfRounds
+
+ | swapField |
+
+ 1 to: numberOfRounds do: [ :roundNumber |
+ self simulateRound: roundNumber.
+ self processes do: [ :semaphore | semaphore wait. ].
+
+ SPyVM print: (self fieldNew print).
+ SPyVM print: Character cr.
+
+ swapField := self field.
+ self field: self fieldNew.
+ self fieldNew: swapField.
+ ].
+
+ ^ self field! !
----SNAPSHOT----{21 January 2014 . 1:11:46 pm} Squeak4.5-12568.image priorSource: 79361!
!GameOfLifeField methodsFor: 'accessing' stamp: 'toma 1/21/2014 13:12' prior: 33634432!
print
+
+ | resultString |
+ resultString := ''.
+ (1 to: self height) do: [:y |
+ (1 to: self width) do: [ :x |
+ resultString := resultString , (((self data at: y at: x) > 0) ifTrue: ['[]'] ifFalse: ['. ']).].
+ resultString := resultString , Character cr ].
+ ^ resultString ! !
----SNAPSHOT----{21 January 2014 . 1:13:04 pm} Squeak4.5-12568.image priorSource: 80734!
!STMProcess methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:32' prior: 33556598!
wait
self primWait! !
----SNAPSHOT----{21 January 2014 . 1:44:03 pm} Squeak4.5-12568.image priorSource: 81192!
!GameOfLifeField class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:48' prior: 33620913!
gliderFieldRows: numberOfRows columns: numberOfColumns
+
+ | newField |
+ newField := self new rows: numberOfRows columns: numberOfColumns.
+
+ newField
+ at: 8 at: 5 put: 1;
+ at: 9 at: 5 put: 1;
+ at: 10 at: 5 put: 1;
+ at: 10 at: 4 put: 1;
+ at: 9 at: 3 put: 1;
at: 13 at: 13 put: 1;
+ at: 13 at: 14 put: 1;
+ at: 13 at: 15 put: 1;
+ at: 14 at: 13 put: 1;
+ at: 12 at: 14 put: 1.
+
+ ^ newField! !
----SNAPSHOT----{21 January 2014 . 1:48:18 pm} Squeak4.5-12568.image priorSource: 81400!
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:52' prior: 33627087!
benchmark
+
+ ^ (1 to: 3) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!Simulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:52' prior: 33631876!
benchmark
+
+ ^ (1 to: 3) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!Simulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:52' prior: 33636825!
benchmark
+
+ ^ (1 to: 4) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:52' prior: 33636623!
benchmark
+
+ ^ (1 to: 4) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:58' prior: 33627744!
standardSimulation: numberOfProcesses
+
SPyVM print:'================================================================'.
+ ^ self new
+ numberOfProcesses: numberOfProcesses;
+ initialField: (GameOfLifeField gliderFieldRows: 32 columns: 32);
+ simulateRounds: 5.
+
+ ! !
----SNAPSHOT----{21 January 2014 . 1:58:07 pm} Squeak4.5-12568.image priorSource: 81998!
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:58'!
benchmark3
+
+ ^ (1 to: 4) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 13:59' prior: 33637887!
benchmark3
+
| |
+ ^ (1 to: 4) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 14:00' prior: 33638093!
benchmark3
+
| field |
field := GameOfLifeField gliderFieldRows: 32 columns: 32.
+ ^ (1 to: 4) collect: [ :i |
+ [ self standardSimulation: (2 raisedTo: i) ] timeToRun ]! !
!STMSimulation class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 14:00' prior: 33638307!
benchmark3
+
| field |
field := GameOfLifeField gliderFieldRows: 32 columns: 32.
+ ^ (1 to: 4) collect: [ :i |
+ [ field := self standardSimulation: (2 raisedTo: i) withField: field] timeToRun ]! !
STMSimulation class removeSelector: #benchmark3!
----SNAPSHOT----{21 January 2014 . 2:00:54 pm} Squeak4.5-12568.image priorSource: 83278!
!GameOfLifeField class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 14:04' prior: 33636027!
gliderFieldRows: numberOfRows columns: numberOfColumns
+
+ | newField |
+ newField := self new rows: numberOfRows columns: numberOfColumns.
+
+ newField
+ at: 8 at: 5 put: 1;
+ at: 9 at: 5 put: 1;
+ at: 10 at: 5 put: 1;
+ at: 10 at: 4 put: 1;
+ at: 9 at: 3 put: 1;
at: 13 at: 13 put: 1;
+ at: 13 at: 14 put: 1;
+ at: 13 at: 15 put: 1;
+ at: 14 at: 13 put: 1;
+ at: 12 at: 14 put: 1.
numberOfRows > 16 ifTrue: [
newField
at: 20 at: 3 put: 1;
at: 20 at: 4 put: 1;
at: 21 at: 2 put: 1;
at: 21 at: 5 put: 1;
at: 22 at: 3 put: 1;
at: 22 at: 4 put: 1.
].
+
+ ^ newField! !
!GameOfLifeField class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 14:04' prior: 33639032!
gliderFieldRows: numberOfRows columns: numberOfColumns
+
+ | newField |
+ newField := self new rows: numberOfRows columns: numberOfColumns.
+
+ newField
+ at: 8 at: 5 put: 1;
+ at: 9 at: 5 put: 1;
+ at: 10 at: 5 put: 1;
+ at: 10 at: 4 put: 1;
+ at: 9 at: 3 put: 1;
at: 13 at: 13 put: 1;
+ at: 13 at: 14 put: 1;
+ at: 13 at: 15 put: 1;
+ at: 14 at: 13 put: 1;
+ at: 12 at: 14 put: 1.
((numberOfRows > 16) and: (numberOfColumns > 16)) ifTrue: [
newField
at: 20 at: 3 put: 1;
at: 20 at: 4 put: 1;
at: 21 at: 2 put: 1;
at: 21 at: 5 put: 1;
at: 22 at: 3 put: 1;
at: 22 at: 4 put: 1.
].
+
+ ^ newField! !
!GameOfLifeField class methodsFor: 'as yet unclassified' stamp: 'toma 1/21/2014 14:05' prior: 33639731!
gliderFieldRows: numberOfRows columns: numberOfColumns
+
+ | newField |
+ newField := self new rows: numberOfRows columns: numberOfColumns.
+
+ newField
+ at: 8 at: 5 put: 1;
+ at: 9 at: 5 put: 1;
+ at: 10 at: 5 put: 1;
+ at: 10 at: 4 put: 1;
+ at: 9 at: 3 put: 1;
at: 13 at: 13 put: 1;
+ at: 13 at: 14 put: 1;
+ at: 13 at: 15 put: 1;
+ at: 14 at: 13 put: 1;
+ at: 12 at: 14 put: 1.
((numberOfRows > 16) and: (numberOfColumns > 16)) ifTrue: [
newField
at: 20 at: 3 put: 1;
at: 20 at: 4 put: 1;
at: 21 at: 2 put: 1;
at: 21 at: 5 put: 1;
at: 22 at: 3 put: 1;
at: 22 at: 4 put: 1;
at: 20 at: 20 put: 1;
at: 20 at: 21 put: 1;
at: 20 at: 22 put: 1.
].
+
+ ^ newField! !
----SNAPSHOT----{21 January 2014 . 2:05:40 pm} Squeak4.5-12568.image priorSource: 84405!
\ No newline at end of file
diff --git a/images/Squeak4.5-12568.image b/images/Squeak4.5-12568.image
index 457742e624345214ad96d9f0cc623b4f97ce29aa..c82053adc6b6192d6d257485b467b335d26d49a3
GIT binary patch
[cut]
diff --git a/spyvm/interpreter.py b/spyvm/interpreter.py
--- a/spyvm/interpreter.py
+++ b/spyvm/interpreter.py
@@ -14,6 +14,8 @@
pass
from rpython.rlib import rthread
+THREAD_DEBUG = False
+
class MissingBytecode(Exception):
"""Bytecode not implemented yet."""
def __init__(self, bytecodename):
@@ -100,7 +102,7 @@
# HUGE RACE CONDITON!!!
def bootstrap():
- print "New thread reporting"
+ #print "New thread reporting"
interp = bootstrapper.interp
w_frame = bootstrapper.w_frame
w_stm_process = bootstrapper.w_stm_process
@@ -179,17 +181,17 @@
new_interp.interrupt_check_counter = self.interrupt_check_counter
new_interp.trace_proxy = self.trace_proxy
- print 'Interpreter state copied'
+ #print 'Interpreter state copied'
# bootstrapping from (lock-guarded) global state:
bootstrapper.acquire(new_interp, w_frame, w_stm_process)
- print "Thread initialized"
+ #print "Thread initialized"
# TODO: Deadlocks if the thread before died without calling bootstrapper.release()
rthread.start_new_thread(bootstrapper.bootstrap, ())
- print "Parent interpreter resuming"
+ #print "Parent interpreter resuming"
def interpret_with_w_frame(self, w_frame, may_context_switch=True):
- print "Interpreter starting"
+ if THREAD_DEBUG: print "[Thread] Interpreter starting"
rstm.set_transaction_length(10000) # from pypy
try:
self.loop(w_frame)
@@ -276,7 +278,7 @@
# gonna go parallel! (triggered by primitive)
except StmProcessFork, f:
- print "Interpreter loop about to fork"
+ #print "Interpreter loop about to fork"
self.fork(f.w_frame, f.w_stm_process)
diff --git a/spyvm/primitives.py b/spyvm/primitives.py
--- a/spyvm/primitives.py
+++ b/spyvm/primitives.py
@@ -1416,9 +1416,10 @@
#print "STM_WAIT primitive called"
# wait(0) behaves like a barrier, it waits for but does not acquire the lock
+ #print "[Thread] wait"
wrapper.StmProcessWrapper(interp.space, w_rcvr).wait(0, 'primitive')
- print "STM Rendezvous"
- print "Should break: %s" % rstm.should_break_transaction()
+ #print "[Thread] join"
+ #print "Should break: %s" % rstm.should_break_transaction()
@expose_primitive(STM_ATOMIC_ENTER, unwrap_spec=[object], no_result=True)
def func(interp, s_frame, w_rcvr):
diff --git a/spyvm/wrapper.py b/spyvm/wrapper.py
--- a/spyvm/wrapper.py
+++ b/spyvm/wrapper.py
@@ -182,7 +182,7 @@
w_frame = self.suspended_context()
assert isinstance(w_frame, model.W_PointersObject)
- print "Breaking interpreter loop for forking"
+ #print "Breaking interpreter loop for forking"
# we need to pass control to the interpreter loop here
self.store_lock(1)
raise StmProcessFork(w_frame, self._w_self)
More information about the pypy-commit
mailing list