注目★★★★★Lobsters
CPU キャッシュを最悪化させるメモリアクセスパターン、30% 以上の遅延確認
30秒で把握
- 1順序アクセス 133M サイクル → ランダム 1.57B サイクル → ページ stride 1.41B サイクルで測定
- 2ページ単位 stride が L1d キャッシュの 12 way set-associativity を飽和させ実効容量を 48KB から 768B に縮小
- 3キャッシュ行再利用距離 65536 での衝突ミスでランダムアクセス比 30% 以上の追加遅延発生
要約
メモリアクセスパターンの違いが CPU 性能に与える影響を実測した記事。順序アクセスは 133M サイクルだが、ランダムアクセスは 1.57B サイクルで 10 倍以上遅く、さらにページ単位の境界を跨ぐパターンは 1.41B サイクルまで悪化する。これは L1d キャッシュの set-associativity により、ページ単位の stride が同一キャッシュセットへの競合を引き起こし、12 way しかないセットで複数キャッシュラインが衝突するため。結果として 48KB の L1d キャッシュが実効容量 768B に縮小され、キャッシュ行の再利用距離が 65536 に達すると、キャッシュラインの追い出しと再読み込みを繰り返し、ランダムアクセスよりさらに 30% 以上遅くなる。
あなたへの影響
アルゴリズムの時間計算量が同じでも、メモリアクセス順序によってサイクル数が最大 10 倍以上変わることが示された。
推奨:キャッシュミスの詳細メカニズム (set-associativity、ページ境界、prefetcher の制限) を理解することで、大規模データを扱うシステムの予期しない性能劣化の原因を特定し、データレイアウトやアルゴリズム順序を見直す価値がある。