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

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