我不确定这是提问的正确位置,如果不是,我深表歉意。
我正在编写一个 Java 程序,它可以执行大量稀疏矩阵乘法。经过一番研究,我发现Matrix Toolkits Java提供一些最佳性能,但仅在使用 netlib-java 时BLAS/LAPACK fortran 库的包装器。
现在我已尝试按照这些 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 个元素的稀疏矩阵与一个 vector 相乘。这大约需要一秒钟。我运行的是 Intel Core 2 Duo @ 2.53GHz。
我的问题是,我真的使用 Fortran 后端,还是仍然使用这些函数的 Java 实现?我意识到我的计算量很大,但我仍然觉得它们可以更快...有什么方法可以检查运行时使用了哪些库?
提前致谢! 问候,
莱纳斯
编辑:
我刚刚尝试了一些东西,这对我来说表明我实际上没有使用这些库。我已经重命名了 liblapack 和 libblas,假设这会使 Java 无法找到它们。我的程序在重命名库后仍然运行,更重要的是,花了同样长的时间...我想我现在正在寻找的是如何确保库已加载并被使用!
最佳答案
您正在使用共享库,它应该用 Fortran 编写。
请记住,对于一个大矩阵,乘法需要时间并不是没有道理的。
关于java - 使用 MTJ 时我是否使用 BLAS/LAPACK 库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22320733/