私は現在、行優先順でメインメモリに格納されている 64 ビット整数要素のnxn 行列 Mを検討しています。16KBのL1データキャッシュが 64B ブロックに分割されています (L2 または L3 はありません)。私のコードは、配列の各要素を一度に 1 つずつ出力することを目的としており、行列を行優先または列優先でトラバースします。
n = 16 (つまり、16 x 16 行列)の場合、行列 M が 16KB キャッシュに完全に収まるので、行優先順と列優先順の両方を使用して 0 キャッシュ ミスをカウントしました (キャッシュにジャンプする必要はありません)。要素を取得するためのメイン メモリ)。たとえば、 n = 256 (64 ビット整数の 256 x 256 行列)の場合、どのように対処すればよいでしょうか。つまり、M がキャッシュに完全に収まらないときは? 適合しないすべての int をミスとして数えますか、それとも空間的局所性を何らかの方法で活用できますか? キャッシュが最初は空であると仮定します。