メモリ階層と性能

1回のミスで64バイトのラインを読み、主記憶の待ち時間が100 nsのとき、同時に処理できるミスが1つだけなら読み出しの帯域は約0.64 GB/sにとどまる。同時に10個のミスを処理できれば、帯域はおよそいくらになるか。(ほかの制約はないものとする)

  1. A0.064 GB/s
  2. B0.64 GB/s
  3. C6.4 GB/s
答えと解説を見る

正解:C. 6.4 GB/s

帯域は、同時に処理中のデータ量を待ち時間で割って求められます(リトルの法則)。ミスが1つなら 64 B ÷ 100 ns = 0.64 GB/sで、同時に10個処理できれば 10 × 64 B ÷ 100 ns = 6.4 GB/sになります。主記憶の帯域を使いきるには、待ち時間を短くするだけでなく、多くのミスを同時に処理するメモリレベル並列性が欠かせません。0.64 GB/sは同時に1つの場合の値のままで、0.064 GB/sは逆に10で割った値です。

  • A. 0.064 GB/sは10倍ではなく10分の1にした値です。
  • B. 0.64 GB/sは同時に1つしか処理できない場合の値です。
  • C. 正しい。10 × 64 B ÷ 100 ns = 6.4 GB/sです。
この分野を解く 分野ページへ

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

  1. 一度書いたあと当分読み返さない大きなデータを書き出すとき、キャッシュを通さないストア(ノンテンポラルストア)を使う主な利点はどれか。
  2. キャッシュのヒット率が95%のとき、ミス率はいくらか。
  3. ミスしたラインを主記憶から読み込むとき、CPUが必要としている語(ワード)を先に送って、残りを後から送る手法はどれか。
  4. 上の2つのループを1つにまとめる(ループ融合)と、Nが大きいときに速くなりやすい理由はどれか。
  5. 大きな行列を転置する処理(b[j][i] = a[i][j])で、キャッシュのミスが多くなりやすい理由と、代表的な対策の組み合わせとして正しいものはどれか。