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

  1.  
  2. -- PERFORMANCE MEASUREMENT : function GET timing ( INTERNAL FLOAT)
  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 G000006 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_STRING : STRING ( 1..20 ) := "0.010               ";
  16.   SCRATCH_LENGTH : NATURAL ;
  17.   SCRATCH_VALUE  : FLOAT ;
  18.   package FLT_IO is new FLOAT_IO ( FLOAT ) ; use FLT_IO ;
  19. --
  20.  
  21. begin
  22.  
  23.  
  24.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  25.  
  26.   delay 0.5 ;  -- wait for stable enviornment on some machines
  27.  
  28.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  29.  
  30.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  31.  
  32. --
  33. -- Control loop
  34. --
  35.     ITERATION.START_CONTROL ;
  36.     for J in 1 .. ITERATION_COUNT loop
  37.       GLOBAL := 0 ;
  38.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  39.         GLOBAL := GLOBAL + A_ONE ; 
  40.         REMOTE ;                   
  41.         SCRATCH_VALUE := FLOAT ( INSIDE_LOOP ) / 1000.0 ;
  42.         PUT ( SCRATCH_STRING , SCRATCH_VALUE ) ;
  43.       end loop ;
  44.     end loop ;
  45.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  46.  
  47.  
  48. --
  49. -- Test loop
  50. --
  51. -- establish the time for the GET pocdedure on a FLOAT number
  52.  
  53.     ITERATION.START_TEST ;
  54.     for J in 1 .. ITERATION_COUNT loop
  55.       GLOBAL := 0 ;
  56.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  57.         GLOBAL := GLOBAL + A_ONE ;
  58.         REMOTE ;
  59.         SCRATCH_VALUE := FLOAT ( INSIDE_LOOP ) / 1000.0 ;
  60.         PUT ( SCRATCH_STRING , SCRATCH_VALUE ) ;
  61.         GET ( SCRATCH_STRING , SCRATCH_VALUE , SCRATCH_LENGTH ) ;
  62.       end loop ;
  63.     end loop ;
  64.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  65.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  66.     exit when STABLE ;
  67.   end loop ;
  68. --
  69.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  70.  
  71. --
  72. -- Printout
  73. --
  74.   PIWG_IO.PIWG_OUTPUT ( "G000006" , "Input/Output" ,
  75.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  76.      " TEXT_IO.GET getting a floating point fraction from a local string" ,
  77.      " Timing measurement on 0.001 to 0.01 range of numbers" ,
  78.      " compare, approximately, to G000005 for integer vs float" ) ;
  79.  
  80. end G000006 ;
  81.