メモリ階層と性能
キャッシュの構成、タグ・セット・オフセットの計算、置き換え方式と書き込み方式、ミスの3分類、平均メモリアクセス時間など、メモリ階層と性能を3択問題で学べます。
—あなたの正答率
0 / 50解いた問題
メモリ階層と性能の要点
CPUの演算は1ナノ秒もかからないのに、主記憶のDRAMからデータを読むには数十〜100ナノ秒かかります。この差を埋めるため、コンピュータは小さく速いキャッシュから大きく遅い主記憶やストレージまでを階層に重ね、よく使うデータを速い場所に置いています。
キャッシュがうまく働くのは、プログラムに時間的局所性と空間的局所性があるからです。ダイレクトマップやセットアソシアティブの構成、アドレスをタグ・インデックス・オフセットに分ける計算、ミスの3分類、平均メモリアクセス時間の求め方を知ると、データの並べ方やループの順番で性能が何倍も変わる理由が分かります。
メモリ階層と性能の問題一覧(50問)
- 時間的局所性の例として最も適切なものはどれか。
- C言語の2次元配列a[i][j]を上のように内側のループをjにして走査すると、内側をiにするより速くなりやすい。その理由はどれか。
- アドレスが32ビット、容量32 KB、ラインサイズ64バイトのダイレクトマップ方式のキャッシュで、タグは何ビットになるか。
- アドレスが32ビット、容量32 KB、ラインサイズ64バイトの4ウェイ・セットアソシアティブ方式のキャッシュのセット数はいくつか。
- フルアソシアティブ方式のキャッシュで、アドレスのうちインデックス(セットを選ぶ部分)に使うビット数はどれか。
- L1キャッシュのヒット時間が1 ns、ミス率が5%、L2キャッシュのヒット時間が10 ns、L2のローカルミス率が20%、主記憶のアクセス時間が100 nsのとき、平均メモリアクセス時間はいくらか。
- ダイレクトマップ方式のキャッシュで、2つの配列の要素が同じキャッシュの位置に対応し、交互にアクセスするたびに互いを追い出し合っている。このミスの分類はどれか。
- プログラムがあるデータに初めてアクセスしたときに起こるキャッシュミスを減らす方法として、効果があるものはどれか。
- キャッシュをフルアソシアティブ方式にしても減らないミスとして正しいものはどれか。
- キャッシュのラインサイズを大きくしたときの影響として正しいものはどれか。
- ライトスルー方式のキャッシュで、書き込みバッファを設ける主な目的はどれか。
- ライトバック方式のキャッシュで、各ラインに付けるダーティビットの役割として正しいものはどれか。
- 書き込みでキャッシュミスしたときに、そのラインを読み込まず、下の階層へ直接書き込む方式はどれか。
- 容量2ラインのフルアソシアティブ方式でLRU置き換えのキャッシュが最初は空のとき、ブロックをA、B、A、C、B、Aの順に参照すると、ミスは何回起こるか。
- ハードウェアのプリフェッチが特に効果を発揮しやすいアクセスはどれか。
- ソフトウェアのプリフェッチ命令を入れるとき、どれだけ先のデータを読むか(プリフェッチの距離)についての説明として正しいものはどれか。
- 上のループでintが4バイト、キャッシュラインが64バイト、配列はキャッシュに入っておらず先頭がラインの境界にそろっているとき、プリフェッチがなければ配列の読み込みのミス率はいくらか。
- 行列の積などで使われるループブロッキング(タイリング)の主な目的はどれか。
- 上のようにx座標だけを合計する処理を、配列の構造体(各成分を別々の配列にする形)に書き換えると速くなりやすい理由はどれか。
- キャッシュを命令用(Iキャッシュ)とデータ用(Dキャッシュ)に分けたL1キャッシュの主な利点はどれか。
- ページサイズ4 KB、ラインサイズ64バイトのシステムで、L1キャッシュを仮想インデックス・物理タグ(VIPT)方式にし、インデックスとオフセットをページ内のビットだけで構成したい。8ウェイ・セットアソシアティブなら、キャッシュの容量は最大いくらにできるか。
- L1キャッシュに仮想インデックス・物理タグ(VIPT)方式がよく使われる主な理由はどれか。
- キャッシュのヒット時間が2サイクル、ミス率が4%、ミスペナルティが150サイクルのとき、平均メモリアクセス時間は何サイクルか。
- キャッシュが理想的なら平均CPIが1.0のプロセッサで、1命令あたり平均1.3回のメモリアクセスがあり、そのミス率が2%、ミスペナルティが100サイクルのとき、実際の平均CPIはいくらか。
- ノンブロッキングキャッシュ(ミスの処理中もほかのアクセスを受け付けるキャッシュ)の主な利点はどれか。
- L1キャッシュのミス率(全アクセスに対する割合)が4%、L2キャッシュのグローバルミス率(全アクセスのうちL2でもミスする割合)が1%のとき、L2のローカルミス率はいくらか。
- TLBのエントリが64個で、ページサイズが4 KBのとき、TLBのミスなしでアクセスできるメモリの範囲(TLBリーチ)はいくらか。
- 大きなページ(ヒュージページ)を使う主な利点と欠点の組み合わせとして正しいものはどれか。
- 2次元配列の1行の大きさが4096バイト(2の累乗)のとき、列方向に要素をたどると、キャッシュの容量に余裕があってもミスが多くなることがある。その対策として効果があるものはどれか。
- 主記憶のDRAMへのアクセスにかかる時間は、L1キャッシュのヒット時間のおよそ何倍か。(一般的なPCやサーバーのCPUの場合)
- キャッシュの各ラインに付けられる有効ビット(valid bit)の役割として正しいものはどれか。
- 小容量のフルアソシアティブ方式のバッファに、L1キャッシュから追い出されたラインを一時的に保持するビクティムキャッシュの主な効果はどれか。
- L1キャッシュの下にL2キャッシュを置く多段のキャッシュで、L2キャッシュの主な役割はどれか。
- 下位のキャッシュ(L2など)が上位のキャッシュ(L1)の内容をすべて含むインクルーシブ方式の特徴として正しいものはどれか。
- ダイレクトマップ方式からセットアソシアティブ方式に変えたときに起こる変化として、正しいものはどれか。
- 8ウェイ・セットアソシアティブ方式のキャッシュで、1回のアクセスのたびに並列に比べるタグの数はいくつか。
- ラインサイズ64バイト、セット数64のキャッシュで、アドレス0x1234のデータが入るセットの番号はどれか。
- 同じラインに何度も書き込む処理で、ライトスルー方式よりライトバック方式の方が有利になる主な理由はどれか。
- 最も長い間使われていないものを追い出すLRUに対して、今後最も長い間使われないものを追い出す方式(最適置き換え、OPT)についての説明として正しいものはどれか。
- キャッシュの容量を大きくすると一般にヒット時間がどうなるか。その理由とあわせて正しいものはどれか。
- 上の連結リストをたどる処理が、同じ数の要素をもつ配列を順に読むより大幅に遅くなりやすい理由はどれか。
- 1回のミスで64バイトのラインを読み、主記憶の待ち時間が100 nsのとき、同時に処理できるミスが1つだけなら読み出しの帯域は約0.64 GB/sにとどまる。同時に10個のミスを処理できれば、帯域はおよそいくらになるか。(ほかの制約はないものとする)
- 一度書いたあと当分読み返さない大きなデータを書き出すとき、キャッシュを通さないストア(ノンテンポラルストア)を使う主な利点はどれか。
- キャッシュのヒット率が95%のとき、ミス率はいくらか。
- ミスしたラインを主記憶から読み込むとき、CPUが必要としている語(ワード)を先に送って、残りを後から送る手法はどれか。
- 上の2つのループを1つにまとめる(ループ融合)と、Nが大きいときに速くなりやすい理由はどれか。
- 大きな行列を転置する処理(b[j][i] = a[i][j])で、キャッシュのミスが多くなりやすい理由と、代表的な対策の組み合わせとして正しいものはどれか。
- 一般的なコンピュータの記憶階層で、上の階層(CPUに近い側)ほど成り立つ性質として正しいものはどれか。
- キャッシュの性能を評価するとき、ミス率だけでなく平均メモリアクセス時間で比べる必要がある理由として正しいものはどれか。
- 2つのプログラムを同じコアで交互に実行すると、それぞれを単独で実行するより遅くなることがある。キャッシュの観点から最も適切な説明はどれか。