Octave

Aus Physik
Version vom 6. Juni 2011, 14:28 Uhr von Benji (Diskussion | Beiträge) (→‎Octave beschleunigen mit OpenBLAS)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springen Zur Suche springen

Octave ist eine Programiersprache, die sehr an Matlab angelehnt ist. Jemand mit Matlab Erfahrung wird sich also mit Octave sehr schnell zurechtfinden. Im Gegensatz zu Matlab ist die Software frei erhältlich, jeder kann sie zuhause sofort installieren. Octave wird aus der Konsole gestartet und läuft standardmäßig im Textmodus, startet deshalb viel schneller als Matlab. Ich verwende es gerne als Taschenrechnerersatz oder um schnell mal einen Funktionsplot zu zeichnen.


Octave beschleunigen mit OpenBLAS

link OpenBLAS ist ein freier Nachfolger von link GotoBLAS, eine der schnellsten OpenSource BLAS-Implementierungen. Um Octave mit OpenBLAS zu kompilieren, geht man wie im folgenden Beispiel vor:


  • Octave Quellcode herunterladen von link gnu.org und entpacken nach /var/tmp/octaveSource
  • OpenBLAS herunterladen von link github.com und nach /var/tmp/openblas entpacken
  • In einer Shell ins OpenBLAS-Verzeichnis wechseln und die 64-Bit Library kompilieren mit
make BINARY=64 USE_THREAD=1 FC=gfortran

Ergebnis: "GotoBLAS build complete." und "Library Name ... libopenblas_***.a"

  • Ins Octave-Verzeichnis wechseln und Octave (je nach Vorliebe mit weiteren Flags) konfigurieren
F77=-O2 ./configure --enable-shared --prefix=/var/tmp/octaveBin/ --with-blas=`ls /var/tmp/openblas/libopenblas_*.so` --with-lapack=`ls /var/tmp/openblas/libopenblas_*.so`
  • Kompilieren und installieren nach /var/tmp/octaveBin mit
make && make install
  • Octave ausführen mit
/var/tmp/octaveBin/octave

Das Ergebnis dieser ganzen Mühen ist eine schnelle und aktuelle Version von GNU Octave, die auch den Vergleich mit Matlab nicht scheuen muss, wie folgender Minibenchmark zeigt:

Octave 3.4.0 mit GotoBLAS2 1.13

N=2048; A = rand(N); B = rand(N); tic; for k=1:10, C = A*B; end; toc;
Elapsed time is 4.17537 seconds.

Matlab R2010b

N=2048; A = rand(N); B = rand(N); tic; for k=1:10, C = A*B; end; toc;
Elapsed time is 4.307492 seconds.