メモリは遅い、キャッシュに乗せろ

MMX+ビットボードでライフゲームを書いたとき、
大きなサイズでもメモリアクセスがネックにならず、意外だった。
1セル当たり1/8バイトという小ささと、ビットボードゆえの演算回数の多さで、
単純なMMXのコードとしては珍しくメモリネックにならなかったのだ。
通常、自分の思考がパンクしない程度の単純な内容であれば、
手書きアセンブラSIMDを使ったコードは、ほぼメモリネックになる。
いくら命令のレイテンシを計算して最適化しても、肝心のデータが来ないのでは意味がない。
無理矢理にでもデータがキャッシュに乗るように分割したり、
プリフェッチ命令やNon-Temporal系の書き込みを使ったりするのが先である。
高速なSIMD命令を使っていると、メモリの遅さは暴力的だ。
だから、CPUにメモリコントローラを内蔵してほしいと思うようになるのだ。