私は C++、Python、および Java で行列乗算用のプログラムを作成し、2 つの 2000 x 2000 行列を乗算する速度をテストしました (投稿を参照)。標準の ikj-implentation - にある- は次のようになりました。
これで、ウィキペディアにあったように、行列乗算用の Strassen アルゴリズムをPythonと C++ で実装しました。これらは私が持っている時間です:
Strassen 行列乗算が標準の行列乗算よりも遅いのはなぜですか?
アイデア:
- 一部のキャッシュ効果
- 実装:
- エラー (結果の 2000 x 2000 マトリックスは正しい)
- null-multiplication (2000 x 2000 -> 2048 x 2048 ではそれほど重要ではないはずです)
これは、他の人の経験と矛盾しているように見えるため、特に驚くべきことです。
- Strassen Matrix 乗数が非常に高速なのはなぜですか?
- 行列の乗算: Strassen vs. Standard - Strassen も彼にとっては遅かったのですが、少なくとも同程度でした。
編集: 私の場合、Strassen 行列の乗算が遅くなった理由は次のとおりです。
- 私はそれを完全に再帰的にしました (タムを見てください)
- と の 2 つの機能が
strassen
ありstrassenRecursive
ました。最初のものは、必要に応じて行列のサイズを 2 のべき乗に変更し、2 番目のものと呼びました。しかしstrassenRecursive
、再帰的に自分自身を呼び出しませんでしたが、strassen
.