0

サイズが 800x300 要素の浮動小数点配列に対して、いくつかの要素単位の操作 (加算、乗算、sqrt など) を実行しようとしています。

行列ライブラリ (JAMA、EJML など) を使用してこれを行うと、for ループで要素単位の操作を行うだけで、どの程度のスピードアップ (ある場合) が得られるでしょうか?

for ループはより魅力的に見えます。なぜなら、私の方程式はちょっと複雑になる可能性があるからです。for ループは、すべての方程式をそのまま維持できることを意味します。Java は演算子のオーバーロードをサポートしていないため、マトリックス ライブラリの使用はそれほど単純ではありません。したがって、実際の高速化を意味する場合にのみ、マトリックス ライブラリを使用したいと考えています。(ここでは速度が重要になります。)

4

1 に答える 1

2

そのために、いくつかのマトリックス ライブラリを使用することをお勧めします。ほとんどの場合、単純な for ループと同じくらい速く実行されます。しかし、より速く実行することもできます。したがって、無料で入手できるものは、API と同等またはそれ以上のパフォーマンスです。また、要素単位の操作を記述する際の時間を少し節約できます。

la4jライブラリの作者として言えることは、サードパーティのライブラリを使用すると、新しいリリースからより高速なコードを取得する機会が得られるということです。例えば。必要に応じてla4jを選択できます。現在 (バージョン 0.4.0-0.4.5) では、要素単位の操作に単純な for ループ計算が使用されています。したがって、手書きのコードよりも高速ではありません。しかし、私は現在、la4j 用の新しい並列エンジンを開発中です。これにより、API に大きな変更を加えることなく、コードを並列モードで実行できます。このような:

Matrix a = new Basic2DMatrix(...); // simple 2D array matrix
Matrix b = new Basic2DMatrix(...); // that is too

Matrix c = a.multiply(b); // a * b in sequental mode

Matrix c = a.par().multiply(b); // a * b in parallel mode

したがって、コードの一部を変更するだけで済みます。これらすべての利点は、la4j などのライブラリを使用して無料で利用できます。図書館に仕事を任せて、実際の問題を解決するのにあなたの時間を費やしてください。

于 2013-08-05T06:56:34.330 に答える