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

  1. -- PERFORMANCE MEASUREMENT : Coding Style Feature
  2. --                           Logical equation vs if test
  3. --                           F000001 and F000002 are a pair
  4.  
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ;
  6. with ITERATION ;
  7. with PIWG_IO ;
  8.  
  9. procedure F000002 is  -- main procedure to execute
  10.  
  11.   CPU_TIME : DURATION ;
  12.   WALL_TIME : DURATION ;
  13.   CHECK_TIMES : constant := 100 ;
  14.   ITERATION_COUNT : INTEGER ;
  15.   ITS_OK : BOOLEAN ;
  16.   FLAG : BOOLEAN ;
  17.   VALUE : INTEGER ;
  18. --
  19.  
  20. begin
  21.  
  22.   VALUE := 50 ;
  23.   FLAG := TRUE ;
  24.  
  25.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  26.  
  27.   delay 0.5 ;  -- wait for stable enviornment on some machines
  28.  
  29.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  30.  
  31.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  32.  
  33. --
  34. -- Control loop
  35. --
  36.     ITERATION.START_CONTROL ;
  37.     for J in 1 .. ITERATION_COUNT loop
  38.       GLOBAL := 0 ;
  39.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  40.         GLOBAL := GLOBAL + A_ONE ;
  41.         REMOTE ;
  42.         FLAG := not FLAG ;
  43.       end loop ;
  44.     end loop ;
  45.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  46.  
  47.     if FLAG then -- be sure FLAG computed
  48.       GLOBAL := 1 ;
  49.       REMOTE ;
  50.     end if ;
  51.  
  52. --
  53. -- Test loop
  54. --
  55.     ITERATION.START_TEST ;
  56.     for J in 1 .. ITERATION_COUNT loop
  57.       GLOBAL := 0 ;
  58.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  59.         GLOBAL := GLOBAL + A_ONE ;
  60.         if VALUE < GLOBAL then -- feature being measured
  61.           FLAG := TRUE ;
  62.         else
  63.           FLAG := FALSE ;
  64.         end if ;
  65. --               FLAG := VALUE < GLOBAL ; -- equivalent computation
  66.         REMOTE ;
  67.         FLAG := not FLAG ;
  68.       end loop ;
  69.     end loop ;
  70.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  71.  
  72.     if FLAG then -- be sure FLAG computed
  73.       GLOBAL := 1 ;
  74.       REMOTE ;
  75.     end if ;
  76.  
  77.     ITERATION.TEST_STABLE ( ITERATION_COUNT , ITS_OK ) ;
  78.     exit when ITS_OK ;
  79.   end loop ;
  80. --
  81.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  82.  
  83. --
  84. -- Printout
  85. --
  86.   PIWG_IO.PIWG_OUTPUT ( "F000002" , "Style" ,
  87.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  88.      " Time to set a boolean flag using an 'if' test" ,
  89.      " a local and a global integer are compared " ,
  90.      " compare this test with F000001" ) ;
  91.  
  92. end F000002 ;
  93.