Java 行列数学ライブラリのパフォーマンスは? [closed] 質問する

Java 行列数学ライブラリのパフォーマンスは? [closed] 質問する

私たちは、実行時間が行列演算によって制限される何かを計算しています。(興味のある方は、以下に詳細を示します。) この経験から、次の疑問が浮かびました。

行列計算 (乗算、逆行列など) 用の Java ライブラリのパフォーマンスについて経験のある方はいらっしゃいますか? たとえば、次のようになります。

検索しましたが何も見つかりませんでした。


速度比較の詳細:

Intel FORTRAN (ifort (IFORT) 10.1 20070913) を使用しています。Apache commons math 1.2 行列演算を使用して Java (1.6) で再実装しましたが、精度の桁はすべて一致しています (Java で実行したい理由があります) (Java は double、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(JMatベンチ)そして、この議論についての私の考えを述べたいと思います。

Javaライブラリには大きな違いがあり、すべての操作において明確な勝者はいないものの、次の表に見られるように、いくつかの明確なリーダーが存在します。最新のパフォーマンス結果(2013年10月)。

「大きな」行列を扱っていて、ネイティブライブラリを使用できる場合、明らかに勝者となるのは(約3.5倍高速)MTJシステム最適化されたnetlib純粋なJavaソリューションが必要な場合はMTJオジアルゴEJMLそしてパラレルコルトは良い選択です。小さな行列の場合、EJML が明らかに勝者です。

私が言及しなかったライブラリでは、重大なパフォーマンスの問題が発生したり、重要な機能が欠けたりしていました。

おすすめ記事