エンベデッドシステムスペシャリスト 2009年 午前2 問04
問題文
容量64kバイト、ブロックサイズ32バイトのキャッシュメモリをもつ32ビットMPUが、主記憶から1Mバイトの32ビット整数型配列データを連続して読み出した。このとき、キャッシュメモリのミスヒット率は何%か。ここで、配列データ以外のデータはレジスタに割り当てられているものとし、kは、Mはを表す。
選択肢
ア:0.006
イ:0.05
ウ:6.4
エ:12.5(正解)
🔒 解説は解答すると表示されます
キャッシュミス率の計算【午前2解説】
正解の理由
配列の整数型は32ビットなので、1要素の大きさは4バイトです。キャッシュのブロックサイズは32バイトのため、1ブロックには整数型配列の要素が8個入ります。
配列を先頭から順に読み出すと、各ブロックの最初の要素を読むときにミスし、同じブロック内の残り7要素を読むときはヒットします。したがって、8回のメモリアクセスにつき1回ミスします。
よって、エが正解です。
解法ステップ
-
32ビット整数型の1要素の大きさを求めます。
バイトです。 -
1ブロックに入る配列要素数を求めます。
要素です。 -
連続して読み出すと、ブロックごとに最初の1要素でミスし、残り7要素でヒットします。
-
ミスヒット率を計算します。
です。
選択肢別の誤答解説
-
ア:0.006
ブロックサイズと要素サイズから求める「8要素に1回」という関係を使えていません。ミスヒット率は配列全体の容量比ではなく、メモリアクセスのうちミスした回数の割合です。 -
イ:0.05
ブロック内の要素数を正しく求められていない場合に生じやすい値です。32バイトのブロックには、4バイトの整数型要素が8個入ります。 -
ウ:6.4
キャッシュ容量と配列データの容量を比べた割合などと、ミスヒット率を混同した値と考えられます。ミスヒット率はブロックサイズと1要素の大きさから求めます。 -
エ:12.5
8回の読み出しにつき1回ミスするため、ミスヒット率は12.5%です。
よくある誤解
-
キャッシュ容量が大きいほど、今回のミスヒット率も下がると考える
この問題では、連続読み出し時にブロック内の何要素を使うかがポイントです。1ブロックを8要素で利用するため、ミスヒット率は12.5%になります。 -
配列データ全体の容量に対するキャッシュ容量の割合を、ミスヒット率とする
ミスヒット率は、メモリアクセス回数に対するミス回数の割合です。容量同士の比ではありません。 -
ブロックを読み込んだ後も、同じブロック内の要素を読むたびにミスすると考える
ブロック単位でキャッシュに取り込まれるため、同じブロック内の後続要素はヒットします。
補足コラム
配列全体の大きさは1MiBですが、この問題では各ブロックの最初のアクセスで1回ミスし、そのブロックに含まれる残りの要素ではヒットします。実際には、1MiBの配列から32バイトずつブロックを読み込むため、ブロック数は
です。配列要素へのアクセス回数は
なので、ミスヒット率は と確認できます。
FAQ
Q. キャッシュ容量64KiBは計算に使わないのですか?
A. この問題のミスヒット率を求める計算には、直接使いません。ブロックサイズと配列要素の大きさから、1ブロックあたりのアクセス回数を求めます。
A. この問題のミスヒット率を求める計算には、直接使いません。ブロックサイズと配列要素の大きさから、1ブロックあたりのアクセス回数を求めます。
Q. 配列がキャッシュ容量より大きくても、ミスヒット率は12.5%ですか?
A. このように配列を先頭から順に一度読み出す場合、ブロックごとに最初のアクセスでミスし、残りでヒットする関係は変わらないため、12.5%です。
A. このように配列を先頭から順に一度読み出す場合、ブロックごとに最初のアクセスでミスし、残りでヒットする関係は変わらないため、12.5%です。
関連キーワード: キャッシュメモリ、ブロックサイズ、ミスヒット率、局所性

\ せっかくなら /
エンベデッドシステムスペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

