cpu-cache - c++ - キャッシュフレンドリー」なコードとは?

c++ / performance / caching / memory

キャッシュにやさしいコード」と「キャッシュにやさしい」コードの違いは何ですか?

Keet Sugathadasa



Answer #1

ナイーブなマトリックスの乗算は次のようになります。

for(i=0;i<N;i++) {
   for(j=0;j<N;j++) {
      dest[i][j] = 0;
      for( k=0;k<N;k++) {
         dest[i][j] += src1[i][k] * src2[k][j];
      }
   }
}

これをキャッシュに最適化するには、さまざまな方法があります。ここでは非常に簡単な例を紹介します。内側のループでキャッシュラインごとに1つのアイテムを読み込む代わりに、すべてのアイテムを使用します。

int itemsPerCacheLine = CacheLineSize / sizeof(elemType);

for(i=0;i<N;i++) {
   for(j=0;j<N;j += itemsPerCacheLine ) {
      for(jj=0;jj<itemsPerCacheLine; jj+) {
         dest[i][j+jj] = 0;
      }
      for( k=0;k<N;k++) {
         for(jj=0;jj<itemsPerCacheLine; jj+) {
            dest[i][j+jj] += src1[i][k] * src2[k][j+jj];
         }
      }
   }
}