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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           one "in out" parameter
  5.  
  6. package PROC_PACKAGE_7 is
  7.   procedure PROC_0 ( A : in out INTEGER ) ;
  8. end PROC_PACKAGE_7 ;
  9.  
  10. with PROC_PACKAGE_7 ; use PROC_PACKAGE_7 ;
  11. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  12. with ITERATION ; -- obtain stable measurement
  13. with PIWG_IO ; -- output results
  14.  
  15. procedure P000007 is  -- main procedure to execute
  16.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  17.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  18.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  19.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  20.   STABLE : BOOLEAN ; -- true when measurement stable
  21.   A : INTEGER ;
  22.  
  23. begin
  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.     end loop ;
  44.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  45.  
  46. --
  47. -- Test loop
  48. --
  49.     ITERATION.START_TEST ;
  50.     for J in 1 .. ITERATION_COUNT loop
  51.       GLOBAL := 0 ;
  52.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  53.         PROC_0 ( GLOBAL ) ; -- this has control global increment and call inside
  54.       end loop ;
  55.     end loop ;
  56.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  57.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  58.     exit when STABLE ;
  59.   end loop ;
  60. --
  61.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  62.  
  63. --
  64. -- Printout
  65. --
  66.   PIWG_IO.PIWG_OUTPUT ( "P000007" , "Procedure" ,
  67.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  68.      " Procedure call and return time measurement" ,
  69.      " The procedure is in a separately compiled package " ,
  70.      " One parameter, in out INTEGER " ) ;
  71.  
  72. end P000007 ;
  73.  
  74.  
  75. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  76. package body PROC_PACKAGE_7 is -- compare to P000005 & 6
  77.   procedure PROC_0 ( A : in out INTEGER ) is
  78.   begin
  79.     A := A + A_ONE ;
  80.     REMOTE ;
  81.   end ;
  82. end PROC_PACKAGE_7 ;
  83.  
  84.