Java矩阵数学库的性能?[已关闭]

2022-08-31 07:27:41

我们正在计算一些运行时受矩阵运算约束的东西。(如果有兴趣,请在下面提供一些详细信息。此体验引发了以下问题:

人们是否有用于矩阵数学的Java库的性能经验(例如,乘法,逆等)?例如:

我搜索了一下,什么也没找到。


我们的速度比较细节:

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

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

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


答案 1

我是Java Matrix Benchmark(JMatBench)的作者,我将就此讨论发表我的想法。

Java库之间存在显着差异,虽然在整个操作范围内没有明显的赢家,但从最新的性能结果(2013年10月)中可以看出,有一些明显的领导者。

如果您正在使用“大型”矩阵并且可以使用本机库,那么明显的赢家(大约快3.5倍)是具有系统优化netlib的MTJ。如果你需要一个纯Java解决方案,那么MTJOjAlgoEJMLParallel Colt是不错的选择。对于小矩阵,EJML是明显的赢家。

我没有提到的库显示出严重的性能问题或缺少关键功能。


答案 2

只是为了添加我的2美分。我已经比较了其中一些库。我试图用自身将3000乘以3000的双精度矩阵。结果如下。

使用带有C / C++,Octave,Python和R的多线程ATLAS,所花费的时间约为4秒。

将Jama与Java结合使用,花费的时间是50秒。

将Colt和Parallel Colt与Java一起使用,花费的时间是150秒!

将JBLAS与Java结合使用,由于JBLAS使用多线程ATLAS,因此花费的时间再次约为4秒。

所以对我来说,很明显Java库的表现不太好。但是,如果有人必须用Java编写代码,那么最好的选择是JBLAS。Jama,Colt和Parallel Colt的速度并不快。


推荐