我不确定这是问我问题的正确地方,所以如果不是,我道歉。
我正在编写一个执行大量稀疏矩阵乘法的 Java 程序。经过一些研究,我发现Matrix Toolkits Java提供了一些最佳性能,但仅在使用BLAS/LAPACK fortran 库的netlib-java包装器时。
现在我尝试按照这些 github 页面上的说明进行操作,并且我已经从 Arch Linux 存储库安装了 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,000x450,000 个元素的稀疏矩阵与一个向量相乘。这大约需要一秒钟。我在 Intel Core 2 Duo @ 2.53GHz 上运行。
毕竟我的问题是,我真的在使用 Fortran 后端,还是这些函数的 Java 实现?我意识到我的计算量很大,但我仍然觉得它们可以更快......有没有办法检查运行时使用了哪些库?
提前致谢!问候,
莱纳斯
编辑:
我刚刚尝试了一些东西,这对我来说表明我实际上并没有使用这些库。我已经重命名了 liblapack 和 libblas,假设这会使 Java 无法找到它们。我的程序在重命名库后仍然运行,更重要的是,花了同样长的时间......我想我现在正在寻找的是如何确保库已加载并被使用!