やかんです。
今回も前回に続き、キャッシュについて復習していこうと思います。
※内容は僕のパブリックなメモでしかないです。
復習の前に。
結局、自分で説明できるかってところに尽きる気がするんだよね。
1. セットアソシアティブ方式とは?
キャッシュの実装方法としてはこれが一般的。
キャッシュの方式について考えるときには、「なんでこの方式が成立したのか(なんでこれが効率的なのか)」は後回しで考えた方がいいと思われる。難しすぎるし、それだけでレポート書けると思う。だからキャッシュの方式は経路依存的に最初は理解しちゃって、大枠だけ掴むように心がけよう。
というわけでセットアソシアティブ方式だけど、メモリアドレスをインデックスとかに分解する方法はダイレクトマップ方式と同じ。違いは、ダイレクトマップ方式におけるインデックスが1つのキャッシュラインに対応していたのに対し、セットアソシアティブ方式におけるインデックスは複数のキャッシュラインに対応(つまり、複数のキャッシュラインの組みからなる「セット」のインデックスに相当)する点。
2. キャッシュラインの数が減ると何が起きる?
めっちゃ競合が生じる。これは当然。
3. セットアソシアティブ方式はダイレクトマップ方式に比べて見かけのキャッシュラインが減っているようだけど、競合という観点から不都合はないの?
セットアソシアティブにはway数という概念がある。
ダイレクトマップも1wayのセットアソシアティブと言えるが。
way数が2以上である場合は、インデックス(セットインデックス)での競合が生じても、way数でカバーできる。だから、競合という観点からの不都合は払拭されているはず。
つまり、N wayのセットアソシアティブの場合は、N個の競合まで許容可能ということ。
4. キャッシュミスの3Cを説明せよ。
- 初参照ミス
- これは特に得に言うことない。
- 競合ミス
- セットアソシアティブでway数が不足する場合。way数以上に競合が起きちゃった場合に生じるが、フルアソシアティブなら生じない。
- 容量性ミス
- キャッシュの容量不足。容量増やしましょう。
ライトスルーやライトバックは大丈夫。というわけで、一通りキャッシュについては見終えたことになる。次は仮想記憶かな。
というわけでこちらのメモ終了。最後までお読みいただき、ありがとうございます。