home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #31 / NN_1992_31.iso / spool / comp / os / vms / 20191 < prev    next >
Encoding:
Internet Message Format  |  1993-01-01  |  27.9 KB

  1. Path: sparky!uunet!cs.utexas.edu!zaphod.mps.ohio-state.edu!cis.ohio-state.edu!ucbvax!KOPC.HHS.DK!ARNE
  2. From: ARNE@KOPC.HHS.DK (Arne Vajhxj)
  3. Newsgroups: comp.os.vms
  4. Subject: easy to use PASCAL-interface to PPL$-routines
  5. Message-ID: <01GT0KGN1QWY8WWDAS@kopc.hhs.dk>
  6. Date: 1 Jan 93 18:18:53 GMT
  7. Sender: daemon@ucbvax.BERKELEY.EDU
  8. Distribution: world
  9. Organization: The Internet
  10. Lines: 823
  11.  
  12.  
  13. Here are some code implementing a simple PASCAL interface for the
  14. PPL$-routines.
  15.  
  16. So if you not have access to a multi-processor VAX or you do not
  17. program in PASCAL, then skip this posting.
  18.  
  19. The PPL$-routines are quite OK, but they are very general and therefore
  20. a little difficult to use for the unexperienced programmer.
  21.  
  22. My routines are very simple to use, but have much less functionality and
  23. a little less efficiency.
  24.  
  25. The package includes:
  26.  
  27.   - PAR.MAR and MULTI.PAS which define and implements the interface
  28.   - EX.* which shows how to use it
  29.   - EXBIG*.* which shows how to use it with benefit (including timing results)
  30.  
  31.                                                               Arne
  32.  
  33. Arne Vajhxj                             local DECNET:  KO::ARNE
  34. Computer Department                     PSI:           PSI%23831001304030::ARNE
  35. Business School of Southern Denmark     Internet:      ARNE@KO.HHS.DK
  36.  
  37. ================================================================================
  38. $! ------------------ CUT HERE -----------------------
  39. $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))'
  40. $!
  41. $! This archive created by VMS_SHARE Version 8.1
  42. $!   On  1-JAN-1993 19:14:22.15   By user ARNE        
  43. $!
  44. $! The VMS_SHARE software that created this archive
  45. $!    was written by  Andy Harper, Kings College London UK
  46. $!    -- September 1992
  47. $!
  48. $! Credit is due to these people for their original ideas:
  49. $!    James Gray, Michael Bednarek 
  50. $!
  51. $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER
  52. $! AND EXECUTE AS A COMMAND PROCEDURE  (  @name  )
  53. $!
  54. $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING:
  55. $!       1. PAR.MAR;1
  56. $!       2. EX.PAS;1
  57. $!       3. EXBIGM.PAS;1
  58. $!       4. EXBIGS.PAS;1
  59. $!       5. FUNC.PAS;1
  60. $!       6. MULTI.PAS;1
  61. $!       7. EX.FOR;1
  62. $!       8. EX.INC;1
  63. $!       9. EX.COM;1
  64. $!      10. EXBIG.COM;1
  65. $!      11. EXBIG.RES;1
  66. $!
  67. $set="set"
  68. $set symbol/scope=(nolocal,noglobal)
  69. $f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID"))
  70. $e="write sys$error  ""%UNPACK"", "
  71. $w="write sys$output ""%UNPACK"", "
  72. $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!"
  73. $ ve=f$getsyi("version")
  74. $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start
  75. $ e "-E-OLDVER, Must run at least VMS 4.4"
  76. $ v=f$verify(v)
  77. $ exit 44
  78. $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes
  79. $ if f$search(P1) .eqs. "" then $ goto file_absent
  80. $ e "-W-EXISTS, File ''P1' exists. Skipped."
  81. $ delete 'f'*
  82. $ exit
  83. $file_absent:
  84. $ if f$parse(P1) .nes. "" then $ goto dirok
  85. $ dn=f$parse(P1,,,"DIRECTORY")
  86. $ w "-I-CREDIR, Creating directory ''dn'"
  87. $ create/dir 'dn'
  88. $ if $status then $ goto dirok
  89. $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped."
  90. $ delete 'f'*
  91. $ exit
  92. $dirok:
  93. $ w "-I-UNPACK, Unpacking file ''P1'"
  94. $ n=P1
  95. $ if P3 .nes. "" then $ n=f
  96. $ if .not. f$verify() then $ define/user sys$output nl:
  97. $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT 'f'/OUT='n'
  98. PROCEDURE GetHex LOCAL x1,x2;x1:=INDEX(t,ERASE_CHARACTER(1))-1;x2:=INDEX(t,
  99. ERASE_CHARACTER(1))-1;RETURN 16*x1+x2;ENDPROCEDURE;
  100. PROCEDURE SkipPartsep LOOP EXITIF INDEX(ERASE_LINE,"-+-+-+-+-+-+-+-+")=1;
  101. ENDLOOP;ENDPROCEDURE;
  102. PROCEDURE ExpandChar CASE CURRENT_CHARACTER FROM ' ' TO 'z' ["`"]
  103. :ERASE_CHARACTER(1);COPY_TEXT(ASCII(GetHex));[" "]:ERASE_CHARACTER(1);[
  104. OUTRANGE,INRANGE]:MOVE_HORIZONTAL(1);ENDCASE;ENDPROCEDURE;
  105. PROCEDURE ProcessLine s:=ERASE_CHARACTER(1);LOOP EXITIF CURRENT_OFFSET>=LENGTH(
  106. CURRENT_LINE);ExpandChar;ENDLOOP;IF s="V" THEN APPEND_LINE;ENDIF;ENDPROCEDURE;
  107. PROCEDURE AdvanceLine MOVE_HORIZONTAL(-CURRENT_OFFSET);MOVE_VERTICAL(1);
  108. ENDPROCEDURE;PROCEDURE Decode POSITION(BEGINNING_OF(b));LOOP EXITIF MARK(NONE)=
  109. END_OF(b);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")=1 THEN SkipPartSep;
  110. ELSE ProcessLine;AdvanceLine;ENDIF;ENDLOOP;ENDPROCEDURE;SET(FACILITY_NAME,
  111. "UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL,OFF);t:="0123456789ABCDEF";f:=
  112. GET_INFO(COMMAND_LINE,"file_name");b:=CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,
  113. GET_INFO(COMMAND_LINE,"output_file"));QUIT;
  114. $ if p3 .eqs. "" then $ goto dl
  115. $ open/write fdl &f
  116. $ write fdl "RECORD"
  117. $ write fdl P3
  118. $ close fdl
  119. $ w "-I-CONVRFM, Converting record format to ", P3
  120. $ convert/fdl=&f &f-1 &P1
  121. $dl: delete 'f'*
  122. $ if P2 .eqs. "" then $ goto ckskip
  123. $ checksum 'P1'
  124. $ if checksum$checksum .nes. P2 then $ -
  125.   e "-E-CHKSMFAIL, Checksum of ''P1' failed."
  126. $ exit
  127. $ckskip: e "-W-CHKSUMSKIP, checksum validation unavailable for ''P1'"
  128. $ endsubroutine
  129. $start:
  130. $!
  131. $ create 'f'
  132. X`20`20`20`20`20`20`20`20.title`20`20par
  133. X;
  134. X;`20content`20:`20par-routines
  135. X;
  136. X;`20author`20`20:`20Arne`20Vajh`F8j`20(january`201992)
  137. X;
  138. X;-
  139. X;
  140. X;`20`20External`20routines`20(secondary):
  141. X;
  142. X;`20`20`20`20PAR_EXECUTE
  143. X;`20`20`20`20PAR_SYNCH
  144. X;
  145. X;`20`20Internal`20routines:
  146. X;
  147. X;`20`20`20`20par_init
  148. X;`20`20`20`20par_memdef
  149. X;
  150. X;-
  151. X`20`20`20`20`20`20`20`20$DSCDEF
  152. X`20`20`20`20`20`20`20`20$SSDEF
  153. X`20`20`20`20`20`20`20`20$PPLDEF
  154. XTRUE=-1
  155. XFALSE=0
  156. X`20`20`20`20`20`20`20`20.macro`20`20fixdesc,l,a
  157. X`20`20`20`20`20`20`20`20.word`20`20`20l
  158. X`20`20`20`20`20`20`20`20.byte`20`20`20DSC$K_DTYPE_T
  159. X`20`20`20`20`20`20`20`20.byte`20`20`20DSC$K_CLASS_S
  160. X`20`20`20`20`20`20`20`20.address`20a
  161. X`20`20`20`20`20`20`20`20.endm
  162. XNSUB=5
  163. XNBAR=10
  164. XNSEC=10
  165. X`20`20`20`20`20`20`20`20.extrn`20`20LIB$INITIALIZE`20`20`20`20`20`20`20`20`20
  166. V`20;`20include`20LIB$INITIALIZE
  167. X;
  168. X;`20special`20initialization`20section
  169. X;
  170. X`20`20`20`20`20`20`20`20.psect`20`20LIB$INITIALIZE`20long,nopic,con,gbl,noshr,
  171. Vnoexe,nowrt
  172. X`20`20`20`20`20`20`20`20.address`20par_init
  173. X;
  174. X;`20readonly`20data`20section
  175. X;
  176. X`20`20`20`20`20`20`20`20.psect`20`20$PDATA`20quad,pic,con,lcl,shr,noexe,nowrt
  177. Xargl_createapplication:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;
  178. V`20argumentlist`20PPL$CREATE_APPLICATION
  179. X`20`20`20`20`20`20`20`20.long`20`20`204
  180. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  181. V`20`20`20`20`20`20`20`20`20`20`20;`20size
  182. X`20`20`20`20`20`20`20`20.address`20pardes`20`20`20`20`20`20`20`20`20`20`20`20
  183. V`20`20`20`20`20;`20application-name
  184. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  185. V`20`20`20`20`20`20`20`20`20`20`20;`20protection
  186. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  187. V`20`20`20`20`20`20`20`20`20`20`20;`20flags
  188. Xargl_getindex:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  189. V`20`20`20`20`20;`20argumentlist`20PPL$GET_INDEX
  190. X`20`20`20`20`20`20`20`20.long`20`20`201
  191. X`20`20`20`20`20`20`20`20.address`20ixadr`20`20`20`20`20`20`20`20`20`20`20`20
  192. V`20`20`20`20`20`20;`20index
  193. Xargl_spawn:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  194. V`20`20`20`20`20`20`20;`20argumentlist`20PPL$SPAWN
  195. X`20`20`20`20`20`20`20`20.long`20`20`206
  196. X`20`20`20`20`20`20`20`20.address`20copies`20`20`20`20`20`20`20`20`20`20`20`20
  197. V`20`20`20`20`20;`20copies
  198. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  199. V`20`20`20`20`20`20`20`20`20`20`20;`20program-name
  200. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  201. V`20`20`20`20`20`20`20`20`20`20`20;`20children-id's
  202. X`20`20`20`20`20`20`20`20.address`20flags`20`20`20`20`20`20`20`20`20`20`20`20
  203. V`20`20`20`20`20`20;`20flags
  204. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  205. V`20`20`20`20`20`20`20`20`20`20`20;`20input-file
  206. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  207. V`20`20`20`20`20`20`20`20`20`20`20;`20output-file
  208. Xargl_exit:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  209. V`20`20`20`20`20`20`20`20;`20argumentlist`20SYS$EXIT
  210. X`20`20`20`20`20`20`20`20.long`20`20`201
  211. X`20`20`20`20`20`20`20`20.long`20`20`20SS$_NORMAL`20`20`20`20`20`20`20`20`20
  212. V`20`20`20`20`20;`20status
  213. Xpardes:`20fixdesc`206,parnam
  214. Xparnam:`20.ascii`20`20"AVUPAR"
  215. Xsecdes:`20fixdesc`207,secnam
  216. Xsecnam:`20.ascii`20`20"PAR_VAR"
  217. Xusrdes:`20fixdesc`205,usrnam
  218. Xflags:`20`20.long`20`20`20PPL$M_NODEBUG
  219. X;
  220. X;`20writeread`20data`20section
  221. X;
  222. X`20`20`20`20`20`20`20`20.psect`20`20$LOCAL`20quad,pic,con,lcl,noshr,noexe,wrt
  223. Xargl_createsharedmemory:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20;`20ar
  224. Vgumentlist`20PPL$CREATE_SHARED_MEMORY
  225. X`20`20`20`20`20`20`20`20.long`20`20`205
  226. X`20`20`20`20`20`20`20`20.blkl`20`20`201`20`20`20`20`20`20`20`20`20`20`20`20
  227. V`20`20`20`20`20`20`20`20`20`20`20;`20section-name
  228. X`20`20`20`20`20`20`20`20.blkl`20`20`201`20`20`20`20`20`20`20`20`20`20`20`20
  229. V`20`20`20`20`20`20`20`20`20`20`20;`20memory-area
  230. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  231. V`20`20`20`20`20`20`20`20`20`20`20;`20flags
  232. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  233. V`20`20`20`20`20`20`20`20`20`20`20;`20file-name
  234. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  235. V`20`20`20`20`20`20`20`20`20`20`20;`20flags
  236. Xargl_createbarrier:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  237. V`20`20;`20argumentlist`20PPL$CREATE_BARRIER
  238. X`20`20`20`20`20`20`20`20.long`20`20`203
  239. X`20`20`20`20`20`20`20`20.blkl`20`20`201`20`20`20`20`20`20`20`20`20`20`20`20
  240. V`20`20`20`20`20`20`20`20`20`20`20;`20barrier-id
  241. X`20`20`20`20`20`20`20`20.long`20`20`200`20`20`20`20`20`20`20`20`20`20`20`20
  242. V`20`20`20`20`20`20`20`20`20`20`20;`20barrier-name
  243. X`20`20`20`20`20`20`20`20.address`20quorum`20`20`20`20`20`20`20`20`20`20`20`20
  244. V`20`20`20`20`20;`20quorum
  245. Xargl_waitatbarrier:`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  246. V`20`20;`20argumentlist`20PPL$WAIT_AT_BARRIER
  247. X`20`20`20`20`20`20`20`20.long`20`20`201
  248. X`20`20`20`20`20`20`20`20.blkl`20`20`201`20`20`20`20`20`20`20`20`20`20`20`20
  249. V`20`20`20`20`20`20`20`20`20`20`20;`20barrier-id
  250. Xcmem:`20`20`20.long`20`20`20mem2-mem1
  251. X`20`20`20`20`20`20`20`20.address`20mem1
  252. Xixadr:`20`20.blkl`20`20`201
  253. Xcopies:`20.blkl`20`20`201
  254. Xquorum:`20.blkl`20`20`201
  255. Xusrnam:`20.ascii`20`20"USERx"
  256. X;
  257. X;`20shared`20data`20section
  258. X;
  259. X`20`20`20`20`20`20`20`20.psect`20`20par_var`20page,pic,ovr,gbl,shr,noexe,wrt
  260. Xmem1:
  261. Xnsect:`20`20.blkl`20`20`201
  262. Xsect:`20`20`20.blkl`20`20`20NSEC
  263. X`20`20`20`20`20`20`20`20.blkl`20`20`20NSEC
  264. Xnproc:`20`20.blkl`20`20`201
  265. Xproc:`20`20`20.blkl`20`20`20NSUB
  266. Xbids:`20`20`20.blkl`20`20`20NBAR
  267. X`20`20`20`20`20`20`20`20.align`20`20page
  268. Xmem2:
  269. X;
  270. X;`20code`20section
  271. X;
  272. X`20`20`20`20`20`20`20`20.psect`20`20$CODE`20quad,pic,con,lcl,shr,exe,nowrt
  273. X;********************
  274. X;
  275. X;`20`20PAR_EXECUTE`20(`20NSECT`20,`20SECTADR`20,`20SECTSIZ`20,`20NPROC`20,`20P
  276. VROC`20,`20OK`20)
  277. X;
  278. X;`20`20start`20parallel`20execution
  279. X;
  280. X;********************
  281. X`20`20`20`20`20`20`20`20.entry`20`20par_execute,`5Em<iv,r2,r3>
  282. X;`20setup`20memory`20control-block
  283. X`20`20`20`20`20`20`20`20movl`20`20`20`20@B`5E4(ap),r0
  284. X`20`20`20`20`20`20`20`20movl`20`20`20`20r0,nsect
  285. X`20`20`20`20`20`20`20`20moval`20`20`20sect,r1
  286. X`20`20`20`20`20`20`20`20movl`20`20`20`20B`5E8(ap),r2
  287. X`20`20`20`20`20`20`20`20movl`20`20`20`20B`5E12(ap),r3
  288. X100$:`20`20`20tstl`20`20`20`20r0
  289. X`20`20`20`20`20`20`20`20bleq`20`20`20`20200$
  290. X`20`20`20`20`20`20`20`20movl`20`20`20`20(r3)+,(r1)+
  291. X`20`20`20`20`20`20`20`20movl`20`20`20`20(r2)+,(r1)+
  292. X`20`20`20`20`20`20`20`20decl`20`20`20`20r0
  293. X`20`20`20`20`20`20`20`20brb`20`20`20`20`20100$
  294. X;`20setup`20subprocess`20control-block
  295. X200$:`20`20`20movl`20`20`20`20@B`5E16(ap),r0
  296. X`20`20`20`20`20`20`20`20movl`20`20`20`20r0,nproc
  297. X`20`20`20`20`20`20`20`20moval`20`20`20proc,r1
  298. X`20`20`20`20`20`20`20`20movl`20`20`20`20B`5E20(ap),r2
  299. X300$:`20`20`20tstl`20`20`20`20r0
  300. X`20`20`20`20`20`20`20`20bleq`20`20`20`20400$
  301. X`20`20`20`20`20`20`20`20movl`20`20`20`20(r2)+,(r1)+
  302. X`20`20`20`20`20`20`20`20decl`20`20`20`20r0
  303. X`20`20`20`20`20`20`20`20brb`20`20`20`20`20300$
  304. X;`20create`20barriers
  305. X400$:`20`20`20addl3`20`20`20#1,nproc,quorum
  306. X`20`20`20`20`20`20`20`20movl`20`20`20`20#NBAR,r2
  307. X`20`20`20`20`20`20`20`20moval`20`20`20bids,argl_createbarrier+4
  308. X500$:`20`20`20callg`20`20`20argl_createbarrier,G`5EPPL$CREATE_BARRIER
  309. X`20`20`20`20`20`20`20`20addl2`20`20`20#4,argl_createbarrier+4
  310. X`20`20`20`20`20`20`20`20decl`20`20`20`20r2
  311. X`20`20`20`20`20`20`20`20tstl`20`20`20`20r2
  312. X`20`20`20`20`20`20`20`20bgtr`20`20`20`20500$
  313. X;`20create`20shared`20memory
  314. X`20`20`20`20`20`20`20`20jsb`20`20`20`20`20par_memdef
  315. X;`20create`20subprocesses
  316. X`20`20`20`20`20`20`20`20movl`20`20`20`20nproc,copies
  317. X`20`20`20`20`20`20`20`20callg`20`20`20argl_spawn,G`5EPPL$SPAWN
  318. X`20`20`20`20`20`20`20`20cmpl`20`20`20`20r0,#PPL$_NORMAL
  319. X`20`20`20`20`20`20`20`20bneq`20`20`20`20600$
  320. X`20`20`20`20`20`20`20`20movl`20`20`20`20#TRUE,@B`5E24(ap)
  321. X`20`20`20`20`20`20`20`20ret
  322. X600$:`20`20`20movl`20`20`20`20#FALSE,@B`5E24(ap)
  323. X`20`20`20`20`20`20`20`20ret
  324. X;********************
  325. X;
  326. X;`20`20PAR_SYNCH`20(`20NR`20)
  327. X;
  328. X;`20`20parallel`20synchronization
  329. X;
  330. X;********************
  331. X`20`20`20`20`20`20`20`20.entry`20`20par_synch,`5Em<iv>
  332. X`20`20`20`20`20`20`20`20movl`20`20`20`20@B`5E4(ap),r0
  333. X`20`20`20`20`20`20`20`20decl`20`20`20`20r0
  334. X`20`20`20`20`20`20`20`20mull2`20`20`20#4,r0
  335. X`20`20`20`20`20`20`20`20moval`20`20`20bids,r1
  336. X`20`20`20`20`20`20`20`20addl3`20`20`20r0,r1,argl_waitatbarrier+4
  337. X`20`20`20`20`20`20`20`20callg`20`20`20argl_waitatbarrier,G`5EPPL$WAIT_AT_BARRI
  338. VER
  339. X`20`20`20`20`20`20`20`20ret
  340. X;********************
  341. X;
  342. X;`20`20par_init
  343. X;
  344. X;`20`20parallel`20execution`20initialization
  345. X;
  346. X;********************
  347. X`20`20`20`20`20`20`20`20.entry`20`20par_init,`5Em<iv,r2>
  348. X`20`20`20`20`20`20`20`20callg`20`20`20argl_createapplication,G`5EPPL$CREATE_AP
  349. VPLICATION
  350. X`20`20`20`20`20`20`20`20moval`20`20`20secdes,argl_createsharedmemory+4
  351. X`20`20`20`20`20`20`20`20moval`20`20`20cmem,argl_createsharedmemory+8
  352. X`20`20`20`20`20`20`20`20callg`20`20`20argl_createsharedmemory,G`5EPPL$CREATE_S
  353. VHARED_MEMORY
  354. X`20`20`20`20`20`20`20`20callg`20`20`20argl_getindex,G`5EPPL$GET_INDEX
  355. X`20`20`20`20`20`20`20`20tstl`20`20`20`20ixadr
  356. X`20`20`20`20`20`20`20`20bneq`20`20`20`20100$
  357. X;`20parent`20process
  358. X`20`20`20`20`20`20`20`20movl`20`20`20`20#SS$_NORMAL,r0
  359. X`20`20`20`20`20`20`20`20ret
  360. X;`20child`20process
  361. X100$:`20`20`20jsb`20`20`20`20`20par_memdef
  362. X`20`20`20`20`20`20`20`20movl`20`20`20`20ixadr,r0
  363. X`20`20`20`20`20`20`20`20decl`20`20`20`20r0
  364. X`20`20`20`20`20`20`20`20mull2`20`20`20#4,r0
  365. X`20`20`20`20`20`20`20`20moval`20`20`20proc,r1
  366. X`20`20`20`20`20`20`20`20addl2`20`20`20r0,r1
  367. X`20`20`20`20`20`20`20`20movl`20`20`20`20(r1),r1
  368. X`20`20`20`20`20`20`20`20calls`20`20`20#0,(r1)
  369. X`20`20`20`20`20`20`20`20callg`20`20`20argl_exit,G`5ESYS$EXIT
  370. X`20`20`20`20`20`20`20`20ret
  371. X;********************
  372. X;
  373. X;`20`20par_memdef
  374. X;
  375. X;`20`20memory`20definition
  376. X;
  377. X;********************
  378. Xpar_memdef:
  379. X`20`20`20`20`20`20`20`20moval`20`20`20usrdes,argl_createsharedmemory+4
  380. X`20`20`20`20`20`20`20`20moval`20`20`20sect,argl_createsharedmemory+8
  381. X`20`20`20`20`20`20`20`20movl`20`20`20`20nsect,r2
  382. X100$:`20`20`20tstl`20`20`20`20r2
  383. X`20`20`20`20`20`20`20`20bleq`20`20`20`20200$
  384. X`20`20`20`20`20`20`20`20addb3`20`20`20#48,r2,usrnam+4
  385. X`20`20`20`20`20`20`20`20callg`20`20`20argl_createsharedmemory,G`5EPPL$CREATE_S
  386. VHARED_MEMORY
  387. X`20`20`20`20`20`20`20`20addl2`20`20`20#8,argl_createsharedmemory+8
  388. X`20`20`20`20`20`20`20`20decl`20`20`20`20r2
  389. X`20`20`20`20`20`20`20`20brb`20`20`20`20`20100$
  390. X200$:`20`20`20rsb
  391. X`20`20`20`20`20`20`20`20.end
  392. $ call unpack PAR.MAR;1 1367008563 ""
  393. $!
  394. $ create 'f'
  395. Xprogram`20ex(input,output);
  396. X
  397. X%INCLUDE`20'MULTI.PAS'
  398. X
  399. Xconst
  400. X`20`20`20k=256000;
  401. X
  402. Xvar
  403. X`20`20`20m`20:`20`5Baligned(9),static`5D`20array`20`5B1..k`5D`20of`20real;
  404. X
  405. Xprocedure`20s1;
  406. X
  407. Xvar
  408. X`20`20`20i`20:`20integer;
  409. X
  410. Xbegin
  411. X`20`20`20synchronize(1);
  412. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=m`5Bi`5D+1;
  413. X`20`20`20synchronize(2);
  414. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=m
  415. V`5Bi`5D+1;
  416. X`20`20`20synchronize(3);
  417. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  418. Vm`5Bi`5D+1;
  419. X`20`20`20synchronize(4);
  420. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=m`5Bi`5D+1;
  421. X`20`20`20synchronize(5);
  422. X`20`20`20synchronize(6);
  423. Xend;
  424. X
  425. Xprocedure`20s2;
  426. X
  427. Xvar
  428. X`20`20`20i`20:`20integer;
  429. X
  430. Xbegin
  431. X`20`20`20synchronize(1);
  432. X`20`20`20synchronize(2);
  433. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=m`5Bi`5D*2;
  434. X`20`20`20synchronize(3);
  435. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=m
  436. V`5Bi`5D*2;
  437. X`20`20`20synchronize(4);
  438. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  439. Vm`5Bi`5D*2;
  440. X`20`20`20synchronize(5);
  441. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=m`5Bi`5D*2;
  442. X`20`20`20synchronize(6);
  443. Xend;
  444. X
  445. Xvar
  446. X`20`20`20i`20:`20integer;
  447. X
  448. Xbegin
  449. X`20`20`20writeln(execute_procedures(1,iaddress(m),k*4,2,iaddress(s1),iaddress(
  450. Vs2)));
  451. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=1;
  452. X`20`20`20synchronize(1);
  453. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=1;
  454. X`20`20`20synchronize(2);
  455. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  456. V1;
  457. X`20`20`20synchronize(3);
  458. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=1;
  459. X`20`20`20synchronize(4);
  460. X`20`20`20synchronize(5);
  461. X`20`20`20synchronize(6);
  462. X`20`20`20writeln(m`5B1`5D,m`5Bk`20div`204`5D,m`5Bk`20div`202`5D,m`5B(3*k)`20di
  463. Vv`204`5D,m`5Bk`5D);
  464. Xend.
  465. $ call unpack EX.PAS;1 406682757 ""
  466. $!
  467. $ create 'f'
  468. Xprogram`20exbigm(input,output);
  469. X
  470. X%INCLUDE`20'FUNC.PAS'
  471. X
  472. X%INCLUDE`20'MULTI.PAS'
  473. X
  474. Xconst
  475. X`20`20`20k=256000;
  476. X
  477. Xvar
  478. X`20`20`20m`20:`20`5Baligned(9),static`5D`20array`20`5B1..k`5D`20of`20real;
  479. X
  480. Xprocedure`20s1;
  481. X
  482. Xvar
  483. X`20`20`20i,t`20:`20integer;
  484. X
  485. Xbegin
  486. X`20`20`20t:=clock;
  487. X`20`20`20synchronize(1);
  488. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=f1(m`5Bi`5D);
  489. X`20`20`20synchronize(2);
  490. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=f1(m
  491. V`5Bi`5D);
  492. X`20`20`20synchronize(3);
  493. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  494. Vf1(m`5Bi`5D);
  495. X`20`20`20synchronize(4);
  496. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=f1(m`5Bi`5D)
  497. V;
  498. X`20`20`20synchronize(5);
  499. X`20`20`20synchronize(6);
  500. X`20`20`20writeln('S1`20-`20',clock-t);
  501. Xend;
  502. X
  503. Xprocedure`20s2;
  504. X
  505. Xvar
  506. X`20`20`20i,t`20:`20integer;
  507. X
  508. Xbegin
  509. X`20`20`20t:=clock;
  510. X`20`20`20synchronize(1);
  511. X`20`20`20synchronize(2);
  512. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=f2(m`5Bi`5D);
  513. X`20`20`20synchronize(3);
  514. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=f2(m
  515. V`5Bi`5D);
  516. X`20`20`20synchronize(4);
  517. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  518. Vf2(m`5Bi`5D);
  519. X`20`20`20synchronize(5);
  520. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=f2(m`5Bi`5D)
  521. V;
  522. X`20`20`20synchronize(6);
  523. X`20`20`20writeln('S2`20-`20',clock-t);
  524. Xend;
  525. X
  526. Xvar
  527. X`20`20`20i,t`20:`20integer;
  528. X
  529. Xbegin
  530. X`20`20`20writeln(execute_procedures(1,iaddress(m),k*4,2,iaddress(s1),iaddress(
  531. Vs2)));
  532. X`20`20`20t:=clock;
  533. X`20`20`20for`20i:=1`20to`20(k`20div`204)`20do`20m`5Bi`5D:=f0(i);
  534. X`20`20`20synchronize(1);
  535. X`20`20`20for`20i:=((k`20div`204)+1)`20to`20(k`20div`202)`20do`20m`5Bi`5D:=f0(i
  536. V);
  537. X`20`20`20synchronize(2);
  538. X`20`20`20for`20i:=((k`20div`202)+1)`20to`20((3*k)`20div`204)`20do`20m`5Bi`5D:=
  539. Vf0(i);
  540. X`20`20`20synchronize(3);
  541. X`20`20`20for`20i:=(((3*k)`20div`204)+1)`20to`20k`20do`20m`5Bi`5D:=f0(i);
  542. X`20`20`20synchronize(4);
  543. X`20`20`20synchronize(5);
  544. X`20`20`20synchronize(6);
  545. X`20`20`20writeln('MAIN`20-`20',clock-t);
  546. X`20`20`20writeln(m`5B1`5D,m`5Bk`20div`204`5D,m`5Bk`20div`202`5D,m`5B(3*k)`20di
  547. Vv`204`5D,m`5Bk`5D);
  548. Xend.
  549. $ call unpack EXBIGM.PAS;1 607065469 ""
  550. $!
  551. $ create 'f'
  552. Xprogram`20exbigs(input,output);
  553. X
  554. X%INCLUDE`20'FUNC.PAS'
  555. X
  556. Xconst
  557. X`20`20`20k=256000;
  558. X
  559. Xvar
  560. X`20`20`20m`20:`20array`20`5B1..k`5D`20of`20real;
  561. X
  562. Xvar
  563. X`20`20`20i,t`20:`20integer;
  564. X
  565. Xbegin
  566. X`20`20`20t:=clock;
  567. X`20`20`20for`20i:=1`20to`20k`20do`20begin
  568. X`20`20`20`20`20`20m`5Bi`5D:=f0(i);
  569. X`20`20`20`20`20`20m`5Bi`5D:=f1(m`5Bi`5D);
  570. X`20`20`20`20`20`20m`5Bi`5D:=f2(m`5Bi`5D);
  571. X`20`20`20end;
  572. X`20`20`20writeln('TOTAL`20-`20',clock-t);
  573. X`20`20`20writeln(m`5B1`5D,m`5Bk`20div`204`5D,m`5Bk`20div`202`5D,m`5B(3*k)`20di
  574. Vv`204`5D,m`5Bk`5D);
  575. Xend.
  576. $ call unpack EXBIGS.PAS;1 776165745 ""
  577. $!
  578. $ create 'f'
  579. Xfunction`20f0(i:integer):real;
  580. X
  581. Xbegin
  582. X`20`20`20f0:=sqrt(sqrt(cos(1/i)+sin(1/i)));
  583. Xend;
  584. X
  585. Xfunction`20f1(m:real):real;
  586. X
  587. Xbegin
  588. X`20`20`20f1:=exp(cos(m)+sin(m));
  589. Xend;
  590. X
  591. Xfunction`20f2(m:real):real;
  592. X
  593. Xbegin
  594. X`20`20`20f2:=sin(ln(m+1))+cos(ln(m+1));
  595. Xend;
  596. $ call unpack FUNC.PAS;1 1364810374 ""
  597. $!
  598. $ create 'f'
  599. Xconst
  600. X`20`20`20FTNTRUE`20`20=`20-1;
  601. X`20`20`20FTNFALSE`20=`200;
  602. X`20`20`20NSUB`20=`205;
  603. X`20`20`20NSEC`20=`2010;
  604. X
  605. X
  606. X
  607. Xfunction`20execute_procedures(ll:`5Blist`5D`20integer):boolean;
  608. X
  609. X`5Bexternal`5D`20procedure`20par_execute(%REF`20ns:integer;
  610. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  611. V`20`20`20`20`20`20`20`20%REF`20sa:array`20`5Bn1..n2:integer`5D`20of`20integer;
  612. V
  613. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  614. V`20`20`20`20`20`20`20`20%REF`20ss:array`20`5Bn3..n4:integer`5D`20of`20integer;
  615. V
  616. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  617. V`20`20`20`20`20`20`20`20%REF`20np:integer;
  618. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  619. V`20`20`20`20`20`20`20`20%REF`20pa:array`20`5Bn5..n6:integer`5D`20of`20integer;
  620. V
  621. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  622. V`20`20`20`20`20`20`20`20%REF`20ok:integer);
  623. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  624. V`20`20`20`20`20`20`20`20external;`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  625. V`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  626. X
  627. Xvar
  628. X`20`20`20i,ns,np,ok`20:`20integer;
  629. X`20`20`20sa,ss`20`20`20`20`20`20:`20array`20`5B1..NSEC`5D`20of`20integer;
  630. X`20`20`20pa`20`20`20`20`20`20`20`20`20:`20array`20`5B1..NSUB`5D`20of`20integer
  631. V;
  632. X
  633. Xbegin
  634. X`20`20`20ns:=argument(ll,1);
  635. X`20`20`20for`20i:=1`20to`20ns`20do`20begin
  636. X`20`20`20`20`20`20sa`5Bi`5D:=argument(ll,2*i);
  637. X`20`20`20`20`20`20ss`5Bi`5D:=argument(ll,2*i+1);
  638. X`20`20`20end;
  639. X`20`20`20np:=argument(ll,2*ns+2);
  640. X`20`20`20for`20i:=1`20to`20np`20do`20begin
  641. X`20`20`20`20`20`20pa`5Bi`5D:=argument(ll,i+2*ns+2);
  642. X`20`20`20end;
  643. X`20`20`20par_execute(ns,sa,ss,np,pa,ok);
  644. X`20`20`20if`20ok=FTNTRUE`20then
  645. X`20`20`20`20`20`20execute_procedures:=true
  646. X`20`20`20else
  647. X`20`20`20`20`20`20execute_procedures:=false;
  648. Xend;
  649. X
  650. Xprocedure`20synchronize(nr:integer);
  651. X
  652. X`5Bexternal`5D`20procedure`20par_synch(%REF`20nr:integer);`20external;
  653. X
  654. Xbegin
  655. X`20`20`20par_synch(nr);
  656. Xend;
  657. X
  658. $ call unpack MULTI.PAS;1 876289697 ""
  659. $!
  660. $ create 'f'
  661. X`20`20`20`20`20`20PROGRAM`20EX
  662. X`20`20`20`20`20`20INCLUDE`20'EX.INC'
  663. X`20`20`20`20`20`20INTEGER*4`20NSEC,NSUB
  664. X`20`20`20`20`20`20PARAMETER`20(NSUB=5,NSEC=10)
  665. X`20`20`20`20`20`20INTEGER*4`20NS,SA(NSEC),SS(NSEC),NP,P(NSUB)
  666. X`20`20`20`20`20`20LOGICAL*4`20OK
  667. X`20`20`20`20`20`20EXTERNAL`20S1,S2
  668. X`20`20`20`20`20`20INTEGER*4`20I
  669. X`20`20`20`20`20`20NS=1
  670. X`20`20`20`20`20`20SA(1)=%LOC(M)
  671. X`20`20`20`20`20`20SS(1)=K*4
  672. X`20`20`20`20`20`20NP=2
  673. X`20`20`20`20`20`20P(1)=%LOC(S1)
  674. X`20`20`20`20`20`20P(2)=%LOC(S2)
  675. X`20`20`20`20`20`20CALL`20PAR_EXECUTE(NS,SA,SS,NP,P,OK)
  676. X`20`20`20`20`20`20WRITE(*,*)`20OK
  677. X`20`20`20`20`20`20DO`20100`20I=1,(K/4)
  678. X`20`20`20`20`20`20`20`20M(I)=1
  679. X100`20`20`20CONTINUE
  680. X`20`20`20`20`20`20CALL`20PAR_SYNCH(1)
  681. X`20`20`20`20`20`20DO`20200`20I=((K/4)+1),(K/2)
  682. X`20`20`20`20`20`20`20`20M(I)=1
  683. X200`20`20`20CONTINUE
  684. X`20`20`20`20`20`20CALL`20PAR_SYNCH(2)
  685. X`20`20`20`20`20`20DO`20300`20I=((K/2)+1),((3*K)/4)
  686. X`20`20`20`20`20`20`20`20M(I)=1
  687. X300`20`20`20CONTINUE
  688. X`20`20`20`20`20`20CALL`20PAR_SYNCH(3)
  689. X`20`20`20`20`20`20DO`20400`20I=(((3*K)/4)+1),K
  690. X`20`20`20`20`20`20`20`20M(I)=1
  691. X400`20`20`20CONTINUE
  692. X`20`20`20`20`20`20CALL`20PAR_SYNCH(4)
  693. X`20`20`20`20`20`20CALL`20PAR_SYNCH(5)
  694. X`20`20`20`20`20`20CALL`20PAR_SYNCH(6)
  695. X`20`20`20`20`20`20WRITE(*,*)`20M(1),M(K/4),M(K/2),M((3*K)/4),M(K)
  696. X`20`20`20`20`20`20END
  697. XC
  698. X`20`20`20`20`20`20SUBROUTINE`20S1
  699. X`20`20`20`20`20`20INCLUDE`20'EX.INC'
  700. X`20`20`20`20`20`20INTEGER*4`20I
  701. X`20`20`20`20`20`20CALL`20PAR_SYNCH(1)
  702. X`20`20`20`20`20`20DO`20100`20I=1,(K/4)`20
  703. X`20`20`20`20`20`20`20`20M(I)=M(I)+1
  704. X100`20`20`20CONTINUE
  705. X`20`20`20`20`20`20CALL`20PAR_SYNCH(2)
  706. X`20`20`20`20`20`20DO`20200`20I=((K/4)+1),(K/2)`20
  707. X`20`20`20`20`20`20`20`20M(I)=M(I)+1
  708. X200`20`20`20CONTINUE
  709. X`20`20`20`20`20`20CALL`20PAR_SYNCH(3)
  710. X`20`20`20`20`20`20DO`20300`20I=((K/2)+1),((3*K)/4)`20
  711. X`20`20`20`20`20`20`20`20M(I)=M(I)+1
  712. X300`20`20`20CONTINUE
  713. X`20`20`20`20`20`20CALL`20PAR_SYNCH(4)
  714. X`20`20`20`20`20`20DO`20400`20I=(((3*K)/4)+1),K`20
  715. X`20`20`20`20`20`20`20`20M(I)=M(I)+1
  716. X400`20`20`20CONTINUE
  717. X`20`20`20`20`20`20CALL`20PAR_SYNCH(5)
  718. X`20`20`20`20`20`20CALL`20PAR_SYNCH(6)
  719. X`20`20`20`20`20`20RETURN
  720. X`20`20`20`20`20`20END
  721. XC
  722. X`20`20`20`20`20`20SUBROUTINE`20S2
  723. X`20`20`20`20`20`20INCLUDE`20'EX.INC'
  724. X`20`20`20`20`20`20INTEGER*4`20I
  725. X`20`20`20`20`20`20CALL`20PAR_SYNCH(1)
  726. X`20`20`20`20`20`20CALL`20PAR_SYNCH(2)
  727. X`20`20`20`20`20`20DO`20100`20I=1,(K/4)`20
  728. X`20`20`20`20`20`20`20`20M(I)=M(I)*2
  729. X100`20`20`20CONTINUE
  730. X`20`20`20`20`20`20CALL`20PAR_SYNCH(3)
  731. X`20`20`20`20`20`20DO`20200`20I=((K/4)+1),(K/2)`20
  732. X`20`20`20`20`20`20`20`20M(I)=M(I)*2
  733. X200`20`20`20CONTINUE
  734. X`20`20`20`20`20`20CALL`20PAR_SYNCH(4)
  735. X`20`20`20`20`20`20DO`20300`20I=((K/2)+1),((3*K)/4)`20
  736. X`20`20`20`20`20`20`20`20M(I)=M(I)*2
  737. X300`20`20`20CONTINUE
  738. X`20`20`20`20`20`20CALL`20PAR_SYNCH(5)
  739. X`20`20`20`20`20`20DO`20400`20I=(((3*K)/4)+1),K`20
  740. X`20`20`20`20`20`20`20`20M(I)=M(I)*2
  741. X400`20`20`20CONTINUE
  742. X`20`20`20`20`20`20CALL`20PAR_SYNCH(6)
  743. X`20`20`20`20`20`20RETURN
  744. X`20`20`20`20`20`20END
  745. $ call unpack EX.FOR;1 1481582250 ""
  746. $!
  747. $ create 'f'
  748. X`20`20`20`20`20`20INTEGER*4`20K
  749. X`20`20`20`20`20`20PARAMETER`20(K=256000)
  750. X`20`20`20`20`20`20REAL*4`20M(K)
  751. X`20`20`20`20`20`20COMMON`20/EXCOM/M
  752. $ call unpack EX.INC;1 1093417746 ""
  753. $!
  754. $ create 'f'
  755. X$`20macro`20par
  756. X$`20!
  757. X$`20fortran`20ex
  758. X$`20link`20ex+par+sys$input/opt
  759. Xpsect_attr=excom,page
  760. X$
  761. X$`20write`20sys$output`20"FORTRAN`20example"
  762. X$`20run`20ex
  763. X$`20!
  764. X$`20pascal`20ex
  765. X$`20link`20ex+par
  766. X$`20write`20sys$output`20"PASCAL`20example"
  767. X$`20run`20ex
  768. X$`20!
  769. X$`20exit
  770. $ call unpack EX.COM;1 1868039624 ""
  771. $!
  772. $ create 'f'
  773. X$`20pascal/nolist`20exbigs
  774. X$`20link/nomap`20exbigs
  775. X$`20write`20sys$output`20"START`20S:`20",f$time(),"`20/`20",f$getjpi("","CPUTI
  776. VM")
  777. X$`20run`20exbigs
  778. X$`20write`20sys$output`20"END`20S:`20",f$time(),"`20/`20",f$getjpi("","CPUTIM"
  779. V)
  780. X$`20!
  781. X$`20macro/nolist`20par
  782. X$`20pascal/nolist`20exbigm
  783. X$`20link/nomap`20exbigm+par
  784. X$`20write`20sys$output`20"START`20M:`20",f$time(),"`20/`20",f$getjpi("","CPUTI
  785. VM")
  786. X$`20run`20exbigm
  787. X$`20write`20sys$output`20"END`20M:`20",f$time(),"`20/`20",f$getjpi("","CPUTIM"
  788. V)
  789. X$`20!
  790. X$`20exit
  791. $ call unpack EXBIG.COM;1 441978173 ""
  792. $!
  793. $ create 'f'
  794. X
  795. XResults`20of`20EXBIG`20runs:
  796. X
  797. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20
  798. V`20`20`20`20`20`20`20`20`20elapsed`20`20`20`20CPU`20(1)`20`20`20`20CPU(2)`20
  799. V`20`20`20ratio(3)
  800. X
  801. XmicroVAX`204000`20(1`20CPU)`20`20`20EXBIGS`20`20`20`20`2021.74`20`20`20`20`20
  802. V`2021.31`20`20`20`20`20`2021.04`20`20`20`20`20`200.97
  803. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20EXBIGM
  804. V`20`20`20`20`2026.40`20`20`20`20`20`20`207.02*`20`20`20`20`2022.32`20`20`20
  805. V`20`20`200.85
  806. X
  807. XVAX`206420`20(2`20CPU)`20`20`20`20`20`20`20`20EXBIGS`20`20`20`20`2020.23`20
  808. V`20`20`20`20`2019.82`20`20`20`20`20`2019.52`20`20`20`20`20`200.96
  809. X`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20EXBIGM
  810. V`20`20`20`20`2014.28`20`20`20`20`20`20`206.18*`20`20`20`20`2019.98`20`20`20
  811. V`20`20`201.40
  812. X
  813. X(1)`20:`20measured`20outside`20the`20program
  814. X(2)`20:`20measured`20inside`20the`20program
  815. X(3)`20:`20CPU(2)/elapsed
  816. X*`20`20`20:`20only`20main-process`20=>`20useless`20number
  817. X
  818. XConclusions:
  819. X
  820. X`20`20-`20You`20loose`20(example:`2021%)`20by`20using`20the`20routines`20on
  821. V`20a`20single`20CPU`20machine
  822. X`20`20`20`20(no`20surprise`20-`20only`20overhead).
  823. X`20`20-`20You`20gain`20(example:`2029%)`20by`20using`20the`20routines`20on`20a
  824. V`20multi`20CPU`20machine.
  825. X`20`20`20`20Maybe`20not`20proportional`20to`20the`20number`20of`20CPU,`20but
  826. V`20still`20worth`20taking
  827. X`20`20`20`20(and`20remember`20a`2020`20CPU`20seconds`20program`20is`20actually
  828. V`20a`20small`20program,
  829. X`20`20`20`20so`202`20subprocess-creations`20weighs`20relative`20much).
  830. X
  831. $ call unpack EXBIG.RES;1 625752228 ""
  832. $ v=f$verify(v)
  833. $ exit
  834.  
  835.