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

  1. -- PERFORMANCE MEASUREMENT : tasks entry call and return time
  2. --                           1 task 10 entries
  3. --                           one select statement
  4.  
  5. package TASK_PACK_6 is
  6.   task T1 is
  7.     entry E1 ;
  8.     entry E2 ;
  9.     entry E3 ;
  10.     entry E4 ;
  11.     entry E5 ;
  12.     entry E6 ;
  13.     entry E7 ;
  14.     entry E8 ;
  15.     entry E9 ;
  16.     entry E10 ;
  17.   end T1 ;
  18. end TASK_PACK_6 ;
  19.  
  20. with TASK_PACK_6 ; use TASK_PACK_6 ;
  21. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  22. with ITERATION ; -- obtain stable measurement
  23. with PIWG_IO ; -- output results
  24.  
  25.  
  26. procedure T000006 is  -- main procedure to execute
  27.  
  28.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  29.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  30.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  31.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  32.   STABLE : BOOLEAN ; -- true when measurement stable
  33.   CASE_COUNT : constant := 10 ;
  34.  
  35. begin
  36.  
  37.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  38.  
  39.   delay 0.5 ;  -- wait for stable enviornment on some machines
  40.  
  41.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  42.  
  43.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  44.  
  45. --
  46. -- Control loop
  47. --
  48.     ITERATION.START_CONTROL ;
  49.     for J in 1 .. ITERATION_COUNT loop
  50.       GLOBAL := 0 ;
  51.       for INSIDE_LOOP in 1 .. INTEGER ( CHECK_TIMES * CASE_COUNT ) loop
  52.         GLOBAL := GLOBAL + A_ONE ; 
  53.         REMOTE ;                   
  54.       end loop ;
  55.     end loop ;
  56.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
  57.  
  58. --
  59. -- Test loop
  60. --
  61.     ITERATION.START_TEST ;
  62.     for J in 1 .. ITERATION_COUNT loop
  63.       GLOBAL := 0 ;
  64.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  65.         T1.E5 ;
  66.         T1.E7 ;
  67.         T1.E2 ;
  68.         T1.E1 ;
  69.         T1.E10 ;
  70.         T1.E3 ;
  71.         T1.E9 ;
  72.         T1.E8 ;
  73.         T1.E4 ;
  74.         T1.E6 ;
  75.       end loop ;
  76.     end loop ;
  77.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
  78.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  79.     exit when STABLE ;
  80.   end loop ;
  81. --
  82.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  83.  
  84. --
  85. -- Printout
  86. --
  87.   PIWG_IO.PIWG_OUTPUT ( "T000006" , "TASKING" ,
  88.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  89.      " Task entry call and return time measurement" ,
  90.      " One task with ten entries , task in a package " ,
  91.      " one select statement, compare to T000005 " ) ;
  92.  
  93.   abort T1 ;
  94.  
  95. end T000006 ;
  96.  
  97. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  98.  
  99. package body TASK_PACK_6 is
  100.   task body T1 is
  101.   begin
  102.     loop
  103.       select
  104.         accept E1 do
  105.            GLOBAL := GLOBAL + A_ONE ;
  106.            REMOTE ;
  107.         end E1;
  108.       or
  109.         accept E2 do
  110.            GLOBAL := GLOBAL + A_ONE ;
  111.            REMOTE ;
  112.         end E2;
  113.       or
  114.         accept E3 do
  115.            GLOBAL := GLOBAL + A_ONE ;
  116.            REMOTE ;
  117.         end E3;
  118.       or
  119.         accept E4 do
  120.            GLOBAL := GLOBAL + A_ONE ;
  121.            REMOTE ;
  122.         end E4;
  123.       or
  124.         accept E5 do
  125.            GLOBAL := GLOBAL + A_ONE ;
  126.            REMOTE ;
  127.         end E5;
  128.       or
  129.         accept E6 do
  130.            GLOBAL := GLOBAL + A_ONE ;
  131.            REMOTE ;
  132.         end E6;
  133.       or
  134.         accept E7 do
  135.            GLOBAL := GLOBAL + A_ONE ;
  136.            REMOTE ;
  137.         end E7;
  138.       or
  139.         accept E8 do
  140.            GLOBAL := GLOBAL + A_ONE ;
  141.            REMOTE ;
  142.         end E8;
  143.       or
  144.         accept E9 do
  145.            GLOBAL := GLOBAL + A_ONE ;
  146.            REMOTE ;
  147.         end E9;
  148.       or
  149.         accept E10 do
  150.            GLOBAL := GLOBAL + A_ONE ;
  151.            REMOTE ;
  152.         end E10;
  153.       or
  154.         terminate ;
  155.       end select ;
  156.     end loop ;
  157.   end T1 ;
  158.  
  159. end TASK_PACK_6 ;
  160.