Octave ist ein C++-Programm zur interaktiven - oder batchgesteuerten - Matrixbearbeitung, das weitgehend zu Matlab kompatibel ist. Es wurde entwickelt von John W. Eaton von der University of Texas at Austin und ist unter den GNU (Copyleft)-Bedingungen frei verfügbar. Weitere Einzelheiten zu Octave selbst entnehme man der Dokumentation, die im RZ-WWW verfügbar ist.
Octave benutzt für die grundlegenden Operationen die LAPACK-Bibliothek, die in der Veclib enthalten ist. Damit muß man ``nur noch'' Octave auf der hydra übersetzen und statt der mitgelieferten Matrix-Routinen die Veclib einbinden. Dies gestaltete sich aus verschiedenen Gründen als langwieriges Unterfangen, wobei das Hauptproblem mit der Nicht-Verfügbarkeit eines generischen SPP-UX-C++-Compilers zusammenhing. [1]
Schließlich gelang es aber, eine lauffähige Version
herzustellen, die immer, wenn von Octave eine LAPACK-Routine benutzt wird,
automatisch die parallele Veclib-Version benutzt. Damit muß man nur noch
sein Matlab-Programm auch Octave-kompatibel machen, was laut Octave-Reklame
eine Kleinigkeit sein sollte [2],
und schon hat man ein paralleles Matlab-Programm. Abfallprodukt dieser Aktion
ist eine Octave-Version für HP-UX, die die Veclib benutzt. Welche
Geschwindigkeitsgewinne man damit erzielt, zeigt eindrucksvoll die folgende
Tabelle:
Zeit [s] | Beschleun. | Zeit [s] | Beschleun. | |
matlab | 2916.0 | 1 | 1009.4 | 1 |
octave | 1473.3 | 2.0 | 927.6 | 1.1 |
octave/veclib, 1 CPU | 133.4 | 21.9 | 210.5 | 4.8 |
octave/veclib, 6 CPUs | 29.9 | 97.5 | 71.3 | 14.2 |
Alle Zahlen wurden auf der hydra gemessen, a ist jeweils eine 2000x2000 große Matrix gleichverteilter Zufallszahlen.
[1] Für Gurus: Ein C++-System startet normalerweise vor der
main-Routine Konstruktoren für alle statischen Objekte.
Davon weiß das Startup-File der SPP natürlich nichts. Hier
half ein GNU-Tool namens collect2, das beim gcc
mitgeliefert wird. Außerdem muß das Thread-Laufzeit-System
für parallele Programme initialisiert werden, was
normalerweise automatisch geschieht, hier aber von Hand eingefügt
werden mußte.
[2] vgl. Erfahrungsbericht von Stephan Busch