如何在我的计算机上使用已编译 OpenBLAS 的存储库中的 Octave?

如何在我的计算机上使用已编译 OpenBLAS 的存储库中的 Octave?

它一直建议使用 Octave 和我自己电脑中编译的 OpenBLAS(而不是从存储库中预编译的 OpenBLAS)将使计算速度更快。我使用 apt 从存储库安装了 GNU Octave (4.2.2),并从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自编译

因此,通过额外的手动优化来编译优化库是没有用的。


结论:我建议首先优化 Octave 代码,避免使用 for 循环,并尽可能使用矢量化函数。这将极大地提高性能。

相关内容