Es ist gewesenempfohlendass die Verwendung von Octave mit OpenBLAS, das auf meinem eigenen Computer kompiliert wurde (anstatt vorkompiliertem OpenBLAS aus Repositories), die Berechnungen schneller macht. Ich habe GNU Octave (4.2.2) aus Repositories mit apt installiert und die neueste Version von OpenBLAS vonhttps://www.openblas.net/.
Wie kann Octave dieses OpenBLAS verwenden?
Was ich bisher versucht habe.
Nachdem ich OpenBLAS kompiliert hatte, habe ich es in installiert opt/openblas
.
Dann gab ich die Befehle ein
sudo update-alternatives --install /usr/lib/libblas.so libblas.so /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/liblapack.so liblapack.so /opt/openblas/lib/libopenblas.so 50
sudo update-alternatives --install /usr/lib/liblapack.so.3 liblapack.so.3 /opt/openblas/lib/libopenblas.so 50
Anschließend habe ich die Verwendung des neuen OpenBLAS konfiguriert mit
update-alternatives --config libblas.so
update-alternatives --config libblas.so.3
update-alternatives --config liblapack.so
update-alternatives --config liblapack.so.3
Schließlich habe ich Octave mit dem neuen OpenBLAS ausgeführt, aber es trat dieser Fehler auf.
$ LD_PRELOAD=/opt/openblas/lib/libopenblas.so octave-cli
octave-cli: symbol lookup error: /usr/lib/x86_64-linux-gnu/libblas.so.3: undefined symbol: gotoblas
Antwort1
Ich würde empfehlen, mit allem aus dem Ubuntu-Repository zu beginnen. Als Erstes sollten Sie versuchen, libopenblas-base
das Paket zu installieren und es als Alternative zu BLAS und LAPACK bereitzustellen. So einfach geht das:
sudo apt-get install octave
sudo apt-get install libopenblas-base
Mit unseremTestskriptwir haben folgende Timings für Octave auf meinem i7-3537u:
- 0,42 s - mit einfacher Vorgabe
libblas3
,liblapack3
- 0,26 s - mit
libopenblas-base
aus dem Repository
Wenn Sie es noch weiter optimieren möchten, kompilieren Sie OpenBLAS lokal wie folgt:
sudo apt-get build-dep libopenblas-dev
cd /tmp
apt-get source libopenblas-base
cd openblas-0.2.20+ds
DEB_CFLAGS_SET="-march=native -mtune=native" DEB_CFLAGS_SET="-march=native -mtune=native" dpkg-buildpackage -uc -us -j8
sudo apt-get install ../libopenblas-base_0.2.20+ds-4_amd64.deb ../libopenblas-dev_0.2.20+ds-4_amd64.deb
Dadurch ändern sich die Benchmark-Ergebnisse wie folgt:
- 0,25 s - mit
libopenblas-base
selbst zusammengestellten
Daher ist es nicht sinnvoll, die optimierte Bibliothek mit zusätzlicher manueller Optimierung zu kompilieren.
Abschluss:Ich empfehle, zunächst Ihren Octave-Code zu optimieren, indem Sie For-Schleifen vermeiden und so weit wie möglich vektorisierte Funktionen verwenden. Dies wird die Leistung enorm steigern.