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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           twenty discrete "in" parameters
  5.  
  6. package PROC_PACKAGE_11 is
  7.   procedure PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
  8.                      A11,A12,A13,A14,A15,A16,A17,A18,A19,A20 : in INTEGER ) ;
  9. end PROC_PACKAGE_11 ;
  10.  
  11. with PROC_PACKAGE_11 ; use PROC_PACKAGE_11 ;
  12. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  13. with ITERATION ; -- obtain stable measurement
  14. with PIWG_IO ; -- output results
  15.  
  16. procedure P000011 is  -- main procedure to execute
  17.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  18.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  19.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  20.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  21.   STABLE : BOOLEAN ; -- true when measurement stable
  22.   A1 : INTEGER := A_ONE ;
  23.   A2 : INTEGER := A1 + A_ONE ;
  24.   A3 : INTEGER := A2 + A_ONE ;
  25.   A4 : INTEGER := A3 + A_ONE ;
  26.   A5 : INTEGER := A4 + A_ONE ;
  27.   A6 : INTEGER := A5 + A_ONE ;
  28.   A7 : INTEGER := A6 + A_ONE ;
  29.   A8 : INTEGER := A7 + A_ONE ;
  30.   A9 : INTEGER := A8 + A_ONE ;
  31.   A10 : INTEGER := A9 + A_ONE ;
  32.   A11 : INTEGER := A10 + A_ONE ;
  33.   A12 : INTEGER := A11 + A_ONE ;
  34.   A13 : INTEGER := A12 + A_ONE ;
  35.   A14 : INTEGER := A13 + A_ONE ;
  36.   A15 : INTEGER := A14 + A_ONE ;
  37.   A16 : INTEGER := A15 + A_ONE ;
  38.   A17 : INTEGER := A16 + A_ONE ;
  39.   A18 : INTEGER := A17 + A_ONE ;
  40.   A19 : INTEGER := A18 + A_ONE ;
  41.   A20 : INTEGER := A19 + A_ONE ;
  42.  
  43. begin
  44.  
  45.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  46.  
  47.   delay 0.5 ;  -- wait for stable enviornment on some machines
  48.  
  49.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  50.  
  51.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  52.  
  53. --
  54. -- Control loop
  55. --
  56.     ITERATION.START_CONTROL ;
  57.     for J in 1 .. ITERATION_COUNT loop
  58.       GLOBAL := 0 ;
  59.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  60.         GLOBAL := GLOBAL + A1+A2+A3+A4+A5+A6+A7-A8-A9-A10
  61.               +A20-A19-A18+A17+A16-A15-A14+A13-A12+A11+A_ONE ;
  62.         REMOTE ;                   
  63.       end loop ;
  64.     end loop ;
  65.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  66.  
  67. --
  68. -- Test loop
  69. --
  70.     ITERATION.START_TEST ;
  71.     for J in 1 .. ITERATION_COUNT loop
  72.       GLOBAL := 0 ;
  73.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  74.         PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
  75.                  A11,A12,A13,A14,A15,A16,A17,A18,A19,A20 ) ;
  76.         -- this has control global increment and call inside
  77.       end loop ;
  78.     end loop ;
  79.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  80.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  81.     exit when STABLE ;
  82.   end loop ;
  83. --
  84.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  85.  
  86. --
  87. -- Printout
  88. --
  89.   PIWG_IO.PIWG_OUTPUT ( "P000011" , "Procedure" ,
  90.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  91.      " Procedure call and return time measurement" ,
  92.      " Compare to P000005, P000010 " ,
  93.      " 20 parameters, in INTEGER " ) ;
  94.  
  95. end P000011 ;
  96.  
  97.  
  98. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  99. package body PROC_PACKAGE_11 is -- compare to P000005 & 10
  100.   procedure PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
  101.                      A11,A12,A13,A14,A15,A16,A17,A18,A19,A20 : in INTEGER ) is
  102.   begin
  103.     GLOBAL := GLOBAL + A1+A2+A3+A4+A5+A6+A7-A8-A9-A10
  104.               +A20-A19-A18+A17+A16-A15-A14+A13-A12+A11+A_ONE ;
  105.     REMOTE ;
  106.   end ;
  107. end PROC_PACKAGE_11 ;
  108.  
  109.