0

タグが通常どこに格納されているのでしょうか。私は、タグとデータが一緒に格納され、メモリアドレスを持つ一致するタグがあるときにデータ部分にアクセスする前にタグ部分だけがアクセスされるいくつかの結合されたタグデータキャッシュを見てきました。 一方、私は分離された有効なビットと他のビットで完全に分離されたタグとデータキャッシュを見てきました。分離されたタグ配列とデータ配列の組み合わせ

これらのアプローチのどれが一般的に使用されているのか、これらの2つの構造間に性能やエネルギー効率に違いがあるのだろうか?

ありがとうございます。

答えて

1

第1レベルのキャッシュは、一般的に仮想的に索引付けされ、物理的にタグ付けされて実装されます。つまり、仮想アドレスを取得し、インデックスビットを取得し、インデックスビットでインデックスされたエントリのキャッシュ内での検索を開始することを意味します。同時に、仮想アドレスを仮想 - 物理変換ユニット(例:TLB)に発行し、物理アドレスを取得します。

有効ビットが設定されていない場合は、物理アドレスを次のレベルのキャッシュに送ります。有効ビットが設定されている場合(この時点までに、TLBからの物理アドレスがすでに設定されています)、タグの比較を行います。

キャッシュライン+タグの実装は、インデックスビットでインデックスを付けることができるリストタプル(例::in python)と考えてください。リスト内のエントリを見つけたら、選択されたタプルのデータに対して、タグの0番目のエントリと1番目のエントリを確認します。

タグとデータをキャッシュ内で物理的に隣接して維持することが本当に問題になっています。これを行うことでどのようなメリットがありますか?私は、キャッシュを使用するアプリケーションドメインの種類を考えます。

ここでタグとデータ部分は2つの別々のユニットであり、電源を入れたり切ったりすることができます(オフではなく、ただDVFS)。

アプリケーションで(numキャッシュアクセス/ num命令が実行される)比率が高い場合は、キャッシュ要求を受け取る可能性が高いため、電源が投入されてリンクされていることが重要です。生きて行く準備ができています。

アプリケーションで(num cache accesses/num命令が実行された)割合が低い場合は、両方の電源を入れたままで電力を消費することはありません。タグの電源を入れたままにしておけば、データ部分の電源を入れて応答することができます。

+0

返信いただきありがとうございます。私の場合、L1キャッシュは仮想的にインデックス付けされ仮想的にタグ付けされているため(VIVT)、物理アドレスを取得するためにTLBを使用しません。キャッシュでタグとデータを物理的に分離することで、いくつかの長所と短所が変わるでしょうか? – Mrchacha

+0

私はそうは思わない。あなたのキャッシュはVIVTなので、キャッシュミスの場合にはTLBが必要です。したがって、タグとデータを分離しておくことで得られる利点は、仮想アドレスの物理アドレスを使用するかどうかにかかわらず、どのような利点がありますか。 –

+0

最後に、タグ配列とデータ配列のサイズは等しくなります。私はいつもインデックスビットを使ってタグ配列とデータ配列の両方を探しますか?エントリ数を意味する場合は、サイズで – Mrchacha

関連する問題