有人建议使用 Octave 和在我自己的计算机上编译的 OpenBLAS(而不是从存储库预编译的 OpenBLAS)将使计算更快。我使用 apt 从存储库安装了 GNU Octave (4.2.2),并从https://www.openblas.net/编译了最新版本的 OpenBLAS 。
如何让 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
我建议从 Ubuntu 存储库中的所有内容开始。首先要尝试的是安装
libopenblas-base
包并允许它提供 BLAS 和 LAPACK 替代方案,就像这样简单:使用我们的测试脚本,我的 i7-3537u 上有以下 Octave 计时:
libblas3
,liblapack3
libopenblas-base
来自存储库如果您想进一步优化它 - 通过以下方式在本地编译 OpenBLAS:
这会将基准测试结果更改为:
libopenblas-base
自编译所以用额外的手动优化来编译优化的库是没有用的。
结论:我建议首先通过避免 for 循环和尽可能使用向量化函数来优化您的 Octave 代码。这将极大地提高性能。