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

  1. -- PERFORMANCE MEASUREMENT :  active entry call and return time
  2. --                            10 tasks 1 entry each
  3. --                            no select statement
  4.  
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  6. package TASK_PACK_5 is
  7.   task T1 is
  8.     entry E1 ;
  9.   end T1 ;
  10.   task T2 is
  11.     entry E2 ;
  12.   end T2 ;
  13.   task T3 is
  14.     entry E3 ;
  15.   end T3 ;
  16.   task T4 is
  17.     entry E4 ;
  18.   end T4 ;
  19.   task T5 is
  20.     entry E5 ;
  21.   end T5 ;
  22.   task T6 is
  23.     entry E6 ;
  24.   end T6 ;
  25.   task T7 is
  26.     entry E7 ;
  27.   end T7 ;
  28.   task T8 is
  29.     entry E8 ;
  30.   end T8 ;
  31.   task T9 is
  32.     entry E9 ;
  33.   end T9 ;
  34.   task T10 is
  35.     entry E10 ;
  36.   end T10 ;
  37. end TASK_PACK_5 ;
  38.  
  39. with TASK_PACK_5 ; use TASK_PACK_5 ;
  40. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  41. with ITERATION ; -- obtain stable measurement
  42. with PIWG_IO ; -- output results
  43.  
  44. procedure T000005 is  -- main procedure to execute
  45.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  46.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  47.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  48.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  49.   STABLE : BOOLEAN ; -- true when measurement stable
  50.   CASE_COUNT : constant := 10 ;
  51.  
  52. begin
  53.  
  54.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  55.  
  56.   delay 0.5 ;  -- wait for stable enviornment on some machines
  57.  
  58.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  59.  
  60.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  61.  
  62. --
  63. -- Control loop
  64. --
  65.     ITERATION.START_CONTROL ;
  66.     for J in 1 .. ITERATION_COUNT loop
  67.       GLOBAL := 0 ;
  68.       for INSIDE_LOOP in 1 .. INTEGER ( CHECK_TIMES * CASE_COUNT ) loop
  69.         GLOBAL := GLOBAL + A_ONE ; 
  70.         REMOTE ;                   
  71.       end loop ;
  72.     end loop ;
  73.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
  74.  
  75. --
  76. -- Test loop
  77. --
  78.     ITERATION.START_TEST ;
  79.     for J in 1 .. ITERATION_COUNT loop
  80.       GLOBAL := 0 ;
  81.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  82.  --      each entry has control global increment and call inside
  83.         T5.E5 ;
  84.         T7.E7 ;
  85.         T2.E2 ;
  86.         T1.E1 ;
  87.         T10.E10 ;
  88.         T3.E3 ;
  89.         T9.E9 ;
  90.         T8.E8 ;
  91.         T4.E4 ;
  92.         T6.E6 ;
  93.       end loop ;
  94.     end loop ;
  95.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
  96.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  97.     exit when STABLE ;
  98.   end loop ;
  99. --
  100.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  101.  
  102. --
  103. -- Printout
  104. --
  105.   PIWG_IO.PIWG_OUTPUT ( "T000005" , "Tasking" ,
  106.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  107.      " Task entry call and return time measured" ,
  108.      " Ten tasks active, one entry per task, tasks in a package " ,
  109.      " no select statement " ) ;
  110.  
  111.   abort T1 ;
  112.   abort T2 ;
  113.   abort T3 ;
  114.   abort T4 ;
  115.   abort T5 ;
  116.   abort T6 ;
  117.   abort T7 ;
  118.   abort T8 ;
  119.   abort T9 ;
  120.   abort T10 ;
  121. end T000005 ;
  122.  
  123. package body TASK_PACK_5 is
  124.   task body T1 is
  125.   begin
  126.     loop
  127.       accept E1 do
  128.          GLOBAL := GLOBAL + A_ONE ;
  129.          REMOTE ;
  130.       end E1;
  131.     end loop ;
  132.   end T1 ;
  133.  
  134.   task body T2 is
  135.   begin
  136.     loop
  137.       accept E2 do
  138.          GLOBAL := GLOBAL + A_ONE ;
  139.          REMOTE ;
  140.       end E2;
  141.     end loop ;
  142.   end T2 ;
  143.  
  144.   task body T3 is
  145.   begin
  146.     loop
  147.       accept E3 do
  148.          GLOBAL := GLOBAL + A_ONE ;
  149.          REMOTE ;
  150.       end E3;
  151.     end loop ;
  152.   end T3 ;
  153.  
  154.   task body T4 is
  155.   begin
  156.     loop
  157.       accept E4 do
  158.          GLOBAL := GLOBAL + A_ONE ;
  159.          REMOTE ;
  160.       end E4;
  161.     end loop ;
  162.   end T4 ;
  163.  
  164.   task body T5 is
  165.   begin
  166.     loop
  167.       accept E5 do
  168.          GLOBAL := GLOBAL + A_ONE ;
  169.          REMOTE ;
  170.       end E5;
  171.     end loop ;
  172.   end T5 ;
  173.  
  174.   task body T6 is
  175.   begin
  176.     loop
  177.       accept E6 do
  178.          GLOBAL := GLOBAL + A_ONE ;
  179.          REMOTE ;
  180.       end E6;
  181.     end loop ;
  182.   end T6 ;
  183.  
  184.   task body T7 is
  185.   begin
  186.     loop
  187.       accept E7 do
  188.          GLOBAL := GLOBAL + A_ONE ;
  189.          REMOTE ;
  190.       end E7;
  191.     end loop ;
  192.   end T7 ;
  193.  
  194.   task body T8 is
  195.   begin
  196.     loop
  197.       accept E8 do
  198.          GLOBAL := GLOBAL + A_ONE ;
  199.          REMOTE ;
  200.       end E8;
  201.     end loop ;
  202.   end T8 ;
  203.  
  204.   task body T9 is
  205.   begin
  206.     loop
  207.       accept E9 do
  208.          GLOBAL := GLOBAL + A_ONE ;
  209.          REMOTE ;
  210.       end E9;
  211.     end loop ;
  212.   end T9 ;
  213.  
  214.   task body T10 is
  215.   begin
  216.     loop
  217.       accept E10 do
  218.          GLOBAL := GLOBAL + A_ONE ;
  219.          REMOTE ;
  220.       end E10;
  221.     end loop ;
  222.   end T10 ;
  223.  
  224. end TASK_PACK_5 ;
  225.