next up previous contents
Next: MATLAB und Shared Memory Up: Paralleles MATLAB Previous: Paralleles MATLAB

OCTAVE - ein MATLAB-kompatibles Programm

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:

tex2html_wrap_inline1036 tex2html_wrap_inline1038
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


next up previous contents
Next: MATLAB und Shared Memory Up: Paralleles MATLAB Previous: Paralleles MATLAB

Marco Budde
Mon Jul 8 18:15:29 MESZ 1996