コンピューター上でコンパイルされた OpenBLAS を使用してリポジトリから Octave を使用するにはどうすればよいでしょうか?

コンピューター上でコンパイルされた OpenBLAS を使用してリポジトリから Octave を使用するにはどうすればよいでしょうか?

それはそうだった提案された自分のコンピュータでコンパイルしたOpenBLASでOctaveを使用すると(リポジトリからプリコンパイルされたOpenBLASではなく)、計算が速くなることがわかりました。私はaptを使用してリポジトリからGNU Octave(4.2.2)をインストールし、OpenBLASの最新リリースをコンパイルしました。https://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秒 - 単純なデフォルトlibblas3liblapack3
  • 0.26秒 -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秒 -libopenblas-base自己コンパイル

したがって、最適化されたライブラリを追加の手動最適化でコンパイルすることは有用ではありません。


結論:まず、for ループを避け、ベクトル化された関数をできるだけ使用して、Octave コードを最適化することをお勧めします。これにより、パフォーマンスが大幅に向上します。

関連情報