キャッシュ置換アルゴリズムについてもっと知りたいです。たとえば、キャッシュがいつ置き換えられるか、どのデータが置き換えられるか、どのデータがキャッシュに持ち込まれるかを知りたいです。gem5のデバッグフラグを使用してこの情報を出力することをお勧めします。私はクラシックキャッシュを使用しています。この情報を出力するためのデバッグフラグを作成しました。しかし、置換アルゴリズムを実行すると、どのセットと方法でデータを出力するのは簡単ですが、キャッシュラインにデータを出力するのは難しいことがわかりました。有効、無効、設定された方法情報のみが置換アルゴリズムに記録されていることがわかったためです。
uint8_t *data
たgem5/src/mem/cache/cache_blk.hh
。これはキャッシュブロックデータである必要がありますが、なぜ1バイトしかないのですか、キャッシュラインは64バイトではありませんか?gem5/src/mem/cache/tags/indexing_policies/set_associative.cc
ファイルのgetPossibleEntries関数がsets[extractSet(addr)]
;を返すことがわかりました。4つのアドレスを返す場合もあれば、8つのアドレスを返す場合もあります。アドレスが配置されているキャッシュセットのすべてのキャッシュラインを常に返す必要はありませんか?それは8つのアドレスですか?ちなみに、私はDerivO3CPUを使用しています。関連するすべての回答に感謝します。
一般的な注意として、CacheReplと呼ばれるデバッグフラグがあります。あなたはそれを使った交換からあなたが必要とするどんな情報でも印刷したいかもしれません。
1-データポインタは、データの最初のバイトへのポインタです。文字列ではありません。最後にnullマーカーはありません。これは、%s
すぐにそれを行うことができないことを意味します。それを印刷するには、blkSize(キャッシュラインサイズ)を使用してすべてのバイトを反復処理する必要があります%x
(例:)for (int i = 0; i < blkSize; i++) printf("%x ", blk->data[i])
。
次の質問は、文字列として出力する場合に役立ちます。C++バイト配列をC文字列に変換する
2-置換ポリシー(RP)で何かを印刷すると、その指定されたRPを使用するすべてのオブジェクトが印刷されます。これには、プリフェッチャー、バッファー、タグなどが含まれます。
システム構成が何であるかはわかりませんが、RandomRPを使用するテーブルが少なくとも2つある可能性があります。少なくとも1つは4方向の結合性を持ち、少なくとも1つは8方向の結合性を持ちます。アドレスが4つある場合、これらは4ウェイ連想テーブルの候補です。8がある場合、それは8方向の連想です。
たとえば、L2キャッシュの置換情報を調べたい場合、それが8方向に関連付けられている唯一のテーブルであることがわかっている場合は、アドレスが4つしかない結果は無視できます。他のテーブルの置き換えを参照してください。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加