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

  1.  
  2. -- PERFORMANCE MEASUREMENT : Measure simple loop with "exit" 
  3. --                           loop is run 100 times
  4. --                           time reported is for once through
  5.  
  6. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  7. with ITERATION ; -- obtain stable measurement
  8. with PIWG_IO ; -- output results
  9.  
  10. procedure L000003 is  -- main procedure to execute
  11.  
  12.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  13.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  14.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  15.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  16.   STABLE : BOOLEAN ; -- true when measurement stable
  17.   CASE_COUNT : constant := 100 ;
  18.   I : INTEGER ;
  19.  
  20. begin
  21.  
  22.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  23.  
  24.   delay 0.5 ;  -- wait for stable enviornment on some machines
  25.  
  26.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  27.  
  28.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  29.  
  30. --
  31. -- Control loop
  32. --
  33.     ITERATION.START_CONTROL ;
  34.     for J in 1 .. ITERATION_COUNT loop
  35.       GLOBAL := 0 ;
  36.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  37.         GLOBAL := GLOBAL + A_ONE ; -- something to do
  38.         REMOTE ;                   -- that can not be pulled out of loop
  39.         GLOBAL := GLOBAL + A_ONE ; -- repeated here 100 times
  40.         REMOTE ;
  41.         GLOBAL := GLOBAL + A_ONE ;
  42.         REMOTE ;
  43.         GLOBAL := GLOBAL + A_ONE ;
  44.         REMOTE ;
  45.         GLOBAL := GLOBAL + A_ONE ;
  46.         REMOTE ;
  47.         GLOBAL := GLOBAL + A_ONE ;
  48.         REMOTE ;
  49.         GLOBAL := GLOBAL + A_ONE ;
  50.         REMOTE ;
  51.         GLOBAL := GLOBAL + A_ONE ;
  52.         REMOTE ;
  53.         GLOBAL := GLOBAL + A_ONE ;
  54.         REMOTE ;
  55.         GLOBAL := GLOBAL + A_ONE ;
  56.         REMOTE ;
  57.         GLOBAL := GLOBAL + A_ONE ;
  58.         REMOTE ;
  59.         GLOBAL := GLOBAL + A_ONE ;
  60.         REMOTE ;
  61.         GLOBAL := GLOBAL + A_ONE ;
  62.         REMOTE ;
  63.         GLOBAL := GLOBAL + A_ONE ;
  64.         REMOTE ;
  65.         GLOBAL := GLOBAL + A_ONE ;
  66.         REMOTE ;
  67.         GLOBAL := GLOBAL + A_ONE ;
  68.         REMOTE ;
  69.         GLOBAL := GLOBAL + A_ONE ;
  70.         REMOTE ;
  71.         GLOBAL := GLOBAL + A_ONE ;
  72.         REMOTE ;
  73.         GLOBAL := GLOBAL + A_ONE ;
  74.         REMOTE ;
  75.         GLOBAL := GLOBAL + A_ONE ;
  76.         REMOTE ;
  77.         GLOBAL := GLOBAL + A_ONE ;
  78.         REMOTE ;
  79.         GLOBAL := GLOBAL + A_ONE ;
  80.         REMOTE ;
  81.         GLOBAL := GLOBAL + A_ONE ;
  82.         REMOTE ;
  83.         GLOBAL := GLOBAL + A_ONE ;
  84.         REMOTE ;
  85.         GLOBAL := GLOBAL + A_ONE ;
  86.         REMOTE ;
  87.         GLOBAL := GLOBAL + A_ONE ;
  88.         REMOTE ;
  89.         GLOBAL := GLOBAL + A_ONE ;
  90.         REMOTE ;
  91.         GLOBAL := GLOBAL + A_ONE ;
  92.         REMOTE ;
  93.         GLOBAL := GLOBAL + A_ONE ;
  94.         REMOTE ;
  95.         GLOBAL := GLOBAL + A_ONE ;
  96.         REMOTE ;
  97.         GLOBAL := GLOBAL + A_ONE ;
  98.         REMOTE ;
  99.         GLOBAL := GLOBAL + A_ONE ;
  100.         REMOTE ;
  101.         GLOBAL := GLOBAL + A_ONE ;
  102.         REMOTE ;
  103.         GLOBAL := GLOBAL + A_ONE ;
  104.         REMOTE ;
  105.         GLOBAL := GLOBAL + A_ONE ;
  106.         REMOTE ;
  107.         GLOBAL := GLOBAL + A_ONE ;
  108.         REMOTE ;
  109.         GLOBAL := GLOBAL + A_ONE ;
  110.         REMOTE ;
  111.         GLOBAL := GLOBAL + A_ONE ;
  112.         REMOTE ;
  113.         GLOBAL := GLOBAL + A_ONE ;
  114.         REMOTE ;
  115.         GLOBAL := GLOBAL + A_ONE ;
  116.         REMOTE ;
  117.         GLOBAL := GLOBAL + A_ONE ;
  118.         REMOTE ;
  119.         GLOBAL := GLOBAL + A_ONE ;
  120.         REMOTE ;
  121.         GLOBAL := GLOBAL + A_ONE ;
  122.         REMOTE ;
  123.         GLOBAL := GLOBAL + A_ONE ;
  124.         REMOTE ;
  125.         GLOBAL := GLOBAL + A_ONE ;
  126.         REMOTE ;
  127.         GLOBAL := GLOBAL + A_ONE ;
  128.         REMOTE ;
  129.         GLOBAL := GLOBAL + A_ONE ;
  130.         REMOTE ;
  131.         GLOBAL := GLOBAL + A_ONE ;
  132.         REMOTE ;
  133.         GLOBAL := GLOBAL + A_ONE ;
  134.         REMOTE ;
  135.         GLOBAL := GLOBAL + A_ONE ;
  136.         REMOTE ;
  137.         GLOBAL := GLOBAL + A_ONE ;
  138.         REMOTE ;
  139.         GLOBAL := GLOBAL + A_ONE ;
  140.         REMOTE ;
  141.         GLOBAL := GLOBAL + A_ONE ;
  142.         REMOTE ;
  143.         GLOBAL := GLOBAL + A_ONE ;
  144.         REMOTE ;
  145.         GLOBAL := GLOBAL + A_ONE ;
  146.         REMOTE ;
  147.         GLOBAL := GLOBAL + A_ONE ;
  148.         REMOTE ;
  149.         GLOBAL := GLOBAL + A_ONE ;
  150.         REMOTE ;
  151.         GLOBAL := GLOBAL + A_ONE ;
  152.         REMOTE ;
  153.         GLOBAL := GLOBAL + A_ONE ;
  154.         REMOTE ;
  155.         GLOBAL := GLOBAL + A_ONE ;
  156.         REMOTE ;
  157.         GLOBAL := GLOBAL + A_ONE ;
  158.         REMOTE ;
  159.         GLOBAL := GLOBAL + A_ONE ;
  160.         REMOTE ;
  161.         GLOBAL := GLOBAL + A_ONE ;
  162.         REMOTE ;
  163.         GLOBAL := GLOBAL + A_ONE ;
  164.         REMOTE ;
  165.         GLOBAL := GLOBAL + A_ONE ;
  166.         REMOTE ;
  167.         GLOBAL := GLOBAL + A_ONE ;
  168.         REMOTE ;
  169.         GLOBAL := GLOBAL + A_ONE ;
  170.         REMOTE ;
  171.         GLOBAL := GLOBAL + A_ONE ;
  172.         REMOTE ;
  173.         GLOBAL := GLOBAL + A_ONE ;
  174.         REMOTE ;
  175.         GLOBAL := GLOBAL + A_ONE ;
  176.         REMOTE ;
  177.         GLOBAL := GLOBAL + A_ONE ;
  178.         REMOTE ;
  179.         GLOBAL := GLOBAL + A_ONE ;
  180.         REMOTE ;
  181.         GLOBAL := GLOBAL + A_ONE ;
  182.         REMOTE ;
  183.         GLOBAL := GLOBAL + A_ONE ;
  184.         REMOTE ;
  185.         GLOBAL := GLOBAL + A_ONE ;
  186.         REMOTE ;
  187.         GLOBAL := GLOBAL + A_ONE ;
  188.         REMOTE ;
  189.         GLOBAL := GLOBAL + A_ONE ;
  190.         REMOTE ;
  191.         GLOBAL := GLOBAL + A_ONE ;
  192.         REMOTE ;
  193.         GLOBAL := GLOBAL + A_ONE ;
  194.         REMOTE ;
  195.         GLOBAL := GLOBAL + A_ONE ;
  196.         REMOTE ;
  197.         GLOBAL := GLOBAL + A_ONE ;
  198.         REMOTE ;
  199.         GLOBAL := GLOBAL + A_ONE ;
  200.         REMOTE ;
  201.         GLOBAL := GLOBAL + A_ONE ;
  202.         REMOTE ;
  203.         GLOBAL := GLOBAL + A_ONE ;
  204.         REMOTE ;
  205.         GLOBAL := GLOBAL + A_ONE ;
  206.         REMOTE ;
  207.         GLOBAL := GLOBAL + A_ONE ;
  208.         REMOTE ;
  209.         GLOBAL := GLOBAL + A_ONE ;
  210.         REMOTE ;
  211.         GLOBAL := GLOBAL + A_ONE ;
  212.         REMOTE ;
  213.         GLOBAL := GLOBAL + A_ONE ;
  214.         REMOTE ;
  215.         GLOBAL := GLOBAL + A_ONE ;
  216.         REMOTE ;
  217.         GLOBAL := GLOBAL + A_ONE ;
  218.         REMOTE ;
  219.         GLOBAL := GLOBAL + A_ONE ;
  220.         REMOTE ;
  221.         GLOBAL := GLOBAL + A_ONE ;
  222.         REMOTE ;
  223.         GLOBAL := GLOBAL + A_ONE ;
  224.         REMOTE ;
  225.         GLOBAL := GLOBAL + A_ONE ;
  226.         REMOTE ;
  227.         GLOBAL := GLOBAL + A_ONE ;
  228.         REMOTE ;
  229.         GLOBAL := GLOBAL + A_ONE ;
  230.         REMOTE ;
  231.         GLOBAL := GLOBAL + A_ONE ;
  232.         REMOTE ;
  233.         GLOBAL := GLOBAL + A_ONE ;
  234.         REMOTE ;
  235.         GLOBAL := GLOBAL + A_ONE ;
  236.         REMOTE ;
  237.       end loop ;
  238.     end loop ;
  239.     GLOBAL := GLOBAL / CASE_COUNT ;
  240.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  241.  
  242. --
  243. -- Test loop
  244. --
  245.     ITERATION.START_TEST ;
  246.     for J in 1 .. ITERATION_COUNT loop
  247.       GLOBAL := 0 ;
  248.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  249.         I := 1 ;
  250.         loop
  251.           GLOBAL := GLOBAL + A_ONE ; -- same computation as above
  252.           REMOTE ;                   -- now in loop
  253.           I := I + 1 ;
  254.           exit when I > 100 ;
  255.         end loop ;
  256.       end loop ;
  257.     end loop ;
  258.     GLOBAL := GLOBAL / CASE_COUNT ;
  259.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  260.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  261.     exit when STABLE ;
  262.   end loop ;
  263. --
  264.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  265.   CPU_TIME := DURATION ( CPU_TIME / CASE_COUNT ) ;
  266.   WALL_TIME := DURATION ( WALL_TIME / CASE_COUNT ) ;
  267.  
  268. --
  269. -- Printout
  270. --
  271.   PIWG_IO.PIWG_OUTPUT ( "L000003" , "Iteration" ,
  272.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  273.      "Simple ""exit"" loop time " ,
  274.      " loop I:=I+1; exit when I>100; end loop;" ,
  275.      "time reported is for once through loop " ) ;
  276.  
  277. end L000003 ;
  278.