java - 使用 MTJ 时我是否使用 BLAS/LAPACK 库?

标签 java shared-libraries lapack blas mtj

我不确定这是提问的正确位置,如果不是,我深表歉意。

我正在编写一个 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/

相关文章:

java - 从字符串中减去字符串

java - 实现充气城堡 aes 256

linux - 需要共享 (.so) 库之间的循环依赖

c - 从 C 中的共享库访问主程序

linear-algebra - 稠密线性代数的应用

matlab - 调用 MATLAB 内置的 LAPACK/BLAS 例程

java - 如何根据android/java/eclipse中textView中的文本更改imageView

java - 为什么 ThreadGroup 会受到批评?

c - 在 header 中声明枚举,在源文件中不可见?

c++ - R包与Rcpp链接错误 : "undefined symbol: LAPACKE_dgels"