Navigationshilfe

Hochschulrechenzentrum

Hauptnavigation

Seiteninhalt

LoadLeveler auf dem UNIX-Cluster: Programm-Optimierung

Auf Grund einer Beschräkung beim Kompilieren von selbstgeschriebenen Programmen kann ein solches Programm nur 256 MB Speicher benutzen. Gibt man dem Compiler die richtigen Parameter, kann auch mehr Speicher genutzt werden.

Programmieren in C
Programmieren in Fortran
Anpassung an den Prozessor
Programme im 64bit-Modus erstellen


Programmieren in C

Ein einfaches C-Programm kann hier heruntergeladen werden. Es allokiert Speicher um zweidimensionale Konstrukte, wie z. B. Matrizen, abzuspeichern.

Zum kompilieren muß dem Compiler, meist xlc, der Parameter -bmaxdata:0x80000000 übergeben werden. Diese hexadezimale Zahl entspricht 2 GB Speicher.

Das Programm kann mit der Befehlszeile

xlc -O3 -qstrict -bmaxdata:0x80000000 -o eatmem eatmem.c

in "einem Rutsch" kompiliert werden.

Das Programm kann alternativ in zwei Teilschritten erstellt werden. Zuerst Objekt-Datei kompilieren, danach das ausführbare Programm linken:

xlc -O3 -qstrict -c eatmem.c
ld -bmaxdata:0x80000000 -s -lc -o eatmem /usr/lib/crt0.o eatmem.o

Dieses Beispiel-Programm kann nun mit

eatmem 300

gestartet werden.


Programmieren in Fortran

Ein einfaches Fortran77-Programm kann hier heruntergeladen werden. Der Speicherverbrauch ist statisch auf 300 MB eingestellt. Um andere Werte zu probieren, ist eine erneute Übersetzung des Quellcodes notwendig.

Zum kompilieren muß dem Compiler, meist xlf, der Parameter -bmaxdata:0x80000000 übergeben werden. Diese hexadezimale Zahl entspricht 2 GB Speicher.

Das Programm kann mit der Befehlszeile

xlf -O3 -qstrict -bmaxdata:0x80000000 -o eatmem eatmem.F

in "einem Rutsch" kompiliert werden.

Das ganze Programm gibt es hier nochmals in der Fortran90-Variante. Der Speicher wird nun dynamisch allokiert. Da die Kommandozeile nicht verarbeitet werden kann, werden die Parameter aus einer Eingabedatei gelesen.

Das Programm kann mit der Befehlszeile

xlf90 -O3 -qstrict -bmaxdata:0x80000000 -o eatmem eatmem.f

in "einem Rutsch" kompiliert werden.

Dieses Beispiel-Programm kann in beiden Fällen mit

eatmem

gestartet werden.


Anpassung an den Prozessor

Um das Programm optimal an den verwendeten Prozessor anzupassen, muß die Kommandozeile des Compilers um die Option -qarch=xxx erweitert werden, wobei xxx einer der Einträge der Spalte "Feature" auf der Seite Maschinen-Details ist.

Für das C-Programm, das auf einem PowerPC-Prozessor laufen soll, sieht die Befehlszeile dann wie folgt aus:

xlc -O3 -qstrict -bmaxdata:0x80000000 -qarch=ppc -o eatmem eatmem.c

Nach dem erfolgreichen Kompilieren kann das ausführbare Programm mit

strip eatmem

von unnötigen Ballast befreit und weiter beschleunigt werden.

Mit dem Programm size kann der voraussichtliche Speicherverbrauch des kompilierten Programms noch vor der Ausführung angezeigt werden:

size eatmem

Dies führt bei Programmen mit statischen Variablen zum richtigen Ergebnis. Bei Programmen, die dynamisch Speicher allokieren, ist die Anzeige inkorrekt. Als Beispiel vergleiche man die F77- und die F90-Variante des oben vorgestellten Programms.


Programme im 64bit-Modus erstellen

Soll ein Programm mehr als 2 GB RAM verwenden, dann empfiehlt es sich, das Programm im 64bit-Modus zu kompilieren. Dazu müssen sowohl dem Compiler als auch den Hilfsprogrammen wie ar oder strip zusätzliche Parameter übergeben werden.

Der Compiler bekommt den zusätzlichen Parameter -q64 mit auf den Weg:

xlc -O3 -qstrict -bmaxdata:0x200000000 -q64 -o eatmem eatmem.c

Die Hilfsprogramme ar, strip usw. bekommen den zusätzlichen Parameter -X32_64 mit auf den Weg:

strip -X32_64 eatmem

 

geändert am 26. Oktober 2004  E-Mail: loadlloadl@rz.uni-frankfurt.de

|

| Zur Navigationshilfe
empty

Seitenabschlussleiste


Druckversion: 26. Oktober 2004, 09:18
http://www.uni-frankfurt.de/org/hrz/services/loadl/programme.html