【发布时间】:2010-10-06 11:30:39
【问题描述】:
我们正在计算一些运行时间受矩阵运算约束的东西。 (如果有兴趣,下面的一些细节。)这次经历引发了以下问题:
人们是否对用于矩阵数学(例如乘法、逆运算等)的 Java 库的性能有经验?例如:
我搜索了一下,一无所获。
我们的速度对比详情:
我们使用的是英特尔 FORTRAN(ifort (IFORT) 10.1 20070913)。我们使用 Apache commons math 1.2 矩阵运算在 Java (1.6) 中重新实现了它,并且它同意其所有数字的准确性。 (我们有理由在 Java 中使用它。)(Java doubles,Fortran real*8)。 Fortran:6 分钟,Java 33 分钟,同一台机器。 jvisualm 分析显示在 RealMatrixImpl.{getEntry,isValidCoordinate} 中花费了很多时间(这似乎在未发布的 Apache commons math 2.0 中消失了,但 2.0 并没有更快)。 Fortran 正在使用 Atlas BLAS 例程(dpotrf 等)。
显然,这可能取决于我们在每种语言中的代码,但我们相信大部分时间都是在等效矩阵运算中。
在其他几个不涉及库的计算中,Java 并没有慢很多,有时甚至快得多。
【问题讨论】:
-
棘手的矩阵数学运算至少是 O(n^3)... 更糟的是,我想您可以花时间测试...
-
为什么需要倒数?对于几乎所有应用程序,您不需要实际的逆。由于稳定性问题,计算逆是个坏主意。
-
@Calyth:是的,我们可以安排时间。我想知道其他人是否已经有了。 @Ying Xiao:是的,要避免倒数。然而,这种计算似乎使用它最直接。见en.wikipedia.org/wiki/…。
-
@Calyth 错了,使用分而治之的方法有比 O(n^3) 更有效的方法。
-
最快的原生性能来自 JCublas。如果您需要快速线性代数,则需要 GPU。带有 clMath 的 JOCL 也可以工作并且可以移植到 CPU(甚至是多平台,无需重新编译),但我还没有测试过。
标签: java math matrix performance