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.
Peter Junglas 18.10.1993