メモリ階層と性能

2つのプログラムを同じコアで交互に実行すると、それぞれを単独で実行するより遅くなることがある。キャッシュの観点から最も適切な説明はどれか。

  1. A交互に実行すると、それぞれが実行する命令の数そのものが2倍に増えるから
  2. B交互に実行すると、キャッシュの容量が半分に設定し直されるから
  3. C相手のデータに自分のデータが追い出され、読み直しが増えるから
答えと解説を見る

正解:C. 相手のデータに自分のデータが追い出され、読み直しが増えるから

プログラムを切り替えると、相手のプログラムが使ったデータでキャッシュやTLBが埋まり、自分の番が戻ってきたときには必要なデータが追い出されています。そのため、単独なら当たっていたアクセスでミスが起こり、データを主記憶から読み直す時間がかかります。切り替えの間隔が短いほど、この影響は大きくなります。実行する命令の数は変わらず、キャッシュの容量が設定し直されるわけでもありません。キャッシュを分け合う影響によるものです。

  • A. それぞれの命令の数は変わりません。
  • B. キャッシュの容量が変わるわけではありません。
  • C. 正しい。相手のデータに追い出され、読み直しのミスが増えます。
この分野を解く 分野ページへ

メモリ階層と性能のほかの問題

  1. 時間的局所性の例として最も適切なものはどれか。
  2. C言語の2次元配列a[i][j]を上のように内側のループをjにして走査すると、内側をiにするより速くなりやすい。その理由はどれか。
  3. アドレスが32ビット、容量32 KB、ラインサイズ64バイトのダイレクトマップ方式のキャッシュで、タグは何ビットになるか。
  4. アドレスが32ビット、容量32 KB、ラインサイズ64バイトの4ウェイ・セットアソシアティブ方式のキャッシュのセット数はいくつか。
  5. フルアソシアティブ方式のキャッシュで、アドレスのうちインデックス(セットを選ぶ部分)に使うビット数はどれか。