5

在一个 Java 项目中,我使用matrix-toolkits-java (MTJ) 来进行高效的矩阵乘法。这依赖于netlib-java,而后者又依赖于机器上安装的 BLAS 和 LAPACK 的优化实现。它专门寻找/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3找到这些库。

通过 Yum安装时blaslapack我们从参考中获得符号链接/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3指向 .so 文件blaslapack通过 Yum 安装。

现在我们想使用比参考更快的实现,在我的例子中是 OpenBLAS。与我自己编译还是通过 Yum 安装无关,我最终得到/usr/lib64/libopenblas-r0.2.18.so.

现在,根据互联网上的任何指南,我应该将参考实现的符号链接替换为 OpenBLAS 实现的符号链接,最终得到如下内容:

libblas.so.3 -> libopenblas-r0.2.18.so
liblapack.so.3 -> libopenblas-r0.2.18.so

好的,我可以做到!我可以使用ln或通过来做到这一点alternatives。如果我这样做了,我的代码就会愉快地使用快速的 OpenBLAS。

但是,当ldconfig运行时,我很棒的符号链接消失了,它们被参考 BLAS 和 LAPACK 安装覆盖。然后我的软件又悲伤又慢了。

所以我的问题是,如何在 CentOS/Fedora 上安装 OpenBLAS 以使运行ldconfig不会破坏它?我无法删除blasandlapack包,因为主机的其他客户端可能会依赖它。相反,我会以某种方式让操作系统理解 OpenBLAS 是blaslapack.

4

2 回答 2

1

本文建议openblas-compat通过 Yum 安装。这解决了我的问题。安装默认blas软件包后,我的软件仍在使用 OpenBLAS。

于 2017-11-27T12:28:10.323 回答
0

我不认为这种行为是可以在不删除参考实现的情况下避免的。如果需要手动重建ld.so.cache,可以运行ldconfig -X避免更新链接。

除此之外,您很可能必须创建一个自定义脚本来在 ldconfig 更新链接后恢复到 openblas 的符号链接

于 2017-08-23T10:40:52.127 回答