今まで3回にわたって、行列サイズがコンパイル時にわかる場合の正方行列乗算の最適化を取り扱ってきました(行列乗算の最適化入門 - よーる、行列乗算の最適化入門(マルチコア編) - よーる、行列乗算の最適化入門(GPGPU編) - よーる)。 行列サイズがコンパイル時にわかる場合は、コンパイラの自動ベクトル化だけで限界に近い性能が出ました。 今回はちゃんとした行列積プログラム、つまり行列サイズがコンパイル時にわからない場合の正方行列乗算の最適化をやっていきます。 配列のオーバーラップを気にしているのか、どうにもコンパイラの自動ベクトル化ではうまくいかなかったので、ちょっとだけアセンブリ言語に手を出しました。 5×4レジスタブロッキングカーネル 行列乗算の最適化入門(マルチコア編) - よーるで示したように、レジスタブロッキングは5×4が最適でした。 これについて、なぜそうなるかの説明は難しいで