From: SMTP%"DSJ@WKUVX1.WKU.EDU" 9-APR-1994 15:20:33.83 To: EVERHART CC: Subj: DECEMBER93.PFAULT X-FileServer: Digital Systems Journal File Server Date: Sat, 09 Apr 1994 14:21:52 CDT Sender: DSJ-Mgr@WKUVX1.WKU.EDU Errors-To: DSJ-Mgr@WKUVX1.WKU.EDU Warnings-To: <> From: DSJ-Mgr@WKUVX1.WKU.EDU Reply-To: DSJ@WKUVX1.WKU.EDU Subject: DECEMBER93.PFAULT To: EVERHART@arisia.gce.com $! ------------------ CUT HERE ----------------------- $ v='f$verify(f$trnlnm("SHARE_UNPACK_VERIFY"))' $! $! This archive created: $! Name : PFAULT $! By : Hunter Goatley $! Date : 4-FEB-1994 11:36:17.21 $! Using: VMS_SHARE 8.4, (C) 1993 Andy Harper, Kings College London UK $! $! Credit is due to these people for their original ideas: $! James Gray, Michael Bednarek $! $! TO UNPACK THIS SHARE FILE, CONCATENATE ALL PARTS IN ORDER $! AND EXECUTE AS A COMMAND PROCEDURE ( @name ) $! $! THE FOLLOWING FILE(S) WILL BE CREATED AFTER UNPACKING: $! 1. PFAULT.DSJ;1 $! $ set="set" $ set symbol/scope=(nolocal,noglobal) $ f=f$parse("SHARE_UNPACK_TEMP","SYS$SCRATCH:."+f$getjpi("","PID")) $ e="write sys$error ""%UNPACK"", " $ w="write sys$output ""%UNPACK"", " $ if .not. f$trnlnm("SHARE_UNPACK_LOG") then $ w = "!" $ if f$getsyi("CPU") .gt. 127 then $ goto start $ ve=f$getsyi("version") $ if ve-f$extract(0,1,ve) .ges. "4.4" then $ goto start $ e "-E-OLDVER, Must run at least VMS 4.4" $ v=f$verify(v) $ exit 44 $unpack: subroutine ! P1=filename, P2=checksum, P3=attributes,P4=size $ if f$parse(P1) .nes. "" then $ goto dirok $ dn=f$parse(P1,,,"DIRECTORY") $ w "-I-CREDIR, Creating directory ''dn'" $ create/dir 'dn' $ if $status then $ goto dirok $ e "-E-CREDIRFAIL, Unable to create ''dn' File skipped" $ delete 'f'* $ exit $dirok: $ x=f$search(P1) $ if x .eqs. "" then $ goto file_absent $ e "-W-EXISTS, File ''P1' exists. Skipped" $ delete 'f'* $ exit $file_absent: $ w "-I-UNPACK, Unpacking ", P5, " of ", P6, " - ", P1, " - ", P4, " Blocks" $ n=P1 $ if P3 .nes. "" then $ n=f $ if .not. f$verify() then $ define/user sys$output nl: $ EDIT/TPU/NOSEC/NODIS/COM=SYS$INPUT/NOJOURNAL 'f'/OUT='n' PROCEDURE GetHex(s,p)LOCAL x1,x2;x1:=INDEX(t,SUBSTR(s,p,1))-1;x2:=INDEX(t, SUBSTR(s,p+1,1))-1;RETURN 16*x1+x2;ENDPROCEDURE;PROCEDURE SkipPartsep LOCAL m; LOOP m:=MARK(NONE);EXITIF m=END_OF(b);DELETE(m);EXITIF INDEX(ERASE_LINE, "-+-+-+-+-+-+-+-+")=1;ENDLOOP;ENDPROCEDURE;PROCEDURE ProcessLine LOCAL c,s,l,b, n,p;c := ERASE_CHARACTER(1);s := ERASE_LINE;IF c = "X" THEN SPLIT_LINE; ENDIF; MOVE_HORIZONTAL(-1);l := LENGTH(s);p := 1;LOOP EXITIF p > l;c := SUBSTR(s,p,1); p := p+1;CASE c FROM ' ' TO '`' ['`']: COPY_TEXT(ASCII(GetHex(s,p))); p:=p+2;[ ' ']: p:=p+1;[INRANGE,OUTRANGE]: COPY_TEXT(c);ENDCASE;ENDLOOP;ENDPROCEDURE; PROCEDURE Decode LOCAL m;POSITION(BEGINNING_OF(b));LOOP m:=MARK(NONE);EXITIF m= END_OF(b);DELETE(m);IF INDEX(CURRENT_LINE,"+-+-+-+-+-+-+-+-")= 1 THEN SkipPartSep;ELSE ProcessLine;MOVE_HORIZONTAL(1);ENDIF;ENDLOOP; ENDPROCEDURE;SET(FACILITY_NAME,"UNPACK");SET(SUCCESS,OFF);SET(INFORMATIONAL, OFF);t:="0123456789ABCDEF";f:=GET_INFO(COMMAND_LINE,"file_name");b:= CREATE_BUFFER(f,f);Decode;WRITE_FILE(b,GET_INFO(COMMAND_LINE,"output_file")); QUIT; $ if p3 .eqs. "" then $ goto dl $ open/write fdl &f $ write fdl "RECORD" $ write fdl P3 $ close fdl $ w "-I-CONVRFM, Converting record format to ", P3 $ convert/fdl=&f &f-1 &P1 $dl: delete 'f'* $ checksum 'P1' $ if checksum$checksum .nes. P2 then $ - e "-E-CHKSMFAIL, Checksum of ''P1' failed." $ exit $ endsubroutine $start: $! $ create 'f' X$`20set`20default`20`5Bkapps.vaxpro`5D`20`20`20!set`20this`20to`20the`20approp Vriate`20directory. X$`20set`20verify X$! X$!`20This`20.COM`20file`20compiles`20and`20links`20two`20matrix`20multiply X$!`20benchmark`20programs,`20and`20tests`20them.`20The`20first`20uses X$!`20a`20straight`20forward`20algorithm`20which`20causes`20pagefaulting.`20The V X$!`20second`20reduces`20pagefaulting`20by`20saving`20matrix`20rows`20in`20a`20 Vvector. X$!`20CPU`20times`20and`20pagefault`20counts`20are`20compared.`20To`20inhance V`20the`20effect X$!`20the`20working`20set`20size`20is`20locked`20at`20100`20pages.`20This`20.CO VM`20file X$!`20is`20best`20run`20from`20batch. X$! X$!`20Program`20#1 X$`20fortran/list=sys$output`20matmux1 X$`20link`20matmux1 X$!`20Program`20#2 X$`20fortran/list=sys$output`20matmux2 X$`20link`20matmux2 X$!`20Differences X$`20diff`20matmux1.for,matmux2.for X$`20set`20work/limit=100/quota=100/ext=100 X$!`20Program`201`2020x20`20Matrix X$`20run`20matmux1 X20 X$!`20Program`202`2020x20`20Matrix X$`20run`20matmux2 X20 X$!`20Program`201`2030x30`20Matrix X$`20run`20matmux1 X30 X$!`20Program`202`2030x30`20Matrix X$`20run`20matmux2 X30 X$!`20Program`201`2040x40`20Matrix X$`20run`20matmux1 X40 X$!`20Program`202`2040x40`20Matrix X$`20run`20matmux2 X40 X$!`20Program`201`2050x50`20Matrix X$`20run`20matmux1 X50 X$!`20Program`202`2050x50`20Matrix X$`20run`20matmux2 X50 X$!`20Program`201`2060x60`20Matrix X$`20run`20matmux1 X60 X$!`20Program`202`2060x60`20Matrix X$`20run`20matmux2 X60 X$!`20Program`201`2070x70`20Matrix X$`20run`20matmux1 X70 X$!`20Program`202`2070x70`20Matrix X$`20run`20matmux2 X70 X$!`20Program`201`2080x80`20Matrix X$`20run`20matmux1 X80 X$!`20Program`202`2080x80`20Matrix X$`20run`20matmux2 X80 X$!`20Program`201`2090x90`20Matrix X$`20run`20matmux1 X90 X$!`20Program`202`2090x90`20Matrix X$`20run`20matmux2 X90 X$!`20Program`201`20100x100`20Matrix X$`20run`20matmux1 X100 X$!`20Program`202`20100x100`20Matrix X$`20run`20matmux2 X100 X X`0C X`09program`20matmux1 X!++ X!`09Creation`20Date`2019-MAR-1988 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20program`20does`20a`20benchmark`20test`20of`20matrix`20mult Viplication. X!`09`20`20`20The`20program`20prints`20out`20the`20difference`20in`20CP`20time V`20and`20page X!`09`20`20`20faults`20obtained`20before`20and`20after`20the`20multiplication. V X!`09`20`20`20For`20verification`20purposes,`20the`20sum`20of`20the`20matrix`20 Velements X!`09`20`20`20printed.`20The`20size`20of`20the`20matrix`20is`20read`20in.`20Thi Vs`20program`20is X!`09`20`20`20less`20efficient,`20since`20it`20uses`20the`20straight`20forward V`20algorithm. X! X!`09Input`20Value X!`09`20`20`20matrix`20size`20:`20integer X!- X`09implicit`20none X`09include`20'($jpidef)'`20`20!get`20parameters`20for`20lib$getjpi X`09parameter`20t=300`20`20`20`20`20`20!maximum`20matrix`20size X`09real`20x,y`20`20`20`20`20`20`20`20`20`20`20`20`20!temporary`20real`20number Vs X`09real`20a(t,t),b(t,t)`20`20`20!matrices X`09integer`20s`20`20`20`20`20`20`20`20`20`20`20`20!actual`20matrix`20size X`09integer`20i,j,k`20`20`20`20`20`20`20`20!temporary`20integers X`09integer`20cpu1,page1`20`20`20!cpu`20time`20and`20page-fault`20counts X`09integer`20cpu2,page2 X`09character*23`20time1`20`20`20!clock`20time X`09character*23`20time2 X`09print`20*,'Enter`20the`20matrix`20size.' X`09read`20*,s`20`20`20`20`20`20`20`20`20`20`20`20`20!get`20size`20of`20matrix V X`09if(s.gt.t)stop`20'Too`20big.' X`09x=1.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!fill`20matrix`20with V`20data X`09do`20i=1,s X`09`20`20`20y=0.0 X`09`20`20`20do`20j=1,s X`09`20`20`20`20`20`20a(i,j)=1.0/(x+y) X`09`20`20`20`20`20`20y=y+1 X`09`20`20`20end`20do X`09`20`20`20x=x+1 X`09end`20do X`09call`20lib$getjpi(jpi$_pageflts,,,page1)`20`20`20!get`20initial`20cpu`20dat Va X`09call`20lib$getjpi(jpi$_cputim,,,cpu1) X`09call`20lib$date_time(time1) X`09do`20i=1,s`20`20`20`20`20`20`20`20`20`20`20`20!multiply`20the`20the`20matri Vx`20a`20by`20itself X`09`20`20`20do`20j=1,s`20`20`20`20`20`20`20`20`20!using`20the`20straight`20for Vward`20algorithm X`09`20`20`20`20`20`20b(i,j)=0.0 X`09`20`20`20`20`20`20do`20k=1,s X`09`20`20`20`20`20`20`20`20`20b(i,j)=b(i,j)+a(i,k)*a(k,j) X`09`20`20`20`20`20`20end`20do X`09`20`20`20end`20do X`09end`20do X`09call`20lib$getjpi(jpi$_cputim,,,cpu2)`20`20`20`20`20`20!get`20final`20cpu V`20data X`09call`20lib$getjpi(jpi$_pageflts,,,page2) X`09call`20lib$date_time(time2) X`09x=0.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!then`20sum`20up`20the V`20elements`20of`20the`20answer X`09do`20i=1,s`20`20`20`20`20`20`20`20`20`20`20`20`20!for`20checking`20purposes V X`09`20`20`20do`20j=1,s X`09`20`20`20`20`20`20x=x+b(i,j) X`09`20`20`20end`20do X`09end`20do X`09print`20*,'Total`20sum`20`20`20=`20',x`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20!print`20the`20check`20sum X`09print`20*,'CPU`20time`20`20`20`20=`20',cpu2-cpu1`20`20`20`20`20`20`20!print V`20cpu`20time X`09print`20*,'Page`20faults`20=`20',page2-page1`20`20`20`20`20!and`20page`20fa Vults X`09print`20*,'Clock`20times`20=`20',time1,'`20and`20',time2`20`20!and`20clock V`20times X`09end X`0C X`09program`20matmux2 X!++ X!`09Creation`20Date`2019-MAR-1988 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20program`20does`20a`20benchmark`20test`20of`20matrix`20mult Viplication. X!`09`20`20`20The`20program`20prints`20out`20the`20difference`20in`20CP`20time V`20and`20page X!`09`20`20`20faults`20obtained`20before`20and`20after`20the`20multiplication. V X!`09`20`20`20For`20verification`20purposes,`20the`20sum`20of`20the`20matrix`20 Velements X!`09`20`20`20printed.`20The`20size`20of`20the`20matrix`20is`20read`20in.`20Thi Vs`20program`20is X!`09`20`20`20more`20efficient`20since`20a`20row`20vector`20is`20used`20to`20av Void`20page-faults. X! X!`09Input`20Value X!`09`20`20`20matrix`20size`20:`20integer X!- X`09implicit`20none X`09include`20'($jpidef)'`20`20!get`20parameters`20for`20lib$getjpi X`09parameter`20t=300`20`20`20`20`20`20!maximum`20matrix`20size X`09real`20x,y`20`20`20`20`20`20`20`20`20`20`20`20`20!temporary`20real`20number Vs X`09real`20a(t,t),b(t,t),v(t)`20`20`20!matrices`20and`20row`20vector X`09integer`20s`20`20`20`20`20`20`20`20`20`20`20`20!actual`20matrix`20size X`09integer`20i,j,k`20`20`20`20`20`20`20`20!temporary`20integers X`09integer`20cpu1,page1`20`20`20!cpu`20time`20and`20page-fault`20counts X`09integer`20cpu2,page2 X`09character*23`20time1`20`20`20!clock`20time X`09character*23`20time2 X`09print`20*,'Enter`20the`20matrix`20size.' X`09read`20*,s`20`20`20`20`20`20`20`20`20`20`20`20`20!get`20size`20of`20matrix V X`09if(s.gt.t)stop`20'Too`20big.' X`09x=1.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!fill`20matrix`20with V`20data X`09do`20i=1,s X`09`20`20`20y=0.0 X`09`20`20`20do`20j=1,s X`09`20`20`20`20`20`20a(i,j)=1.0/(x+y) X`09`20`20`20`20`20`20y=y+1 X`09`20`20`20end`20do X`09`20`20`20x=x+1 X`09end`20do X`09call`20lib$getjpi(jpi$_pageflts,,,page1)`20`20`20!get`20initial`20cpu`20dat Va X`09call`20lib$getjpi(jpi$_cputim,,,cpu1) X`09call`20lib$date_time(time1) X`09do`20i=1,s`20`20`20`20`20`20`20`20`20`20`20`20!multiply`20the`20the`20matri Vx`20a`20by`20itself X`09`20`20`20do`20k=1,s`20`20`20`20`20`20`20`20`20!but`20first`20copy`20a`20row V`20into`20the`20vector`20v X`09`20`20`20`20`20`20v(k)=a(i,k)`20`20`20!to`20save`20on`20page`20faults X`09`20`20`20end`20do X`09`20`20`20do`20j=1,s X`09`20`20`20`20`20`20b(i,j)=0.0 X`09`20`20`20`20`20`20do`20k=1,s X`09`20`20`20`20`20`20`20`20`20b(i,j)=b(i,j)+v(k)*a(k,j) X`09`20`20`20`20`20`20end`20do X`09`20`20`20end`20do X`09end`20do X`09call`20lib$getjpi(jpi$_cputim,,,cpu2)`20`20`20`20`20`20!get`20final`20cpu V`20data X`09call`20lib$getjpi(jpi$_pageflts,,,page2) X`09call`20lib$date_time(time2) X`09x=0.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!then`20sum`20up`20the V`20elements`20of`20the`20answer X`09do`20i=1,s`20`20`20`20`20`20`20`20`20`20`20`20`20!for`20checking`20purposes V X`09`20`20`20do`20j=1,s X`09`20`20`20`20`20`20x=x+b(i,j) X`09`20`20`20end`20do X`09end`20do X`09print`20*,'Total`20sum`20`20`20=`20',x`20`20`20`20`20`20`20`20`20`20`20`20 V`20`20`20!print`20the`20check`20sum X`09print`20*,'CPU`20time`20`20`20`20=`20',cpu2-cpu1`20`20`20`20`20`20`20!print V`20cpu`20time X`09print`20*,'Page`20faults`20=`20',page2-page1`20`20`20`20`20!and`20page`20fa Vults X`09print`20*,'Clock`20times`20=`20',time1,'`20and`20',time2`20`20!and`20clock V`20times X`09end X`0C X$`20set`20default`20`5Bkapps.vaxpro`5D`20`20`20!set`20this`20to`20the`20approp Vriate`20directory. X$`20set`20verify X$! X$!`20This`20.COM`20file`20compiles`20and`20links`20two`20matrix`20transpose X$!`20benchmark`20programs,`20and`20tests`20them.`20The`20first`20uses X$!`20Eklundh's`20algorithm`20for`20minimizing`20page`20faults.`20The X$!`20second`20uses`20the`20straight`20forward`20algorithm.`20CPU`20times X$!`20and`20pagefault`20counts`20are`20compared.`20To`20inhance`20the`20effect V X$!`20the`20working`20set`20size`20is`20locked`20at`20100`20pages.`20This`20.CO VM`20file X$!`20is`20best`20run`20from`20batch. X$! X$!`20Program`20#1 X$`20fortran/list=sys$output`20mattns1 X$`20link`20mattns1 X$!`20Program`20#2 X$`20fortran/list=sys$output`20mattns2 X$`20link`20mattns2 X$`20set`20work/limit=100/quota=100/ext=100 X$!`20Program`201`2032x32`20Matrix X$`20run`20mattns1 X32 X$!`20Program`202`2032x32`20Matrix X$`20run`20mattns2 X32 X$!`20Program`201`2064x64`20Matrix X$`20run`20mattns1 X64 X$!`20Program`202`2064x64`20Matrix X$`20run`20mattns2 X64 X$!`20Program`201`20128x128`20Matrix X$`20run`20mattns1 X128 X$!`20Program`202`20128x128`20Matrix X$`20run`20mattns2 X128 X$!`20Program`201`20256x256`20Matrix X$`20run`20mattns1 X256 X$!`20Program`202`20256x256`20Matrix X$`20run`20mattns2 X256 X$!`20Program`201`20512x512`20Matrix X$`20run`20mattns1 X512 X$!`20Program`202`20512x512`20Matrix X$`20run`20mattns2 X512 X$!`20Program`201`201024x1024`20Matrix X$`20run`20mattns1 X1024 X$!`20Program`202`201024x1024`20Matrix X$`20run`20mattns2 X1024 X`0C X`09program`20transtest X!++ X!`09Creation`20Date`2025-SEP-1991 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20program`20does`20a`20benchmark`20test`20on`20a`20matrix`20 Vtranspose X!`09`20`20`20subroutine`20called`20"ftrans".`20The`20program`20prints`20out`20 Vthe`20difference X!`09`20`20`20in`20CP`20time`20and`20page`20faults`20obtained`20before`20and`20 Vafter`20the X!`09`20`20`20subroutine`20call.`20For`20verification`20purposes,`20the`20trans Vposed X!`09`20`20`20matrix`20is`20printed`20if`2016x16`20or`20less.`20The`20size`20of V`20the`20matrix X!`09`20`20`20is`20read`20in.`20(Note`20that`20in`20the`20case`20of`20the`20Ekl Vundh`20program`20the X!`09`20`20`20the`20dimensions`20of`20the`20matrix`20must`20be`20a`20power`20of V`20two.) X! X!`09Input`20Value X!`09`20`20`20matrix`20size`20:`20integer X!- X`09implicit`20none X`09include`20'($jpidef)'`20`20!get`20parameters`20for`20lib$getjpi X`09parameter`20t=1024`20`20`20`20`20!maximum`20matrix`20size X`09integer`20cpu1,page1`20`20`20!cpu`20time`20and`20page-fault`20counts X`09integer`20cpu2,page2 X`09character*23`20time1`20`20`20!clock`20time X`09character*23`20time2 X`09real`20a(t*t)`20`20`20`20`20`20`20`20`20`20!In`20the`20main`20program`20we V`20are`20using`20a X`09`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!t*t`20sized V`20vector`20is`20if`20it`20were`20a`20matrix X`09real`20x`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!temp`20value`20for`20 Vfilling`20matrix X`09integer`20i,j`20`20`20`20`20`20`20`20`20`20!subscripts`20for`20filling`20th Ve`20matrix X`09integer`20n`20`20`20`20`20`20`20`20`20`20`20`20!actual`20matrix`20size X`09logical`20allok`20`20`20`20`20`20`20`20!check`20of`20answer`20is`20OK X`09print`20*,'Enter`20the`20matrix`20size.' X`09read`20*,n`20`20`20`20`20`20`20`20`20`20`20`20`20!get`20actual`20matrix`20s Vize X`09if(n.gt.t)stop`20'Too`20big.' X`09x=1.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!fill`20matrix`20with V`201.0`20to`20real(n*n) X`09do`20i=1,n*n X`09`20`20`20a(i)=x X`09`20`20`20x=x+1.0 X`09end`20do X`09call`20lib$getjpi(jpi$_pageflts,,,page1)`20`20`20!get`20initial`20cpu`20dat Va X`09call`20lib$getjpi(jpi$_cputim,,,cpu1) X`09call`20lib$date_time(time1) X`09call`20ftrans(a,n)`20`20`20`20`20!transpose`20the`20matrix X`09call`20lib$getjpi(jpi$_cputim,,,cpu2)`20`20`20`20`20`20!get`20final`20cpu V`20data X`09call`20lib$getjpi(jpi$_pageflts,,,page2) X`09call`20lib$date_time(time2) X`09if(n.le.16)then`20`20`20`20`20`20!if`20the`20matrix`20is`20less`20than`20or V`20equal`2016x16 X`09`20`20`20do`20i=1,n`20`20`20`20`20`20`20`20`20`20!print`20it X`09`20`20`20`20`20`20print`20'(1x,16f4.0)',(a(i+n*(j-1)),j=1,n) X`09`20`20`20end`20do X`09end`20if X`09allok=.true. X`09x=1.0 X`09do`20i=1,n*n X`09`20`20`20if(a(i).ne.x)then X`09`20`20`20`20`20`20if(n.le.16)print`20*,'A(',i,')=',a(i),'`20but`20should`20 Vbe=',x X`09`20`20`20`20`20`20allok=.false. X`09`20`20`20end`20if X`09`20`20`20x=x+real(n) X`09`20`20`20if(x.gt.real(n*n))x=x-real(n*n-1) X`09end`20do X`09if(allok)then X`09`20`20`20print`20*,'Matrix`20values`20are`20OK!' X`09else X`09`20`20`20print`20*,'Matrix`20values`20have`20errors!' X`09end`20if X`09print`20*,'CPU`20time`20`20`20`20=`20',cpu2-cpu1`20`20`20`20`20`20`20!print V`20cpu`20time X`09print`20*,'Page`20faults`20=`20',page2-page1`20`20`20`20`20!and`20page`20fa Vults X`09print`20*,'Clock`20times`20=`20',time1,'`20and`20',time2`20`20!and`20clock V`20times X`09end X`0C X X`09subroutine`20ftrans(a,n) X!++ X!`09Creation`20Date`2025-SEP-1991 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20subroutine`20transposes`20an`20n*n`20matrix`20the`20trivia Vl`20algorithm. X! X!`09Parameters`20 X!`09`20`20`20a`20:`20an`20n*n`20real`20matrix X!`09`20`20`20n`20:`20integer,`20size`20of`20a X!- X`09implicit`20none X`09integer`20n X`09real`20a(n,n) X`09real`20temp X`09integer`20i,j X`09do`20i=2,n X`09`20`20`20do`20j=1,i-1 X`09`20`20`20`20`20`20temp=a(i,j) X`09`20`20`20`20`20`20a(i,j)=a(j,i) X`09`20`20`20`20`20`20a(j,i)=temp X`09`20`20`20end`20do X`09end`20do X`09end X`0C X`09program`20transtest X!++ X!`09Creation`20Date`2025-SEP-1991 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20program`20does`20a`20benchmark`20test`20on`20a`20matrix`20 Vtranspose X!`09`20`20`20subroutine`20called`20"ftrans".`20The`20program`20prints`20out`20 Vthe`20difference X!`09`20`20`20in`20CP`20time`20and`20page`20faults`20obtained`20before`20and`20 Vafter`20the X!`09`20`20`20subroutine`20call.`20For`20verification`20purposes,`20the`20trans Vposed X!`09`20`20`20matrix`20is`20printed`20if`2016x16`20or`20less.`20The`20size`20of V`20the`20matrix X!`09`20`20`20is`20read`20in.`20(Note`20that`20in`20the`20case`20of`20the`20Ekl Vundh`20program`20the X!`09`20`20`20the`20dimensions`20of`20the`20matrix`20must`20be`20a`20power`20of V`20two.) X! X!`09Input`20Value X!`09`20`20`20matrix`20size`20:`20integer X!- X`09implicit`20none X`09include`20'($jpidef)'`20`20!get`20parameters`20for`20lib$getjpi X`09parameter`20t=1024`20`20`20`20`20!maximum`20matrix`20size X`09integer`20cpu1,page1`20`20`20!cpu`20time`20and`20page-fault`20counts X`09integer`20cpu2,page2 X`09character*23`20time1`20`20`20!clock`20time X`09character*23`20time2 X`09real`20a(t*t)`20`20`20`20`20`20`20`20`20`20!In`20the`20main`20program`20we V`20are`20using`20a X`09`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!t*t`20sized V`20vector`20is`20if`20it`20were`20a`20matrix X`09real`20x`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!temp`20value`20for`20 Vfilling`20matrix X`09integer`20i,j`20`20`20`20`20`20`20`20`20`20!subscripts`20for`20filling`20th Ve`20matrix X`09integer`20n`20`20`20`20`20`20`20`20`20`20`20`20!actual`20matrix`20size X`09logical`20allok`20`20`20`20`20`20`20`20!check`20of`20answer`20is`20OK X`09print`20*,'Enter`20the`20matrix`20size.' X`09read`20*,n`20`20`20`20`20`20`20`20`20`20`20`20`20!get`20actual`20matrix`20s Vize X`09if(n.gt.t)stop`20'Too`20big.' X`09x=1.0`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20`20!fill`20matrix`20with V`201.0`20to`20real(n*n) X`09do`20i=1,n*n X`09`20`20`20a(i)=x X`09`20`20`20x=x+1.0 X`09end`20do X`09call`20lib$getjpi(jpi$_pageflts,,,page1)`20`20`20!get`20initial`20cpu`20dat Va X`09call`20lib$getjpi(jpi$_cputim,,,cpu1) X`09call`20lib$date_time(time1) X`09call`20ftrans(a,n)`20`20`20`20`20!transpose`20the`20matrix X`09call`20lib$getjpi(jpi$_cputim,,,cpu2)`20`20`20`20`20`20!get`20final`20cpu V`20data X`09call`20lib$getjpi(jpi$_pageflts,,,page2) X`09call`20lib$date_time(time2) X`09if(n.le.16)then`20`20`20`20`20`20!if`20the`20matrix`20is`20less`20than`20or V`20equal`2016x16 X`09`20`20`20do`20i=1,n`20`20`20`20`20`20`20`20`20`20!print`20it X`09`20`20`20`20`20`20print`20'(1x,16f4.0)',(a(i+n*(j-1)),j=1,n) X`09`20`20`20end`20do X`09end`20if X`09allok=.true. X`09x=1.0 X`09do`20i=1,n*n X`09`20`20`20if(a(i).ne.x)then X`09`20`20`20`20`20`20if(n.le.16)print`20*,'A(',i,')=',a(i),'`20but`20should`20 Vbe=',x X`09`20`20`20`20`20`20allok=.false. X`09`20`20`20end`20if X`09`20`20`20x=x+real(n) X`09`20`20`20if(x.gt.real(n*n))x=x-real(n*n-1) X`09end`20do X`09if(allok)then X`09`20`20`20print`20*,'Matrix`20values`20are`20OK!' X`09else X`09`20`20`20print`20*,'Matrix`20values`20have`20errors!' X`09end`20if X`09print`20*,'CPU`20time`20`20`20`20=`20',cpu2-cpu1`20`20`20`20`20`20`20!print V`20cpu`20time X`09print`20*,'Page`20faults`20=`20',page2-page1`20`20`20`20`20!and`20page`20fa Vults X`09print`20*,'Clock`20times`20=`20',time1,'`20and`20',time2`20`20!and`20clock V`20times X`09end X`0C X X`09subroutine`20ftrans(a,n) X!++ X!`09Creation`20Date`2025-SEP-1991 X! X!`09Author`20Charles`20Kapps X! X!`09Functional`20Description X!`09`20`20`20This`20subroutine`20transposes`20an`20n*n`20matrix`20the`20trivia Vl`20algorithm. X! X!`09Parameters`20 X!`09`20`20`20a`20:`20an`20n*n`20real`20matrix X!`09`20`20`20n`20:`20integer,`20size`20of`20a X!- X`09implicit`20none X`09integer`20n X`09real`20a(n,n) X`09real`20temp X`09integer`20i,j X`09do`20i=2,n X`09`20`20`20do`20j=1,i-1 X`09`20`20`20`20`20`20temp=a(i,j) X`09`20`20`20`20`20`20a(i,j)=a(j,i) X`09`20`20`20`20`20`20a(j,i)=temp X`09`20`20`20end`20do X`09end`20do X`09end X $ call unpack PFAULT.DSJ;1 1833418118 "" 25 1 1 $ v=f$verify(v) $ exit