home *** CD-ROM | disk | FTP | other *** search
- -- A000055
- --
- -- This is an executable procedure that can be called outside
- -- whatever is being measured.
- -- This version works in conjunction with A000052,A000054,A000055
- -- to measure CPU time and WALL time without modifying the tests
- -- There will be a file named A000052D created and used by these
- -- procedures.
- --
- -- USAGE :
- -- A000052
- -- optional control
- -- A000053
- -- A000054
- -- test being measured
- -- A000055
- --
- -- RESULT :
- -- ( (55) - (54) ) - ( (53) - (52) ) is the measurement
- --
- -- The second expression takes out the time to make the
- -- measurement. As a check, (3) - (2) should be close to (2) - (1)
- --
- -- The printout gives the CPU and WALL time in seconds for
- -- the run being measured.
- --
-
- with CPU_TIME_CLOCK ; -- various choices on tape
- with CALENDAR ; -- used for WALL clock times
- with TEXT_IO ; -- for printing times
- with DURATION_IO ; -- for printing times
-
- procedure A000055 is
- MY_FILE : TEXT_IO.FILE_TYPE ;
- HOLD_1 : STRING ( 1 .. 80 ) ;
- HOLD_2 : STRING ( 1 .. 80 ) ;
- HOLD_3 : STRING ( 1 .. 80 ) ;
- LENGTH : NATURAL ;
- START : POSITIVE ;
- END_POS : POSITIVE ;
- CPU_SECONDS_NOW : DURATION := CPU_TIME_CLOCK ;
- WALL_SECONDS_NOW : DURATION := CALENDAR.SECONDS(CALENDAR.CLOCK) ;
- CPU_SECONDS_OVERHEAD : DURATION ;
- WALL_SECONDS_OVERHEAD : DURATION ;
- CPU_SECONDS_OVERHEAD_2 : DURATION ;
- WALL_SECONDS_OVERHEAD_2 : DURATION ;
- CPU_SECONDS_OF_TEST : DURATION ;
- WALL_SECONDS_OF_TEST : DURATION ;
- --
- -- Function to find the mark "=" in the record befor the value
- --
- function MARK ( ITEM : STRING ) return positive is
- begin
- for I in ITEM'RANGE loop
- if ITEM ( I ) = '=' then
- return I + 1 ;
- end if ;
- end loop ; -- error if loop terminates
- raise PROGRAM_ERROR ;
- end MARK ;
-
- begin
-
- --
- -- Write out full results for possible future analysis
- --
- TEXT_IO.OPEN ( MY_FILE , TEXT_IO.IN_FILE , "A000052D" ) ;
- TEXT_IO.GET_LINE ( MY_FILE , HOLD_1 , LENGTH ) ;
- TEXT_IO.GET_LINE ( MY_FILE , HOLD_2 , LENGTH ) ;
- TEXT_IO.GET_LINE ( MY_FILE , HOLD_3 , LENGTH ) ;
- TEXT_IO.CLOSE ( MY_FILE ) ;
- TEXT_IO.OPEN ( MY_FILE , TEXT_IO.OUT_FILE , "A000052D" ) ;
- TEXT_IO.PUT_LINE ( MY_FILE , HOLD_1 ( 1 .. LENGTH ) ) ;
- TEXT_IO.PUT_LINE ( MY_FILE , HOLD_2 ( 1 .. LENGTH ) ) ;
- TEXT_IO.PUT_LINE ( MY_FILE , HOLD_3 ( 1 .. LENGTH ) ) ;
- TEXT_IO.PUT ( MY_FILE , " '55 CPU time =" ) ;
- DURATION_IO.PUT ( MY_FILE , CPU_SECONDS_NOW ) ;
- TEXT_IO.PUT ( MY_FILE , " WALL time =" ) ;
- DURATION_IO.PUT ( MY_FILE , WALL_SECONDS_NOW ) ;
- TEXT_IO.PUT_LINE ( MY_FILE , " seconds." ) ;
- TEXT_IO.CLOSE ( MY_FILE ) ;
- --
- -- Compute and print results
- --
- START := MARK ( HOLD_1 ) ;
- DURATION_IO.GET ( HOLD_1(START..LENGTH), CPU_SECONDS_OVERHEAD, END_POS ) ;
- START := MARK ( HOLD_1(START..LENGTH) ) ;
- DURATION_IO.GET ( HOLD_1(START..LENGTH), WALL_SECONDS_OVERHEAD, END_POS ) ;
- START := MARK ( HOLD_2 ) ;
- DURATION_IO.GET ( HOLD_2(START..LENGTH), CPU_SECONDS_OVERHEAD_2, END_POS ) ;
- START := MARK ( HOLD_2(START..LENGTH) ) ;
- DURATION_IO.GET ( HOLD_2(START..LENGTH), WALL_SECONDS_OVERHEAD_2, END_POS ) ;
- START := MARK ( HOLD_3 ) ;
- DURATION_IO.GET ( HOLD_3(START..LENGTH), CPU_SECONDS_OF_TEST, END_POS ) ;
- START := MARK ( HOLD_3(START..LENGTH) ) ;
- DURATION_IO.GET ( HOLD_3(START..LENGTH), WALL_SECONDS_OF_TEST, END_POS ) ;
- CPU_SECONDS_OF_TEST := ( CPU_SECONDS_NOW - CPU_SECONDS_OF_TEST ) -
- ( CPU_SECONDS_OVERHEAD_2 - CPU_SECONDS_OVERHEAD ) ;
- WALL_SECONDS_OF_TEST := ( WALL_SECONDS_NOW - WALL_SECONDS_OF_TEST ) -
- ( WALL_SECONDS_OVERHEAD_2 - WALL_SECONDS_OVERHEAD ) ;
- TEXT_IO.PUT_LINE ( "Measurement" ) ;
- TEXT_IO.PUT ( "CPU Time: " ) ;
- DURATION_IO.PUT ( CPU_SECONDS_OF_TEST , 6 , 2 ) ;
- TEXT_IO.PUT_LINE ( " seconds" ) ;
- TEXT_IO.PUT ( "Wall Time: " ) ;
- DURATION_IO.PUT ( WALL_SECONDS_OF_TEST , 6 , 2 ) ;
- TEXT_IO.PUT_LINE ( " seconds" ) ;
- end A000055 ;
-