私はWhat every programmer should know about memoryを読んでおり、というCPUキャッシュタグ(15ページ)という概念に苦しんでいます。L1d CPUキャッシュタグはどこに格納されていますか?
私が正しく理解すれば、各CPUのキャッシュラインには、メインメモリ内のどのデータが対応するかを指定するタグがあります。つまり、特定の行に書き込む場合は、タグを使用して、RAMのどこにこの行の内容を書き込むべきかを調べます。逆に、RAMからL1キャッシュラインにデータを読み込む場合は、RAMアドレスからタグを計算し、どこかに格納して、L1キャッシュラインのデータがどこから来たのかを知ることができます。タグはポインタのようなものです。
このタグ自体がキャッシュラインのどこかに書かれているのか、タグを保存するためのL1キャッシュの隣に特別なメモリがあるのか質問したいと思いますか?
私のシステムでは、L1ラインサイズは64バイトであり、ポンターは8バイトです。私のプログラムで繰り返し頻繁に繰り返されるオブジェクトを64バイト以下にすることを目指すべきですか?または、タグのサイズがポインタのサイズより大きくならないように、56バイトを目標にする必要がありますか?
ありがとうございました!つまり、キャッシュラインの実際のハードウェアサイズは64 + 1つのタグのサイズですか? –
さらに、有効ビット、汚れたビットなどのような他のものの場合はもう少しです –
エラー修正ビットと、さまざまなパフォーマンス調整のための追加情報(例:置換ポリシーの最新データ)。同じHW構造に存在する必要はなく、タグやデータは分割されることもあります。これは、ヒットしない限りデータにアクセスする必要さえないためです – Leeor