私はC++で2つの行列乗算プログラムを作成しました。通常のMM (ソース)とStrassenのMM (ソース)です。どちらもサイズ2 ^ kx 2 ^ kの正方行列(つまり、偶数サイズの正方行列)で動作します。
結果はひどいです。1024 x 1024マトリックスの場合、通常のMMは46.381 sec
、を取りますが、StrassenのMMは1484.303 sec
(25 minutes
!!!!)を取ります。
私はコードをできるだけ単純に保つように努めました。Web上にある他のStrassenのMMの例は、私のコードとそれほど変わりません。Strassenのコードに関する1つの問題は明らかです。通常のMMに切り替わる、カットオフポイントがありません。
私のStrassenのMMコードには他にどのような問題がありますか?
ありがとう !
ソースへの直接リンク
http://pastebin.com/HqHtFpq9http://pastebin.com/USRQ5tuy
編集1。拳、たくさんの素晴らしいアドバイス。時間を割いて知識を共有していただきありがとうございます。
変更を実装し(すべてのコードを保持)、カットオフポイントを追加しました。2048x2048マトリックスのMM、カットオフ512は、すでに良好な結果をもたらしています。通常のMM:191.49s StrassenのMM:112.179s大幅な改善。結果は、Visual Studio 2012を使用して、IntelCentrinoプロセッサーを搭載した先史時代のLenovoX61 TabletPCで取得されました。さらにチェックを行い(正しい結果が得られたことを確認するため)、結果を公開します。