Java矩阵数学库的性能?

我们正在计算运行时受矩阵运算约束的东西。(如果感兴趣,请参阅下面的一些细节。)这次经历提出了以下问题


民间有没有使用Java库的矩阵数学性能经验(例如,乘法,逆等)?例如:


JAMA

小马

Apache公共数学

我搜查了一下,一无所获。


我们的速度比较详情:


我们使用的是英特尔FORTRAN(ifort(IFORT)10.1 20070913)。我们使用Apache commons math 1.2矩阵运算在Java(1.6)中重新实现了它,并且它同意所有的精度数字。(我们有理由在Java中想要它。)(Java双打,Fortran真* 8)。Fortran:6分钟,Java 33分钟,同样的机器。jvisualm profiling显示了在RealMatrixImpl中花费了大量时间。{getEntry,isValidCoordinate}(在未发布的Apache commons math 2.0中似乎已经消失了,但2.0并不快)。Fortran正在使用Atlas BLAS例程(dpotrf等)。


显然这可能取决于我们在每种语言中的代码,但我们相信大部分时间都在等效的矩阵运算中。


在其他几个不涉及库的计算中,Java并没有慢得多,有时甚至更快。


陪伴而非守候
浏览 1453回答 3
3回答

幕布斯6054654

只是加我2美分。我比较了其中一些库。我试图矩阵乘以3000乘3000矩阵的双精度。结果如下。使用带有C / C ++,Octave,Python和R的多线程ATLAS,所花费的时间大约为4秒。使用Jama with Java,所用时间为50秒。使用Colt和Parallel Colt与Java一起使用时间为150秒!使用JBLAS和Java,由于JBLAS使用多线程ATLAS,所以花费的时间大约为4秒。所以对我来说很明显,Java库的表现并不好。但是,如果有人必须使用Java编写代码,那么最好的选择是JBLAS。贾马,科尔特和平行柯尔特并不快。

慕尼黑8549860

我是Java Matrix Benchmark(JMatBench)的作者,我将对这个讨论给出我的看法。Java库之间存在显着差异,虽然在整个运营范围内没有明显的赢家,但在最新的绩效结果(2013年10月)中可以看到一些明显的领导者。如果您正在使用“大型”矩阵并且可以使用本机库,那么明确的赢家(大约快3.5倍)是具有系统优化的netlib的MTJ。如果您需要纯Java解决方案,那么MTJ,OjAlgo,EJML和Parallel Colt都是不错的选择。对于小型矩阵,EJML是明显的赢家。我没有提到的库显示出重大的性能问题或缺少关键功能。
打开App,查看更多内容
随时随地看视频慕课网APP