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

  1.  
  2. -- PERFORMANCE MEASUREMENT : Minimum entry call and return time
  3. --                           task inside procedure
  4. --                           1 task 1 entry
  5. --                           no select, do..end
  6.  
  7. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  8. with ITERATION ; -- obtain stable measurement
  9. with PIWG_IO ; -- output results
  10.  
  11. procedure T000001 is  -- main procedure to execute
  12.  
  13.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  14.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  15.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  16.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  17.   STABLE : BOOLEAN ; -- true when measurement stable
  18.  
  19. --
  20.   task T1 is
  21.     entry E1 ;
  22.   end T1 ;
  23.  
  24.   task body T1 is
  25.   begin
  26.     loop
  27.       accept E1 do
  28.         GLOBAL := GLOBAL + A_ONE ;
  29.         REMOTE ;
  30.       end E1 ;
  31.     end loop ;
  32.   end ;
  33.  
  34. begin
  35.  
  36.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  37.  
  38.   delay 00.5 ;  -- wait for stable enviornment on some machines
  39.  
  40.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  41.  
  42.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  43.  
  44. --
  45. -- Control loop
  46. --
  47.     ITERATION.START_CONTROL ;
  48.     for J in 1 .. ITERATION_COUNT loop
  49.       GLOBAL := 0 ;
  50.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  51.         GLOBAL := GLOBAL + A_ONE ; 
  52.         REMOTE ;                   
  53.       end loop ;
  54.     end loop ;
  55.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  56.  
  57. --
  58. -- Test loop
  59. --
  60.     ITERATION.START_TEST ;
  61.     for J in 1 .. ITERATION_COUNT loop
  62.       GLOBAL := 0 ;
  63.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  64.         T1.E1 ; -- 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 ( "T000001" , "Tasking" ,
  78.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  79.      " Minimum rendezvous, entry call and return time " ,
  80.      " 1 task 1 entry , task inside procedure " ,
  81.      " no select " ) ;
  82.  
  83.   abort T1 ;
  84.  
  85. end T000001 ;
  86.