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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           ten discrete "in" parameters
  5.  
  6. package PROC_PACKAGE_10 is
  7.   procedure PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 : in INTEGER ) ;
  8. end PROC_PACKAGE_10 ;
  9.  
  10. with PROC_PACKAGE_10 ; use PROC_PACKAGE_10 ;
  11. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  12. with ITERATION ; -- obtain stable measurement
  13. with PIWG_IO ; -- output results
  14.  
  15. procedure P000010 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.   A1 : INTEGER := A_ONE ;
  22.   A2 : INTEGER := A1 + A_ONE ;
  23.   A3 : INTEGER := A2 + A_ONE ;
  24.   A4 : INTEGER := A3 + A_ONE ;
  25.   A5 : INTEGER := A4 + A_ONE ;
  26.   A6 : INTEGER := A5 + A_ONE ;
  27.   A7 : INTEGER := A6 + A_ONE ;
  28.   A8 : INTEGER := A7 + A_ONE ;
  29.   A9 : INTEGER := A8 + A_ONE ;
  30.   A10 : INTEGER := A9 + A_ONE ;
  31.  
  32. begin
  33.  
  34.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  35.  
  36.   delay 0.5 ;  -- wait for stable enviornment on some machines
  37.  
  38.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  39.  
  40.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  41.  
  42. --
  43. -- Control loop
  44. --
  45.     ITERATION.START_CONTROL ;
  46.     for J in 1 .. ITERATION_COUNT loop
  47.       GLOBAL := 0 ;
  48.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  49.         GLOBAL := GLOBAL + A1+A2+A3+A4+A5+A6+A7-A8-A9-A10 ;
  50.         REMOTE ;                   
  51.       end loop ;
  52.     end loop ;
  53.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  54.  
  55. --
  56. -- Test loop
  57. --
  58.     ITERATION.START_TEST ;
  59.     for J in 1 .. ITERATION_COUNT loop
  60.       GLOBAL := 0 ;
  61.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  62.         PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 ) ;
  63.         -- 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 ( "P000010" , "Procedure" ,
  77.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  78.      " Procedure call and return time measurement" ,
  79.      " Compare to P000005 " ,
  80.      " 10 parameters, in INTEGER " ) ;
  81.  
  82. end P000010 ;
  83.  
  84.  
  85. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  86. package body PROC_PACKAGE_10 is -- compare to P000005
  87.   procedure PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10 : in INTEGER ) is
  88.   begin
  89.     GLOBAL := GLOBAL + A1+A2+A3+A4+A5+A6+A7-A8-A9-A10 ;
  90.     REMOTE ;
  91.   end ;
  92. end PROC_PACKAGE_10 ;
  93.  
  94.