Java矩阵数学库的性能?

我们正在计算一些运行时受矩阵运算约束的东西。 (如果有兴趣,请参阅下面的一些细节。)这种体验引发了以下问题

民间人士是否具有矩阵数学Java库的性能的经验(例如,乘,反等)? 例如:

  • JAMA
  • 小马
  • 阿帕奇公用计算器
  • 我搜索,没有发现任何东西


    我们的速度比较详情:

    我们正在使用英特尔FORTRAN(ifort(IFORT)10.1 20070913)。 我们已经使用Apache commons math 1.2 matrix ops在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的速度并不是很慢,有时甚至更快。


    只需添加我的2美分。 我比较了一些这些库。 我试图将3000×3000的双打矩阵与自身矩阵相乘。 结果如下。

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

    在Java中使用Jama,所花费的时间是50秒。

    在Java中使用Colt和Parallel Colt时间为150秒!

    随着JBLAS和Java的使用,JBLAS使用多线程ATLAS的时间又缩短了大约4秒。

    所以对我来说很明显,Java库的表现并不好。 但是,如果有人需要用Java编写代码,那么最好的选择是JBLAS。 贾马,柯尔特和平行柯尔特并不快。


    我是Java矩阵基准测试(Java Matrix Benchmark,JMatBench)的作者,我会就这个讨论给出我的想法。

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

    如果您正在使用“大型”矩阵并且可以使用本地库,那么明确的获胜者(大约3.5倍)是带有系统优化netlib的MTJ。 如果您需要纯Java解决方案,那么MTJ,OjAlgo,EJML和Parallel Colt都是不错的选择。 对于小型矩阵,EJML是明显的赢家。

    我没有提到的图书馆显示了重大的性能问题或缺少关键功能。


    我是jblas的主要作者,并且想指出我已经在2009年12月下旬发布了1.0版本。我在包装上做了很多工作,这意味着您现在可以使用ATLAS和JNI库下载一个“胖罐子”适用于Windows,Linux,Mac OS X,32和64位(Windows除外)。 这样,只需将jar文件添加到类路径中即可获得本机性能。 查看http://jblas.org!

    链接地址: http://www.djcxy.com/p/85977.html

    上一篇: Performance of Java matrix math libraries?

    下一篇: Measure execution time in C++ OpenMP code