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

  1.  
  2. -- PERFORMANCE MEASUREMENT : procedure call and return time
  3. --                           procedure in package
  4. --                           twenty composite "in" parameters
  5.  
  6. package PROC_PACKAGE_13 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,
  14.                      A11,A12,A13,A14,A15,A16,A17,A18,A19,A20 : in MY_RECORD ) ;
  15. end PROC_PACKAGE_13 ;
  16.  
  17. with PROC_PACKAGE_13 ; use PROC_PACKAGE_13 ;
  18. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  19. with ITERATION ; -- obtain stable measurement
  20. with PIWG_IO ; -- output results
  21.  
  22. procedure P000013 is  -- main procedure to execute
  23.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  24.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  25.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  26.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  27.   STABLE : BOOLEAN ; -- true when measurement stable
  28.   A : MY_RECORD := ( A_ONE , A_ONE + A_ONE , A_ONE + A_ONE + A_ONE ) ;
  29.  
  30. begin
  31.  
  32.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  33.  
  34.   delay 0.5 ;  -- wait for stable enviornment on some machines
  35.  
  36.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  37.  
  38.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  39.  
  40. --
  41. -- Control loop
  42. --
  43.     ITERATION.START_CONTROL ;
  44.     for J in 1 .. ITERATION_COUNT loop
  45.       GLOBAL := 0 ;
  46.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  47.         GLOBAL := GLOBAL + A.R1+A.R2+A.R3-A.R1-A.R2-A.R3+A.R1+A.R2
  48.                       -A.R3+A.R1+A.R1+A.R2-A.R3+A.R1+A.R2-A.R3
  49.                       +A.R1+A.R2-A.R3-A.R1+A_ONE ;
  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 ( A, A, A, A, A, A, A, A, A, A,
  63.                  A, A, A, A, A, A, A, A, A, A ) ;
  64.         -- this has control global increment and call inside
  65.       end loop ;
  66.     end loop ;
  67.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  68.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  69.     exit when STABLE ;
  70.   end loop ;
  71. --
  72.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  73.  
  74. --
  75. -- Printout
  76. --
  77.   PIWG_IO.PIWG_OUTPUT ( "P000013" , "Procedure" ,
  78.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  79.      " Procedure call and return time measurement" ,
  80.      " twenty composite 'in' parameters " ,
  81.      " The package body is compiled after the spec is used" ) ;
  82.  
  83. end P000013 ;
  84.  
  85.  
  86. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  87. package body PROC_PACKAGE_13 is -- compare to P00000
  88.   procedure PROC_0 ( A1, A2, A3, A4, A5, A6, A7, A8, A9, A10,
  89.                      A11,A12,A13,A14,A15,A16,A17,A18,A19,A20 : in MY_RECORD ) is
  90.   begin
  91.     GLOBAL := GLOBAL + A1.R1+A2.R2+A3.R3-A4.R1-A5.R2-A6.R3+A7.R1+A8.R2
  92.                       -A9.R3+A10.R1+A11.R1+A12.R2-A13.R3+A14.R1+A15.R2-A16.R3
  93.                       +A17.R1+A18.R2-A19.R3-A20.R1+A_ONE ;
  94.     REMOTE ;
  95.   end ;
  96. end PROC_PACKAGE_13 ;
  97.  
  98.