実験として、Strassen Matrix Multiplication Algorithm を実装して、大きな n に対して本当に高速なコードが得られるかどうかを確認しました。
https://github.com/wcochran/strassen_multiplier/blob/master/mm.c
驚いたことに、n が大きいほど高速でした。たとえば、n=1024 の場合、従来の方法を使用すると 17.20 秒かかりましたが、Strassen 方法 (2x2.66 GHz Xeon) を使用すると 1.13 秒しかかかりませんでした。なんと -- 15 倍のスピードアップ!? わずかに高速になるだけです。実際、小さな 32x32 行列にも同じように適しているように見えました!?
これほどの高速化を説明できる唯一の方法は、アルゴリズムがよりキャッシュに適しているということです。つまり、アルゴリズムは行列の小さな断片に焦点を当てているため、データがよりローカライズされています。可能であれば、すべての行列演算を少しずつ行う必要があるかもしれません。
なぜこれがとても速いのかについての他の理論はありますか?