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

  1. -- This is the report generator to execute if A000043.ADA was
  2. -- used for PIWG_IO
  3.  
  4. with TEXT_IO ; use TEXT_IO ;
  5. with DIRECT_IO ;
  6. with DURATION_IO ; use DURATION_IO ;
  7.  
  8. procedure A000049 is
  9.   subtype NAME_STRING is STRING ( 1 .. 12 ) ;
  10.   subtype LINE_STRING is STRING ( 1 .. 80 ) ;
  11.   USED_NAME : NAME_STRING := "************" ;
  12.  
  13. --
  14.   type IO_RECORD is
  15.     record
  16.       TESTNAME : NAME_STRING ;
  17.       CLASSNAME : NAME_STRING ;
  18.       CPU_DELTA : DURATION ;
  19.       WALL_DELTA : DURATION ;
  20.       NUM_OF_ITERATIONS : INTEGER ;
  21.       TEST_DESC_1 : LINE_STRING ;
  22.       TEST_DESC_2 : LINE_STRING ;
  23.       TEST_DESC_3 : LINE_STRING ;
  24.     end record ;
  25.  
  26. --
  27.   DATA_REC : IO_RECORD ;
  28.  
  29.  
  30.   package PIWG_DIRECT_IO is new DIRECT_IO ( IO_RECORD ) ;
  31.   use PIWG_DIRECT_IO ;
  32.  
  33. --
  34.   type DATA_ARRAY is array ( PIWG_DIRECT_IO.COUNT range <> ) of IO_RECORD ;
  35.  
  36. --
  37.   DISK_DATA : DATA_ARRAY ( 1 .. 2000 ) ;
  38.   CPU_TIMES : array ( 1 .. 20 ) of DURATION ;
  39.   WALL_TIMES : array ( 1 .. 20 ) of DURATION ;
  40.   COUNT_TIMES : POSITIVE ;
  41.  
  42. --
  43.   DISK_FILE : PIWG_DIRECT_IO.FILE_TYPE ;
  44.   RECORD_INDEX : PIWG_DIRECT_IO.COUNT ;
  45.   RECORD_INDEX_FIRST : PIWG_DIRECT_IO.COUNT ;
  46.   RECORD_INDEX_LAST : PIWG_DIRECT_IO.COUNT ;
  47.   RECORD_SEARCH : PIWG_DIRECT_IO.COUNT ;
  48.  
  49. --
  50.   TESTNAME : NAME_STRING ;
  51.   CLASSNAME : NAME_STRING ;
  52.   CPU_DELTA : DURATION ;
  53.   WALL_DELTA : DURATION ;
  54.   NUM_OF_ITERATIONS : INTEGER ;
  55.   TEST_DESC_1 : LINE_STRING ;
  56.   TEST_DESC_2 : LINE_STRING ;
  57.   TEST_DESC_3 : LINE_STRING ;
  58.  
  59. --
  60.  
  61.   procedure OPEN_INPUT is
  62.   begin
  63.     begin
  64.       OPEN ( DISK_FILE , IN_FILE , "PIWGRES" ) ;
  65.     exception
  66.       when others =>
  67.         PUT ( "Error in opening disk file - PIWGRES " ) ;
  68.         NEW_LINE ;
  69.         PUT ( "Please check file namings for your particular host" ) ;
  70.         NEW_LINE ;
  71.     end ;
  72.   end OPEN_INPUT ;
  73.  
  74. --
  75.  
  76.   procedure CLOSE_INPUT is
  77.   begin
  78.     CLOSE ( DISK_FILE ) ;
  79.   end CLOSE_INPUT ;
  80.  
  81. --
  82.  
  83.   procedure PIWG_OUTPUT ( TESTNAME : in STRING ;
  84.                           CLASSNAME : in STRING ;
  85.                           CPU_DELTA : in DURATION ;
  86.                           WALL_DELTA : in DURATION ;
  87.                           NUM_OF_ITERATIONS : in INTEGER ;
  88.                           SAMPLE_COUNT : POSITIVE ;
  89.                           TEST_DESC_1 : in STRING ;
  90.                           TEST_DESC_2 : in STRING ;
  91.                           TEST_DESC_3 : in STRING ) is
  92.   begin
  93.     NEW_LINE ;
  94.     PUT ( "Test Name:   " ) ;
  95.     PUT ( TESTNAME ) ;
  96.     PUT ( "                        Class Name:  " ) ;
  97.     PUT_LINE ( CLASSNAME ) ;
  98.     PUT ( "CPU Time:   " ) ;
  99.     DURATION_IO.PUT ( CPU_DELTA , 6 , 1 ) ;
  100.     PUT_LINE ( "  microseconds " ) ;
  101.     PUT ( "Wall Time:  " ) ;
  102.     DURATION_IO.PUT ( WALL_DELTA , 6 , 1 ) ;
  103.     PUT ( "  microseconds.         Iteration Count:  " ) ;
  104.     PUT_LINE ( INTEGER'IMAGE( NUM_OF_ITERATIONS )) ;
  105.     PUT ( "                                            number of samples:" ) ;
  106.     PUT_LINE ( POSITIVE'IMAGE( SAMPLE_COUNT )) ;
  107.     PUT_LINE ( "Test Description:" ) ;
  108.     PUT_LINE ( TEST_DESC_1 ) ;
  109.     PUT_LINE ( TEST_DESC_2 ) ;
  110.     PUT_LINE ( TEST_DESC_3 ) ;
  111.     NEW_LINE ( 2 ) ;
  112.   end PIWG_OUTPUT ;
  113.  
  114. --
  115. begin
  116.   PUT_LINE ( "A000049 report beginning" ) ;
  117.   if not IS_OPEN ( DISK_FILE ) then
  118.     OPEN_INPUT ;
  119.   end if ;
  120.  
  121. --
  122.   RECORD_INDEX_LAST := SIZE ( DISK_FILE ) ;
  123.   RECORD_INDEX_FIRST := PIWG_DIRECT_IO.COUNT ( 1 ) ;
  124.   RECORD_INDEX := RECORD_INDEX_FIRST ;
  125.  
  126. --
  127.   while RECORD_INDEX <= RECORD_INDEX_LAST loop
  128.     READ ( DISK_FILE , DATA_REC , RECORD_INDEX ) ;
  129.     DISK_DATA ( RECORD_INDEX ) := DATA_REC ;
  130.     RECORD_INDEX := RECORD_INDEX + PIWG_DIRECT_IO.COUNT ( 1 ) ;
  131.   end loop ;
  132.   CLOSE_INPUT ;
  133.   RECORD_INDEX := RECORD_INDEX_FIRST ;
  134. --
  135.   while RECORD_INDEX <= RECORD_INDEX_LAST loop
  136.     TESTNAME := DISK_DATA ( RECORD_INDEX ).TESTNAME ;
  137.     if TESTNAME /= USED_NAME then
  138.       CLASSNAME := DISK_DATA ( RECORD_INDEX ).CLASSNAME ;
  139.       NUM_OF_ITERATIONS := DISK_DATA ( RECORD_INDEX ).NUM_OF_ITERATIONS ;
  140.       TEST_DESC_1 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_1 ;
  141.       TEST_DESC_2 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_2 ;
  142.       TEST_DESC_3 := DISK_DATA ( RECORD_INDEX ).TEST_DESC_3 ;
  143.       COUNT_TIMES := 1 ;
  144.       CPU_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_INDEX ).CPU_DELTA ;
  145.       WALL_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_INDEX ).WALL_DELTA ;
  146.  
  147. --
  148.       RECORD_SEARCH := RECORD_INDEX + 1 ;
  149.       while RECORD_SEARCH <= RECORD_INDEX_LAST loop
  150.         if TESTNAME = DISK_DATA ( RECORD_SEARCH ).TESTNAME then
  151.           DISK_DATA ( RECORD_SEARCH ).TESTNAME := USED_NAME ;
  152.           COUNT_TIMES := COUNT_TIMES + 1 ;
  153.           CPU_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_SEARCH ).CPU_DELTA ;
  154.           WALL_TIMES ( COUNT_TIMES ) := DISK_DATA ( RECORD_SEARCH ).WALL_DELTA ;
  155.         end if ;
  156.         RECORD_SEARCH := RECORD_SEARCH + 1 ;
  157.       end loop ;
  158.       CPU_DELTA := 0.0 ;
  159.       WALL_DELTA := 0.0 ;
  160.       for I in 1 .. COUNT_TIMES loop
  161.         CPU_DELTA := CPU_DELTA + CPU_TIMES ( I ) ;
  162.         WALL_DELTA := WALL_DELTA + WALL_TIMES ( I ) ;
  163.       end loop ;
  164.       CPU_DELTA := DURATION ( CPU_DELTA / DURATION ( COUNT_TIMES ) ) ;
  165.       WALL_DELTA := DURATION ( WALL_DELTA / DURATION ( COUNT_TIMES ) ) ;
  166.       PIWG_OUTPUT ( TESTNAME , CLASSNAME , CPU_DELTA , WALL_DELTA ,
  167.          NUM_OF_ITERATIONS , COUNT_TIMES , TEST_DESC_1 , TEST_DESC_2 ,
  168.          TEST_DESC_3 ) ;
  169.  
  170. --
  171.     end if ;
  172.     RECORD_INDEX := RECORD_INDEX + PIWG_DIRECT_IO.COUNT ( 1 ) ;
  173.   end loop ;
  174.   PUT_LINE ( "A000049 report complete" ) ;
  175. end A000049 ;
  176.