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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           pragma INLINE used
  5. --                           no parameters
  6.  
  7. package PROC_PACKAGE_4 is
  8.   procedure PROC_0 ;
  9.   pragma INLINE ( PROC_0 ) ;
  10. end PROC_PACKAGE_4 ;
  11.  
  12. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  13. package body PROC_PACKAGE_4 is -- compare to P000001 ( local procedure )
  14.   procedure PROC_0 is
  15.   begin
  16.     GLOBAL := GLOBAL + A_ONE ;
  17.     REMOTE ;
  18.   end ;
  19. end PROC_PACKAGE_4 ;
  20.  
  21. with PROC_PACKAGE_4 ; use PROC_PACKAGE_4 ;
  22. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  23. with ITERATION ; -- obtain stable measurement
  24. with PIWG_IO ; -- output results
  25.  
  26. procedure P000004 is  -- main procedure to execute
  27.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  28.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  29.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  30.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  31.   STABLE : BOOLEAN ; -- true when measurement stable
  32.  
  33. begin
  34.  
  35.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  36.  
  37.   delay 0.5 ;  -- wait for stable enviornment on some machines
  38.  
  39.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  40.  
  41.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  42.  
  43. --
  44. -- Control loop
  45. --
  46.     ITERATION.START_CONTROL ;
  47.     for J in 1 .. ITERATION_COUNT loop
  48.       GLOBAL := 0 ;
  49.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  50.         GLOBAL := GLOBAL + A_ONE ; 
  51.         REMOTE ;                   
  52.       end loop ;
  53.     end loop ;
  54.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  55.  
  56. --
  57. -- Test loop
  58. --
  59.     ITERATION.START_TEST ;
  60.     for J in 1 .. ITERATION_COUNT loop
  61.       GLOBAL := 0 ;
  62.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  63.         PROC_0 ; -- this has control global increment and call inside
  64.       end loop ;
  65.     end loop ;
  66.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  67.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  68.     exit when STABLE ;
  69.   end loop ;
  70. --
  71.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  72.  
  73. --
  74. -- Printout
  75. --
  76.   PIWG_IO.PIWG_OUTPUT ( "P000004" , "Procedure" ,
  77.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  78.      " Procedure call and return time measurement" ,
  79.      " The procedure is in a separately compiled package " ,
  80.      " pragma INLINE used. Compare to P000001 " ) ;
  81.  
  82. end P000004 ;
  83.