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

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