如何使用儲存庫中的 Octave 以及在我的電腦上編譯的 OpenBLAS?

如何使用儲存庫中的 Octave 以及在我的電腦上編譯的 OpenBLAS?

它一直建議使用 Octave 和在我自己的電腦中編譯的 OpenBLAS(而不是從儲存庫預先編譯的 OpenBLAS)將使運算速度更快。我使用 apt 從儲存庫安裝了 GNU Octave (4.2.2),並編譯了最新版本的 OpenBLAShttps://www.openblas.net/

如何讓Octave使用這個OpenBLAS?

到目前為止我已經嘗試過的。

編譯 OpenBLAS 後,我將其安裝在opt/openblas.

然後我輸入命令

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

然後我配置為使用新的 OpenBLAS

update-alternatives --config libblas.so 
update-alternatives --config libblas.so.3 
update-alternatives --config liblapack.so 
update-alternatives --config liblapack.so.3 

最後我用新的 OpenBLAS 執行 Octave,但出現了這個錯誤。

$ 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

答案1

我建議從 Ubuntu 儲存庫中的所有內容開始。首先要嘗試的是安裝libopenblas-base軟體包並允許它提供 BLAS 和 LAPACK 替代方案,簡單如下:

sudo apt-get install octave
sudo apt-get install libopenblas-base

使用我們的測試腳本我的 i7-3537u 上的 Octave 的時序如下:

  • 0.42 s - 使用簡單預設值libblas3liblapack3
  • 0.26 s -libopenblas-base來自儲存庫

如果您想進一步優化它 - 透過以下方式在本地編譯 OpenBLAS:

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

這會將基準測試結果變更為:

  • 0.25 s -libopenblas-base自編譯

所以透過額外的手動最佳化來編譯最佳化函式庫是沒有用的。


結論:我建議先透過避免 for 迴圈並盡可能使用向量化函數來最佳化您的 Octave 程式碼。這將極大地提高性能。

相關內容