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

  1.  
  2. -- PERFORMANCE MEASUREMENT : task entry call and return time, 1 task 1 entry
  3. --                           task in package, no select
  4.  
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  6. package TASK_PACK_2 is
  7.   task T1 is
  8.     entry E1 ;
  9.   end T1 ;
  10. end TASK_PACK_2 ;
  11.  
  12. with TASK_PACK_2 ; use TASK_PACK_2 ;
  13. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  14. with ITERATION ; -- obtain stable measurement
  15. with PIWG_IO ; -- output results
  16.  
  17. procedure T000002 is  -- main procedure to execute
  18.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  19.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  20.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  21.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  22.   STABLE : BOOLEAN ; -- true when measurement stable
  23.  
  24. begin
  25.  
  26.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  27.  
  28.   delay 0.5 ;  -- wait for stable enviornment on some machines
  29.  
  30.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  31.  
  32.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  33.  
  34. --
  35. -- Control loop
  36. --
  37.     ITERATION.START_CONTROL ;
  38.     for J in 1 .. ITERATION_COUNT loop
  39.       GLOBAL := 0 ;
  40.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  41.         GLOBAL := GLOBAL + A_ONE ; 
  42.         REMOTE ;                   
  43.       end loop ;
  44.     end loop ;
  45.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  46.  
  47. --
  48. -- Test loop
  49. --
  50.     ITERATION.START_TEST ;
  51.     for J in 1 .. ITERATION_COUNT loop
  52.       GLOBAL := 0 ;
  53.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  54.         T1.E1 ; -- this has control global increment and call inside
  55.       end loop ;
  56.     end loop ;
  57.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  58.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  59.     exit when STABLE ;
  60.   end loop ;
  61. --
  62.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  63.  
  64. --
  65. -- Printout
  66. --
  67.   PIWG_IO.PIWG_OUTPUT ( "T000002" , "Tasking" ,
  68.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  69.      " Task entry call and return time measured" ,
  70.      " One task active, one entry in task, task in a package " ,
  71.      " no select statement " ) ;
  72.  
  73.   abort T1 ;
  74. end T000002 ;
  75.  
  76. package body TASK_PACK_2 is
  77.   task body T1 is
  78.   begin
  79.     loop
  80.       accept E1 do
  81.         GLOBAL := GLOBAL + A_ONE ;
  82.         REMOTE ;
  83.       end E1 ;
  84.     end loop ;
  85.   end ;
  86. end TASK_PACK_2 ;
  87.