在一个Java项目中,我使用matrix-toolkits-java (MTJ)进行高效的矩阵乘法。这依赖于netlib-java,后者又依赖于安装在机器上的优化实现的BLAS和LAPACK。它特别寻找
当通过Yum安装
现在我们想使用比参考实现更快的实现,在我的情况下是OpenBLAS。无论我是自己编译还是通过Yum安装它,最终都会得到
现在,根据互联网上的任何指南,我都应该用指向OpenBLAS实现的符号链接替换对参考实现的符号链接,最终得到类似于这样的东西:
/usr/lib64/libblas.so.3
和/usr/lib64/liblapack.so.3
来找到这些库。当通过Yum安装
blas
和lapack
时,我们得到符号链接/usr/lib64/libblas.so.3
和/usr/lib64/liblapack.so.3
,指向通过Yum安装的参考blas
和lapack
的.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
好的,我可以做到!我可以使用ln
或通过alternatives
来完成。如果我这样做了,我的代码将愉快地使用快速的OpenBLAS。
然而,当ldconfig
运行时,我的符号链接就消失了,它们被参考的BLAS和LAPACK安装覆盖了。然后我的软件又变得慢而且不稳定。
所以我的问题是,如何在CentOS/Fedora上安装OpenBLAS,使得运行ldconfig
不会破坏它?我不能删除blas
和lapack
软件包,因为主机的其他客户可能依赖它。相反,我需要让操作系统知道OpenBLAS是blas
和lapack
的替代品。