Compiler-Direktiven

Ein weiteres Optimierungs-Problem sind scheinbare Rückgriffe, die vor allem dann auftreten, wenn Array-Offsets oder Schrittweiten in Schleifen als Funktions-Parameter übergeben werden. Da das Vorzeichen beim Compilieren nicht bekannt ist, können manchmal Rückgriffe nicht ausgeschloßen werden, obwohl sie im Programm nicht wirklich vorkommen. Ähnliche, wenn auch nicht so drastische Effekte gibt es, wenn die Länge einer Schleife ein Parameter ist: Mangels besseren Wissens wird vom Compiler immer vektorisiert und auch immer eine äußere Schleife für das Strip Mining angelegt. Wäre die Zahl der Iterationen bekannt, könnte man das Strip Mining u.U. unterlassen, andere Schleifen gar nicht vektorisieren, weil sie zu kurz sind und ggf. die Reihenfolge geschachtelter Schleifen ändern. Für alle diese Fälle gibt es die Möglichkeit, mit Hilfe von Compiler-Direktiven zusätzliche Informationen in den Code einzubauen. Da sich das Problem bei Verwendung des Application Compilers durch das Weiterreichen von Konstanten aber nicht mehr so sehr stellt, sollen hier nur kurz die wichtigsten Direktiven kurz erwähnt werden. Eine Direktive BLA_DIREKTIVE erscheint im Source-Code als
    C$DIR BLA_DIREKTIVE            (in Fortran)
bzw.
    #pragma _CNX bla_direktive     (in C).

  FORCE_VEKTOR, PREFER_VECTOR, NO_VECTOR, SCALAR
vor einer Schleife gibt an, ob sie immer, nur wenn es sicher ist oder nie vektorisiert werden soll. Bei SCALAR wird sie auch nicht parallelisiert. Ähnliche Anweisungen gibt es für die Parallelisierung.
  NO_RECURRENCE
Die folgende Schleife enthält keinen Rückgriff, auch wenn es so aussieht.
  MAX_TRIPS(Anzahl)
In der folgenden Schleife wird höchstens ''Anzahl'' mal iteriert.
  UNROLL
Die nächste Schleife ist sie kurz, daß sie in Einzelanweisungen aufgelöst (''unrolled'') werden soll.
  PEEL_ALL, PEEL, NO_PEEL
Aus der nächsten Schleife sollen immer bzw. nur, wenn es nicht zu aufwendig wird bzw. nie spezielle Anfangs- und Endwert-Behandlungen herausgezogen werden.

previous    contents     next

Peter Junglas 18.10.1993