标签: mtj

使用MTJ/Netlib(本机)的慢速矩阵乘法性能

我需要将大小为5000x5000的大矩阵乘以20000x20000.我在查找具有稀疏矩阵但可以进行快速乘法的库时遇到问题.

首先,我已经阅读了关于Java矩阵库性能的上一个问题(Java矩阵数学库的性能?).基于那里的最佳答案,我决定选择JBLAS,因为它是最快的之一.在我的情况下,需要大约50s左右才能乘以5000x5000矩阵,这比Matlab慢很多但仍然可以容忍.

问题是矩阵可能非常大(高达20k乘20k或更多),但它们通常很稀疏.矩阵中只有30%的元素是非零的.JBLAS不提供任何稀疏矩阵实现,因此存储大密集矩阵所需的内存占用可能会非常高.我尝试切换到MTJ/Netlib,因为它应该是基准中具有稀疏矩阵的更好的库之一.这里的说明(https://github.com/fommil/netlib-java/)说要获得最佳性能,我必须在我的机器上编译本机BLAS.所以我下载了OpenBLAS,编译并安装了它.我还运行了一些命令来在Ubuntu 13.10上设置OpenBLAS库:

$ cd ~/build/OpenBLAS
$ make
$ sudo make install PREFIX=/usr/local/openblas
$ sudo cat "/usr/local/openblas/lib" > /etc/ld.so.conf.d/openblas.conf
$ sudo ldconfig
$ sudo update-alternatives --install /usr/lib/libblas.so.3 libblas.so.3 /usr/local/openblas/lib/libopenblas.so 90
$ sudo update-alternatives --config libblas.so.3
Run Code Online (Sandbox Code Playgroud)

我在上一个更新替代步骤中选择了我编译的OpenBLAS库.我假设在此之后,Netlib选择了我编译的OpenBLAS库并使用它.我还从http://r.research.att.com/benchmarks/R-benchmark-25.R运行了一些基准测试并观察了之前的一些加速(使用来自ubuntu的默认blas)和之后的情况(使用我的编译OpenBLAS).

然而,MTJ中的矩阵 - 矩阵乘法性能仍然很慢.例如,我有两个矩阵A = 5824x5824,W = 5824x4782.我在Java中将它们相乘

Matrix AW = new FlexCompRowMatrix(A.numRows(), W.numColumns());
A.mult(W, AW);
Run Code Online (Sandbox Code Playgroud)

代码已经运行了超过45分钟,足以输入整个帖子,但它仍然没有完成.使用JBLAS,相同的矩阵乘法将花费不到1分钟.有什么我错过的吗?

谢谢 !

java math performance matrix mtj

6
推荐指数
1
解决办法
2016
查看次数

日食脉冲星,mtj,我之间的区别

eclipse pulsar,eclipse mtj和eclipse me之间有什么区别?

eclipse mtj

5
推荐指数
1
解决办法
1046
查看次数

在 CentOS / Fedora 上安装 OpenBLAS

在一个Java项目中,我使用matrix-toolkits-java (MTJ)来进行高效的矩阵乘法。这依赖于netlib-java,而 netlib-java 又依赖于计算机上安装的 BLAS 和 LAPACK 的优化实现。它专门寻找/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3找到这些库。

blas通过Yum安装时lapack,我们会获得符号链接/usr/lib64/libblas.so.3/usr/lib64/liblapack.so.3指向引用中的 .so 文件blaslapack通过 Yum 安装。

现在我们想要使用比参考更快的实现,在我的例子中是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
Run Code Online (Sandbox Code Playgroud)

好吧,我能做到!我可以使用ln或 via 来做到这一点alternatives。如果我这样做,我的代码就会愉快地使用快速的 OpenBLAS。

然而,当ldconfig运行时,我很棒的符号链接消失了,它们被参考 BLAS 和 LAPACK 安装覆盖。然后我的软件又变得悲伤和缓慢。

所以我的问题是,如何在CentOS/Fedora上安装OpenBLAS,并且运行时ldconfig不会破坏它?我无法删除blaslapack软件包,因为主机的其他客户端可能依赖它。blas相反,我会以某种方式让操作系统了解 OpenBLAS 是和的直接替代品lapack

centos rpm blas mtj openblas

5
推荐指数
1
解决办法
7763
查看次数

标签 统计

mtj ×3

blas ×1

centos ×1

eclipse ×1

java ×1

math ×1

matrix ×1

openblas ×1

performance ×1

rpm ×1