首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MTJ/Netlib的矩阵乘法性能较慢(本机)

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

Stack Overflow用户
提问于 2013-11-15 07:51:18
回答 2查看 2.2K关注 0票数 6

我需要将5000x5000到20000x20000的大矩阵相乘。我在寻找一个具有稀疏矩阵但可以进行快速乘法的库时遇到了问题。

首先,我已经阅读了上一个关于Java矩阵库(Performance of Java matrix math libraries?)性能的问题。基于上面的答案,我决定使用JBLAS,因为它是最快的。在我的例子中,将一个5000x5000矩阵相乘大约需要50秒左右,这比Matlab慢得多,但仍然可以容忍。

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

代码语言:javascript
复制
$ 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

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

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

代码语言:javascript
复制
Matrix AW = new FlexCompRowMatrix(A.numRows(), W.numColumns());
A.mult(W, AW);

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

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2013-12-30 06:15:35

JBLAS执行密集矩阵运算。MJT既密集又稀疏。以密集的方式使用“稀疏”矩阵是很慢的。FlexCompRowMatrix创建一个稀疏矩阵。

直接与JBLAS进行比较,您想要做的是:

代码语言:javascript
复制
Matrix a = new DenseMatrix(5000,5000);
Matrix b = new DenseMatrix(5000,5000);
Matrix c = new DenseMatrix(5000,5000);

a.multAdd(b, c);

使用MJT+OpenBlas的性能应该与MatLab大致相同。

票数 6
EN

Stack Overflow用户

发布于 2017-04-12 15:13:09

请参阅http://jeshua.me/blog/NetlibJavaJNI并注意,您可能需要在测试中更新本机包名称以演示使用。

例如,可能需要将: Class javaBlasClass = Class.forName("org.netlib.blas.JBLAS");更改为: Class javaBlasClass = com.github.fommil.netlib.BLAS.class;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19990829

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档