home *** CD-ROM | disk | FTP | other *** search
/ Programmer's ROM - The Computer Language Library / programmersrom.iso / ada / piwg / p000005.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. --                           one "in" parameter
  5.  
  6. package PROC_PACKAGE_5 is
  7.   procedure PROC_0 ( A : in INTEGER ) ;
  8. end PROC_PACKAGE_5 ;
  9.  
  10. with PROC_PACKAGE_5 ; use PROC_PACKAGE_5 ;
  11. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  12. with ITERATION ; -- obtain stable measurement
  13. with PIWG_IO ; -- output results
  14.  
  15. procedure P000005 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.  
  22. begin
  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.       end loop ;
  42.     end loop ;
  43.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  44.  
  45. --
  46. -- Test loop
  47. --
  48.     ITERATION.START_TEST ;
  49.     for J in 1 .. ITERATION_COUNT loop
  50.       GLOBAL := 0 ;
  51.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  52.         PROC_0 ( A_ONE ) ; -- this has control global increment and call inside
  53.       end loop ;
  54.     end loop ;
  55.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  56.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  57.     exit when STABLE ;
  58.   end loop ;
  59. --
  60.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  61.  
  62. --
  63. -- Printout
  64. --
  65.   PIWG_IO.PIWG_OUTPUT ( "P000005" , "Procedure" ,
  66.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  67.      " Procedure call and return time measurement" ,
  68.      " The procedure is in a separately compiled package " ,
  69.      " One parameter, in INTEGER " ) ;
  70.  
  71. end P000005 ;
  72.  
  73.  
  74. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  75. package body PROC_PACKAGE_5 is -- compare to P000003
  76.   procedure PROC_0 ( A : in INTEGER ) is
  77.   begin
  78.     GLOBAL := GLOBAL + A ;
  79.     REMOTE ;
  80.   end ;
  81. end PROC_PACKAGE_5 ;
  82.  
  83.