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

  1.  
  2. -- PERFORMANCE MEASUREMENT : Elaboration, allocation and freeing of
  3. --                           a dynamic array initialized with others
  4.  
  5. package DYNAMIC_ARRAY_PACKAGE_2 is
  6.   DYNAMIC_SIZE : INTEGER ;
  7.   type DYNAMIC_ARRAY is array ( INTEGER range <> ) of INTEGER ;
  8.   LOCAL_ARRAY : DYNAMIC_ARRAY ( 1..1000 ) := (OTHERS=>1);
  9.   procedure PROC_CONTROL ;
  10.   procedure PROC_TEST ;
  11. end DYNAMIC_ARRAY_PACKAGE_2 ;
  12.  
  13. with DYNAMIC_ARRAY_PACKAGE_2 ; use DYNAMIC_ARRAY_PACKAGE_2 ;
  14. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  15. with ITERATION ; -- obtain stable measurement
  16. with PIWG_IO ; -- output results
  17.  
  18. procedure D000002 is  -- main procedure to execute
  19.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  20.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  21.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  22.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  23.   STABLE : BOOLEAN ; -- true when measurement stable
  24.  
  25. begin
  26.  
  27.   DYNAMIC_SIZE := 1000 ;
  28.  
  29.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  30.  
  31.   delay 0.5 ;  -- wait for stable enviornment on some machines
  32.  
  33.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  34.  
  35.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  36.  
  37. --
  38. -- Control loop
  39. --
  40.     ITERATION.START_CONTROL ;
  41.     for J in 1 .. ITERATION_COUNT loop
  42.       GLOBAL := 0 ;
  43.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  44.         PROC_CONTROL ; -- control call
  45.       end loop ;
  46.     end loop ;
  47.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  48.  
  49. --
  50. -- Test loop
  51. --
  52.  
  53.     ITERATION.START_TEST ;
  54.     for J in 1 .. ITERATION_COUNT loop
  55.       GLOBAL := 0 ;
  56.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  57.         PROC_TEST ; -- this has control global increment and call inside
  58.       end loop ;
  59.     end loop ;
  60.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  61.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  62.     exit when STABLE ;
  63.   end loop ;
  64. --
  65.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  66.  
  67. --
  68. -- Printout
  69. --
  70.   PIWG_IO.PIWG_OUTPUT ( "D000002" , "Allocation" ,
  71.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  72.     " Dynamic array elaboration and initialization time measurement " ,
  73.     " allocation, initialization, use and deallocation " ,
  74.     " 1000 integers initialized by  others=>1 " ) ;
  75. end D000002 ;
  76.  
  77. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  78. package body DYNAMIC_ARRAY_PACKAGE_2 is
  79.  
  80.   procedure PROC_CONTROL is
  81.   begin
  82.     GLOBAL := GLOBAL + A_ONE ;
  83.     LOCAL_ARRAY ( GLOBAL ) := GLOBAL ;
  84.     REMOTE ;
  85.     GLOBAL := LOCAL_ARRAY ( GLOBAL ) ;
  86.   end ;
  87.  
  88.   procedure PROC_TEST is
  89.     PROC_ARRAY : DYNAMIC_ARRAY ( 1..DYNAMIC_SIZE ) := ( others => 1 ) ;
  90.   begin
  91.     GLOBAL := GLOBAL + A_ONE ;
  92.     PROC_ARRAY ( GLOBAL ) := GLOBAL ;
  93.     REMOTE ;
  94.     GLOBAL := PROC_ARRAY ( GLOBAL ) ;
  95.   end PROC_TEST ;
  96.  
  97. end DYNAMIC_ARRAY_PACKAGE_2 ;
  98.