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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           one "out" parameter
  5.  
  6. package PROC_PACKAGE_6 is
  7.   procedure PROC_0 ( A : out INTEGER ) ;
  8. end PROC_PACKAGE_6 ;
  9.  
  10. with PROC_PACKAGE_6 ; use PROC_PACKAGE_6 ;
  11. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  12. with ITERATION ; -- obtain stable measurement
  13. with PIWG_IO ; -- output results
  14.  
  15. procedure P000006 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.         A := A_ONE ;
  41.         GLOBAL := GLOBAL + A ; 
  42.         REMOTE ;                   
  43.       end loop ;
  44.     end loop ;
  45.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  46.  
  47. --
  48. -- Test loop
  49. --
  50.     ITERATION.START_TEST ;
  51.     for J in 1 .. ITERATION_COUNT loop
  52.       GLOBAL := 0 ;
  53.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  54.         PROC_0 ( A ) ; -- this has REMOTE call inside
  55.         GLOBAL := GLOBAL + A ; 
  56.       end loop ;
  57.     end loop ;
  58.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  59.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  60.     exit when STABLE ;
  61.   end loop ;
  62. --
  63.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  64.  
  65. --
  66. -- Printout
  67. --
  68.   PIWG_IO.PIWG_OUTPUT ( "P000006" , "Procedure" ,
  69.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  70.      " Procedure call and return time measurement" ,
  71.      " The procedure is in a separately compiled package " ,
  72.      " One parameter, out INTEGER " ) ;
  73.  
  74. end P000006 ;
  75.  
  76.  
  77. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  78. package body PROC_PACKAGE_6 is -- compare to P000005
  79.   procedure PROC_0 ( A : out INTEGER ) is
  80.   begin
  81.     A := A_ONE ;
  82.     REMOTE ;
  83.   end ;
  84. end PROC_PACKAGE_6 ;
  85.  
  86.