.TITLE GETCPU - GET CPU TICKS .IDENT /LEN1.0/ ; ; FORTRAN CALLABLE FUNCTION TO RETURN ACCUMULATED CPU TIME FOR THE ; CALLING TASK. ; ; CALL SEQUENCE - ; ; TICKS = GETCPU() ! NO PARM IS NECESSARY ; ; 60 TICKS = 1 SECOND SO TO COMPUTE CPU TIME IN SECONDS ; CPUSEC = GETCPU()/60. ; ; NOTE - GETCPU USES SEND/RECEIVES TO ...CPT TO RETREIVE THE CPU TIME. ; FOR THIS REASON, GETCPU SHOULD NOT BE CALLED AN EXCESSIVE NO. OF TIMES ; WITH LITTLE TIME (1 SEC) BETWEEN CALLS OR SYSTEM PERFORMANCE MAY BE ; ADVERSELY AFFECTED. ; ; A CALL TO RSD1I (SAME ROUTINE USED IN SET UP FOR SSD RECEIVE) IS ; NEEDED TO SET UP FOR THE FUNCION CALL TO GETCPU. ; ; CALL RSD1I ! ONLY ONE CALL TO RSD1I NEEDS TO BE MADE FOR ; ! BOTH SSD AND GETCPU SET-UP. ; ; TASK BUILD COMMAND FILE MUST INCLUDE EITHER - ; 1) DB2:[350,2]RSD1O, DB2:[350,2]GETCPU ; OR ; 2) DB2:[350,2]ARAP/LIB ; ; TO INCLUDE THE NECESSARY ROUTINES. ; .MCALL VSDR$S .GLOBL RSD1I,RSD1 ; CPTNM: .RAD50 /.../ .RAD50 /CPT/ IDUMY: .WORD 0 ; GETCPU:: VSDR$S #CPTNM,,,,,#IDUMY,#1,,,#0 TST @#$DSW ; IF DSW ERROR, EXIT BLE RETURN ; ; LOOP ON CPT DONE FLAG TILL IT GOES NON-ZERO, THEN ...CPT HAS SENT ; CURRENT CPU TIME. ; NODONE: TST CPTDON ; ...CPT ANSWERED YET ? BEQ NODONE ; NO CLR CPTDON ; DONE, CLEAR THE FLAG ; ; MOVE IN CPU TICKS RECEIVED FORM RSD1 AND STORED IN COMMON /CPUTIM/ ; IN R0,R1 FOR FUNCTION RETURN. ; MOV TICKS+2,R1 MOV TICKS,R0 ; RETURN: RETURN ; .PSECT CPUTIM,RW,D,OVR,GBL TICKS: .BLKW 2 CPTDON: .WORD 0 .END