ack/doc/occam/p9

61 lines
1.4 KiB
Plaintext
Raw Normal View History

1987-02-26 10:26:19 +00:00
.bp
.NH
Appendix B: Translation of a \fBPAR\fP construct to EM code using the library
routines to simulate parallelism
.PP
Translation of the parallel construct:
.DS
.ft CW
1987-02-26 10:26:19 +00:00
par
P0
par i = [ 1 for n ]
P(i)
.DE
is
.TS
center;
lf5 lf5.
lal -20 ; Assume 20 bytes of local variables at this moment
cal $parbegin ; Set up a process group
asp 4 ; Assume pointersize = 4
cal $parfork ; Split stack in two from local -20
lfr 4 ; Assume wordsize = 4
zne *23 ; One end jumps to second process, other continues here
lor 0 ; Static link
cal $P0
asp 4
bra *24 ; Jump to the outer parend
23
cal $parfork ; Fork off `par i = ...' process
lfr 4
zne *25 ; One end jumps to end of outer par
lal -20 ; Place break just above i
cal $parbegin ; Set up another process group for the P(i)
loc 1
stl -24 ; i:=1
lol n ; Assume n can be addressed this simply
stl -28 ; A nameless counter
bra *26 ; Branch to counter test
27
cal $parfork ; Fork off one P(i)
lfr 4
zne *28 ; One jumps away to increment i, the other calls P(i)
lol -24
lor 0
cal $P
asp 8
bra *29
28
inl -24 ; i:=i+1
del -28 ; counter:=counter-1
26
lol -28
zgt *27 ; while counter>0 repeat loop
29
cal $parend ; Wait for the P(i) to finish, then delete group
bra *24 ; Jump to the higher up meeting place with P0
25 ; Note that the bra will be optimized away
24
cal $parend ; Wait for both processes to end, then delete group
.TE