我不确定这里是否适合问我的问题,所以如果不是,我道歉。
我正在编写一个Java程序,它可以执行很多稀疏矩阵乘法。经过一些研究后,我发现矩阵工具包Java提供了一些最好的性能,但只有在为BLAS/LAPACK库使用netlib-java包装时才能提供最好的性能。
现在,我已经尝试遵循这些github页面上的说明,并从Arch存储库安装了BLAS和LAPACK:
$ pacman -Ss lapack
extra/lapack 3.5.0-1 [installed]
Linear Algebra PACKage
$ pacman -Ss blas
extra/blas 3.5.0-1 [installed]
Basic Linear Algebra Subprograms在检查/usr/lib/时,它确实包含
-rwxr-xr-x 1 root root 1866088 Jan 27 21:46 liblapacke.so
lrwxrwxrwx 1 root root 13 Jan 27 21:46 liblapacke.so.3 -> liblapacke.so
lrwxrwxrwx 1 root root 13 Jan 27 21:46 liblapacke.so.3.5.0 -> liblapacke.so
-rwxr-xr-x 1 root root 5878120 Jan 27 21:46 liblapack.so
lrwxrwxrwx 1 root root 12 Jan 27 21:46 liblapack.so.3 -> liblapack.so
lrwxrwxrwx 1 root root 12 Jan 27 21:46 liblapack.so.3.5.0 -> liblapack.so和
-rwxr-xr-x 1 root root 358448 Jan 27 21:46 libblas.so
lrwxrwxrwx 1 root root 10 Jan 27 21:46 libblas.so.3 -> libblas.so
lrwxrwxrwx 1 root root 10 Jan 27 21:46 libblas.so.3.5.0 -> libblas.so现在,我的程序将约450,000×450,000元素的稀疏矩阵与向量相乘。这大约需要一秒钟。我运行的英特尔核心2二重奏@ 2.53GHz。
我的问题是,我是真的使用了Fortran后端,还是仍然使用了这些函数的Java实现?我知道我的计算很大,但我还是觉得它们可以更快.是否有任何方法检查在运行时使用了哪些库?
提前感谢!致以敬意,
莱纳斯
编辑:
我刚刚尝试了一些东西,对我来说,这表明我实际上没有使用库。我重新命名了liblapack和libblas,假设这会使Java无法找到它们。我的程序在重命名库之后还在运行,更重要的是,花了同样长的时间.我想我现在要找的是如何确保库被加载并被使用!
发布于 2014-03-11 09:00:39
您使用的是共享库,应该用Fortran编写。
请记住,对于一个大的矩阵,它不是不合理的乘法需要时间。
发布于 2015-06-04 06:53:22
有一种检查在代码中使用的BLAS库版本的简单方法:
System.out.println(BLAS.getInstance().getClass().getName());如果您正在运行本机库,您应该会看到如下内容:
com.github.fommil.netlib.NativeSystemBLAS相反,如果您仍然链接到JBLAS,则应该看到对F2jBLAS或JBLAS的引用。
尽管如此,您仍然需要确保您的sysmtem BLAS库链接到正确的实现(定制编译的OpenBLAS、Intel等)。如果你想要最好的表演。
https://stackoverflow.com/questions/22320733
复制相似问题