2017-07-07 199 views
3

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

当通过百胜安装blaslapack,我们得到符号链接/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3从通过百胜安装了参考blaslapack指向.so文件。

现在我们想要使用比参考的更快的实现,在我的例子中是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 

好吧,我可以做那!我可以用lnalternatives来做到这一点。如果我这样做,我的代码很高兴使用快速的OpenBLAS。

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

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

+0

如果别人依赖blas和lapack包,他们最不可能还会依赖libblas.so.3指向blas的实现吗? – Stefan

回答

0

This article后,提出了通过百胜安装openblas-compat。这解决了我的问题。安装默认的blas软件包后,我的软件仍在使用OpenBLAS。

0

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

除了那你很可能需要创建一个自定义脚本的符号链接还原到openblas更新LDCONFIG链接