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

  1.  
  2. -- PERFORMANCE MEASUREMENT : function PUT timing
  3.  
  4. with TEXT_IO ; use TEXT_IO ;
  5. with REMOTE_GLOBAL ; use REMOTE_GLOBAL ; -- control optimization
  6. with ITERATION ; -- obtain stable measurement
  7. with PIWG_IO ; -- output results
  8.  
  9. procedure G000004 is  -- main procedure to execute
  10.   CPU_TIME : DURATION ; -- CPU time for one feature execution
  11.   WALL_TIME : DURATION ; -- WALL time for one feature execution
  12.   CHECK_TIMES : constant := 100 ; -- inside loop count and check
  13.   ITERATION_COUNT : INTEGER ; -- set and varied by ITERATION package
  14.   STABLE : BOOLEAN ; -- true when measurement stable
  15.   SCRATCH_FILE : FILE_TYPE ;
  16.   SCRATCH_STRING : STRING ( 1..20 ) := "abcdefghijklmnopqrst";
  17.   SCRATCH_LENGTH : NATURAL ;
  18.   SCRATCH_CHAR : CHARACTER := 'a';
  19. --
  20.  
  21. begin
  22. --
  23. --  Build file for "PUT" test
  24. --
  25.    CREATE ( SCRATCH_FILE , OUT_FILE , "SCRATCH4" ) ;
  26.  
  27.   ITERATION.START_CONTROL ;  -- dummy to bring in pages on some machines
  28.  
  29.   delay 0.5 ;  -- wait for stable enviornment on some machines
  30.  
  31.   ITERATION.INITIALIZE ( ITERATION_COUNT ) ;
  32.  
  33.   loop  -- until stable measurement, ITERATION_COUNT increases each time
  34.  
  35. --
  36. -- Control loop
  37. --
  38.     ITERATION.START_CONTROL ;
  39.     for J in 1 .. ITERATION_COUNT loop
  40.       GLOBAL := 0 ;
  41.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  42.         GLOBAL := GLOBAL + A_ONE ; 
  43.         REMOTE ;                   
  44.         for I in 1..20 loop
  45. --          PUT ( SCRATCH_FILE , SCRATCH_CHAR ) ; -- measured
  46.           SCRATCH_STRING ( I ) := SCRATCH_CHAR ;
  47.         end loop ;
  48.       end loop ;
  49.       RESET ( SCRATCH_FILE ) ;
  50.     end loop ;
  51.     ITERATION.STOP_CONTROL ( GLOBAL , CHECK_TIMES ) ;
  52.  
  53.  
  54. --
  55. -- Test loop
  56. --
  57. -- establish the time for the PUT pocdedure on 20 character strings
  58.  
  59.  
  60.     ITERATION.START_TEST ;
  61.     for J in 1 .. ITERATION_COUNT loop
  62.       GLOBAL := 0 ;
  63.       for INSIDE_LOOP in 1 .. CHECK_TIMES loop
  64.         GLOBAL := GLOBAL + A_ONE ;
  65.         REMOTE ;
  66.         for I in 1..20 loop
  67.           PUT ( SCRATCH_FILE , SCRATCH_CHAR ) ;
  68.           SCRATCH_STRING ( I ) := SCRATCH_CHAR ;
  69.         end loop ;
  70.       end loop ;
  71.       RESET ( SCRATCH_FILE ) ;
  72.     end loop ;
  73.     ITERATION.STOP_TEST ( GLOBAL , CHECK_TIMES ) ;
  74.     ITERATION.TEST_STABLE ( ITERATION_COUNT , STABLE ) ;
  75.     exit when STABLE ;
  76.   end loop ;
  77. --
  78.   ITERATION.FEATURE_TIMES ( CPU_TIME , WALL_TIME ) ;
  79.  
  80.   CLOSE ( SCRATCH_FILE ) ;
  81. --
  82. -- Printout
  83. --
  84.   PIWG_IO.PIWG_OUTPUT ( "G000004" , "Input/Output" ,
  85.                         CPU_TIME , WALL_TIME , ITERATION_COUNT ,
  86.      " TEXT_IO.PUT 20 times with one character, time measurement" ,
  87.      " a scratch file is written, reset and rewritten " ,
  88.      " compare, approximately, to G000003" ) ;
  89. end G000004 ;
  90.