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

  1. -- PERFORMANCE MEASUREMENT : Minimum procedure call and return time
  2. --                           procedure local
  3. --                           no parameters
  4.  
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  6. with ITERATION ;
  7. with PIWG_IO ;
  8.  
  9. procedure P000001 is  -- main procedure to execute
  10.  
  11.   CPU_TIME : DURATION ;
  12.   WALL_TIME : DURATION ;
  13.   CHECK_TIMES : constant := 100 ;
  14.   ITERATION_COUNT : INTEGER ;
  15.   ITS_OK : BOOLEAN ;
  16.  
  17. --
  18.  
  19.   procedure PROC_0 is  -- may be inlined thus zero time
  20.   begin
  21.     GLOBAL := GLOBAL + A_ONE ;
  22.     REMOTE ;
  23.   end ;
  24.  
  25. begin
  26.  
  27.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  28.  
  29.   delay 0.5 ;  -- wait for stable enviornment on some machines
  30.  
  31.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  32.  
  33.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  34.  
  35. --
  36. -- Control loop
  37. --
  38.     ITERATION.START_CONTROL ;
  39.     for J in 1 .. ITERATION_COUNT loop
  40.       GLOBAL := 0 ;
  41.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  42.         GLOBAL := GLOBAL + A_ONE ;
  43.         REMOTE ;
  44.       end loop ;
  45.     end loop ;
  46.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  47.  
  48. --
  49. -- Test loop
  50. --
  51.     ITERATION.START_TEST ;
  52.     for J in 1 .. ITERATION_COUNT loop
  53.       GLOBAL := 0 ;
  54.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  55.         PROC_0 ;  -- this has control global increment and call inside
  56.       end loop ;
  57.     end loop ;
  58.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  59.     ITERATION.TEST_STABLE ( ITERATION_COUNT , ITS_OK ) ;
  60.     exit when ITS_OK ;
  61.   end loop ;
  62. --
  63.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  64.  
  65. --
  66. -- Printout
  67. --
  68.   PIWG_IO.PIWG_OUTPUT ( "P000001" , "Procedure" ,
  69.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  70.      " Procedure call and return time ( may be zero if automatic inlining ) " ,
  71.      " procedure is local " ,
  72.      " no parameters " ) ;
  73.  
  74. end P000001 ;
  75.