Meldungen des Application Compilers

Der Application-Compiler erzeugt normalerweise während des Laufs eine Menge von Ausgaben: Zunächst erscheinen Meldungen, die über den Stand des Compilierungsvorgangs Auskunft geben, dazwischen kommen die Optimierungsreports für die einzelnen Routinen, den Schluß bildet der sogenannte IPO-Report (''InterProcedural Optimization''), der aus zwei Tabellen besteht.
Die Optimierungsreports sind i.w. die gleichen, die die Compiler auch sonst erzeugen, allerdings sind sie um die neu hinzugekommenen Optimierungen ergänzt. Außerdem werden auch Routinen berücksichtigt, die geklont oder eingefügt (''inlined'') wurden. Näheres zum Optimierungsreport findet man in Abschnitt 4.2.3. Der IPO-Report gibt in Tabellenform einen Überblick über die vom Application-Compiler durchgeführten Optimierungen und über die gefundenen Fehler. Für das Programm linalg in der Version 2.1 sieht die Optimierungstabelle folgendermaßen aus:

Optimizations performed
 
  Times Times Propagated Pointer  
  Procedure Procedure Constants Variables Arrays
Procedure Inlined Cloned Used Renamed Resized
LINALG          
LUINV     5    
GAUSSJ     15    
GETMAT     3    
GETVEC   1 1    
ERNORM     3    
SETVEC   2 1    
SETMAT     3    
TESTMT     4    
LUDCMP     11    
           
LUBKSB     6    
Totals   3 52    
build -show inline clones constants pointers resizes


Die ersten drei Spalten geben an, wie oft welche Funktionen eingefügt oder geklont wurden oder wieviele weitergereichte Konstanten benutzt wurden. Die letzte Zeile gibt Informationen darüber an, wieviele Pointervariablen (insbesondere in C) umgenannt wurden, um ein ''Aliasing'' (s.o.) zu verhindern. Möchte man genauere Informationen zu den einzelnen Punkten, kann man mit der Option ''-show TOPIC'' des ''build''-Kommandos weitere Informationen erhalten, wobei in der letzten Zeile angegeben ist, welcher Wert von TOPIC Details für die entsprechende Spalte liefert. So erhält man mit ''build -show constants'' u.a.:
     Constants on entry to procedure `LUBKSB': N=100, NP=100
     Compilation: Optimization: Propagated IPO constant on entry to `LUBKSB',
                                 NP = 100
Es gibt darüberhinaus noch weitere Möglichkeiten für TOPIC, die wichtigste ist ''all'', womit man alle TOPICs bekommt. Der Application-Compiler schreibt unabhängig von der ''-show'' -Option alle Informationen in ein Logfile, das man sich später auch ohne weiteres Neucompilieren mit dem Kommando
     build -display
ansehen kann. Die Fehlertabelle von linalg in der Version 1.1 sieht so aus:

Errors Detected
    Wrong Mis-   Scalar      
  Mis- Number Matched   Passed   Variables
  Matched Of Return Invalid To Invalid Not
Procedure Args Args Type Aliases Array SubScript Initialized
LINALG 6            
LUINV 2            
GAUSSJ              
GETMAT              
GETVEC              
ERNORM              
SETVEC              
SETMAT              
TESTMT              
LUDCMP              
               
LUBKSB              
Totals 8            
build -check types types types     arrays init


Auch hier gibt es wieder die Möglichkeit, sich über eine build-Option genauere Informationen zu den Fehlern ausgeben zu lassen; die entsprechende Option lautet ''-check TOPIC''. Es ist wieder ''all'' als TOPIC möglich für eine vollständige Liste. Außerdem enthält die Ausgabe von ''build -display'' immer auch alle Fehler-Informationen, darunter z.B. im obigen Beispiel folgende Zeilen:
    Warning: Argument number 1 of GAUSSJ has inconsistent type in ./main.f
       on line 57 and ./gaussj.f on line 1
    Warning: Argument number 4 of GAUSSJ has inconsistent type in ./main.f
       on line 57 and ./gaussj.f on line 1
    Call to GAUSSJ on line 57 of ./main.f:
      VOID ((REAL*8 *), (INTEGER*4 *), (INTEGER*4 *), (REAL*8 *),
            (INTEGER*4 *), (INTEGER*4 *))
    Defn of GAUSSJ on line 1 of ./gaussj.f:
      VOID ((REAL*4 *), (INTEGER*4 *), (INTEGER*4 *), (REAL*4 *),
            (INTEGER*4 *), (INTEGER*4 *))
Möchte man den Application-Compiler nur zur Fehlersuche benutzen, sollte man ihn mit der Option ''-check only'' aufrufen, dann werden keine Optimierungs- und Übersetzungsschritte ausgeführt.
Schließlich kann man sich mit der build-Option ''-time'' anzeigen lassen, wie lange der Application-Compiler für die einzelnen Phasen gebraucht hat:

Summary of Time Usage (HR:MIN:SEC)
   
Summary phase 00:00:00
Synthesis phase (pass 1) 00:00:01
Analysis phase 00:00:11
Synthesis phase (pass 2) 00:00:00
Compilation phase 00:00:16
Link phase 00:00:02
Total build time 00:00:33


Alle angegebenen Zeiten sind ''real''-Zeiten, keine CPU-Zeiten.
Für X-Window-Benutzer gibt es seit der APC-Version 1.1 auch die Möglichkeit, sich mit dem Programm pdbview Informationen aus der Datenbasis PDB anzeigen zu lassen. Auf diese Weise kann man sich u.a. alle Meldungen ansehen, wahlweise zusammen mit dem dazugehörigen Source-Text, oder eine Übersicht über den Aufbau einer Routine, insbesondere der Loops, und den gesamten Aufruf-Graphen (diesmal wirklich als Graphen) anzeigen lassen. Es wird einfach mit
     pdbview &
aufgerufen und arbeitet mit Menüsteuerung. Die Menüpunkte sind i.w. selbsterklärend; weitere Fragen lassen sich durch Ausprobieren oder mit der eingebauten ''Help''-Funktion schnell beantworten.

previous    contents     next

Peter Junglas 18.10.1993