home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / piwg / g000003.ada < prev    next >
Encoding:
Text File  |  1988-05-03  |  2.4 KB  |  79 lines

  1.  
  2. -- PERFORMANCE MEASUREMENT : function PUT_LINE timing
  3.  
  4. with TEXT_IO ; use TEXT_IO ;
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  6. with ITERATION ; -- obtain stable measurement
  7. with PIWG_IO ; -- output results
  8.  
  9. procedure G000003 is  -- main procedure to execute
  10.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  11.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  12.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  13.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  14.   STABLE : BOOLEAN ; -- true when measurement stable
  15.   SCRATCH_FILE : FILE_TYPE ;
  16.   SCRATCH_STRING : STRING ( 1..20 ) := "abcdefghijklmnopqrst";
  17.   SCRATCH_LENGTH : NATURAL ;
  18.  
  19. begin
  20. --
  21. --  Open file for " PUT_LINE " test
  22. --
  23.   CREATE ( SCRATCH_FILE , OUT_FILE , "SCRATCH3" ) ;
  24.  
  25.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  26.  
  27.   delay 0.5 ;  -- wait for stable enviornment on some machines
  28.  
  29.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  30.  
  31.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  32.  
  33. --
  34. -- Control loop
  35. --
  36.     ITERATION.START_CONTROL ;
  37.     for J in 1 .. ITERATION_COUNT loop
  38.       GLOBAL := 0 ;
  39.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  40.         GLOBAL := GLOBAL + A_ONE ; 
  41.         REMOTE ;                   
  42.       end loop ;
  43.       RESET ( SCRATCH_FILE ) ;
  44.     end loop ;
  45.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  46.  
  47. --
  48. -- Test loop
  49. --
  50. -- establish the time for the PUT_LINE pocdedure on 20 character strings
  51.  
  52.     ITERATION.START_TEST ;
  53.     for J in 1 .. ITERATION_COUNT loop
  54.       GLOBAL := 0 ;
  55.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  56.         GLOBAL := GLOBAL + A_ONE ; 
  57.         REMOTE ;                   
  58.         PUT_LINE ( SCRATCH_FILE , SCRATCH_STRING ) ;
  59.       end loop ;
  60.       RESET ( SCRATCH_FILE ) ;
  61.     end loop ;
  62.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  63.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  64.     exit when STABLE ;
  65.   end loop ;
  66. --
  67.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  68.  
  69.   CLOSE ( SCRATCH_FILE ) ;
  70. --
  71. -- Printout
  72. --
  73.   PIWG_IO.PIWG_OUTPUT ( "G000003" , "Input/Output" ,
  74.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  75.      " TEXT_IO.PUT_LINE for 20 characters, timing measurment" ,
  76.      " a scratch file is opened, written and reset" ,
  77.      " " ) ;
  78. end G000003 ;
  79.