実験として、Strassen Matrix Multiplication Algorithmを実装して、本当に大きなnの高速なコードにつながるかどうかを確認しました。私の驚きにStrassen Matrix乗数がなぜとても速いのですか?
https://github.com/wcochran/strassen_multiplier/blob/master/mm.c
それは大きなnのが速く方法でした。例えば、n = 1024の場合 は、従来の方法を使用して17.20秒かかったのに対し、Strassen法(2x2.66 GHz Xeon)を使用した場合は、1.13秒 しかかかりませんでした。何 - 15倍のスピードアップ!わずかに速くすべきです。実際には、それは小さな32x32マトリックスでさえも良いと思われました!
私はスピードアップのこの多くを説明することができる唯一の方法は、私のアルゴリズムは、より多くのキャッシュフレンドリーであることである - すなわち、それは行列の小片に焦点を当てたため、データがより局所的です。おそらく、可能であれば、すべての母集団の算術演算を少しずつ行うべきです。
なぜこれが速いのか他の理論は?
私の驚いたことに、バージョン1はシュートのすぐ外に出ました。私は正確さに高い自信を持っています。次に標準アルゴリズムの細分化を提案してください。また、標準のalgoをよりキャッシュフレンドリにするために、トランスポーズのテクニックを試してみます。ありがとう。 – wcochran