Lockup-free instruction fetch/prefetch cache organizationD. Kroft. Lockup-free instruction fetch/prefetch cache organization. In ISCA-8, pages 81--87, May 1981.
MSHR (Miss information/status holding register)について書かれた最初の論文(らしい)。MSHRは、ロードやプリフェッチをしたとき、latencyを隠すことができる仕組み。これがないと、キャッシュミスしたときポカーンと待っていないといけない。
キャッシュミスしたとき、プロセッサはデータがキャッシュにやってくるときまで、ストールする。でも、実際には、別にストールしなくても処理を続けられる。例えば、prefetchしてデータキャッシュでミスが起きたとしても、それ以降の命令に必要なデータが存在していれば、実行できる。
そこで、この論文では、MSHRというモジュールをつけて、キャッシュミスをして、メモリにアクセスにいっている間でもキャッシュのアクセスができるようにした。
主な構成は次のとおり
1. MSHR: 各ミスに対してひとつづつ割り当てる。
2. n個のcomparator: nはMSHRの個数。メモリから転送中のデータにヒットしたどうか調べる。
3. input stack: まだ転送中のデータを蓄えておくところ。キャッシュのブロックサイズ x MSHRの個数n分必要。
4. MSHRの状態を更新するネットワーク
5. 1.から4を制御するcontrol unit.
基本的な考え方は、メインメモリからキャッシュにデータを読み込んでいる間は、input stackに蓄えておき、ほかのキャッシュアクセスができるようにする。
まだ、処理が終わっていないときに、おなじアドレスに対してリクエストが着たら、後に来たリクエストで、キャッシュは置き換えるようにする(最初のリクエストでキャッシュは書き換えない)。
メモリからキャッシュにデータを読んだら、すぐにCPUにデータを返すためのバイパスがある。
MSHR (Miss information/status holding register)について書かれた最初の論文(らしい)。MSHRは、ロードやプリフェッチをしたとき、latencyを隠すことができる仕組み。これがないと、キャッシュミスしたときポカーンと待っていないといけない。
キャッシュミスしたとき、プロセッサはデータがキャッシュにやってくるときまで、ストールする。でも、実際には、別にストールしなくても処理を続けられる。例えば、prefetchしてデータキャッシュでミスが起きたとしても、それ以降の命令に必要なデータが存在していれば、実行できる。
そこで、この論文では、MSHRというモジュールをつけて、キャッシュミスをして、メモリにアクセスにいっている間でもキャッシュのアクセスができるようにした。
主な構成は次のとおり
1. MSHR: 各ミスに対してひとつづつ割り当てる。
2. n個のcomparator: nはMSHRの個数。メモリから転送中のデータにヒットしたどうか調べる。
3. input stack: まだ転送中のデータを蓄えておくところ。キャッシュのブロックサイズ x MSHRの個数n分必要。
4. MSHRの状態を更新するネットワーク
5. 1.から4を制御するcontrol unit.
基本的な考え方は、メインメモリからキャッシュにデータを読み込んでいる間は、input stackに蓄えておき、ほかのキャッシュアクセスができるようにする。
まだ、処理が終わっていないときに、おなじアドレスに対してリクエストが着たら、後に来たリクエストで、キャッシュは置き換えるようにする(最初のリクエストでキャッシュは書き換えない)。
メモリからキャッシュにデータを読んだら、すぐにCPUにデータを返すためのバイパスがある。