home *** CD-ROM | disk | FTP | other *** search
- -- PERFORMANCE MEASUREMENT : active entry call and return time
- -- 10 tasks 1 entry each
- -- no select statement
-
- with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
- package TASK_PACK_5 is
- task T1 is
- entry E1 ;
- end T1 ;
- task T2 is
- entry E2 ;
- end T2 ;
- task T3 is
- entry E3 ;
- end T3 ;
- task T4 is
- entry E4 ;
- end T4 ;
- task T5 is
- entry E5 ;
- end T5 ;
- task T6 is
- entry E6 ;
- end T6 ;
- task T7 is
- entry E7 ;
- end T7 ;
- task T8 is
- entry E8 ;
- end T8 ;
- task T9 is
- entry E9 ;
- end T9 ;
- task T10 is
- entry E10 ;
- end T10 ;
- end TASK_PACK_5 ;
-
- with TASK_PACK_5 ; use TASK_PACK_5 ;
- with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
- with ITERATION ; -- obtain stable measurement
- with PIWG_IO ; -- output results
-
- procedure T000005 is -- main procedure to execute
- CPU_TIME : DURATION ; -- CPU time for one feature execution
- WALL_TIME : DURATION ; -- WALL time for one feature execution
- CHECK_TIMES : constant := 100 ; -- inside loop count and check
- ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
- STABLE : BOOLEAN ; -- true when measurement stable
- CASE_COUNT : constant := 10 ;
-
- begin
-
- ITERATION.START_CONTROL ; -- dummy to bring in pages on some machines
-
- delay 0.5 ; -- wait for stable enviornment on some machines
-
- ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
-
- loop -- until stable measurement, ITERATION_COUNT increases each time
-
- --
- -- Control loop
- --
- ITERATION.START_CONTROL ;
- for J in 1 .. ITERATION_COUNT loop
- GLOBAL := 0 ;
- for INSIDE_LOOP in 1 .. INTEGER ( CHECK_TIMES * CASE_COUNT ) loop
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end loop ;
- end loop ;
- ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
-
- --
- -- Test loop
- --
- ITERATION.START_TEST ;
- for J in 1 .. ITERATION_COUNT loop
- GLOBAL := 0 ;
- for INSIDE_LOOP in 1 .. CHECK_TIMES loop
- -- each entry has control global increment and call inside
- T5.E5 ;
- T7.E7 ;
- T2.E2 ;
- T1.E1 ;
- T10.E10 ;
- T3.E3 ;
- T9.E9 ;
- T8.E8 ;
- T4.E4 ;
- T6.E6 ;
- end loop ;
- end loop ;
- ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES * CASE_COUNT ) ;
- ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
- exit when STABLE ;
- end loop ;
- --
- ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
-
- --
- -- Printout
- --
- PIWG_IO.PIWG_OUTPUT ( "T000005" , "Tasking" ,
- CPU_TIME , WALL_TIME , ITERATION_COUNT ,
- " Task entry call and return time measured" ,
- " Ten tasks active, one entry per task, tasks in a package " ,
- " no select statement " ) ;
-
- abort T1 ;
- abort T2 ;
- abort T3 ;
- abort T4 ;
- abort T5 ;
- abort T6 ;
- abort T7 ;
- abort T8 ;
- abort T9 ;
- abort T10 ;
- end T000005 ;
-
- package body TASK_PACK_5 is
- task body T1 is
- begin
- loop
- accept E1 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E1;
- end loop ;
- end T1 ;
-
- task body T2 is
- begin
- loop
- accept E2 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E2;
- end loop ;
- end T2 ;
-
- task body T3 is
- begin
- loop
- accept E3 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E3;
- end loop ;
- end T3 ;
-
- task body T4 is
- begin
- loop
- accept E4 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E4;
- end loop ;
- end T4 ;
-
- task body T5 is
- begin
- loop
- accept E5 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E5;
- end loop ;
- end T5 ;
-
- task body T6 is
- begin
- loop
- accept E6 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E6;
- end loop ;
- end T6 ;
-
- task body T7 is
- begin
- loop
- accept E7 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E7;
- end loop ;
- end T7 ;
-
- task body T8 is
- begin
- loop
- accept E8 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E8;
- end loop ;
- end T8 ;
-
- task body T9 is
- begin
- loop
- accept E9 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E9;
- end loop ;
- end T9 ;
-
- task body T10 is
- begin
- loop
- accept E10 do
- GLOBAL := GLOBAL + A_ONE ;
- REMOTE ;
- end E10;
- end loop ;
- end T10 ;
-
- end TASK_PACK_5 ;
-