int
10 個の要素の配列があるとします。64 バイトのキャッシュラインでは、 から までの 16 個の配列要素を保持できarr[0]
ますarr[15]
。
arr[5]
たとえば、 L1 キャッシュからレジスターにフェッチするとどうなるか知りたいです。この操作はどのように行われますか? CPU はオフセットをキャッシュラインに取り込んで次のn
バイトを読み取ることができますか?
int
10 個の要素の配列があるとします。64 バイトのキャッシュラインでは、 から までの 16 個の配列要素を保持できarr[0]
ますarr[15]
。
arr[5]
たとえば、 L1 キャッシュからレジスターにフェッチするとどうなるか知りたいです。この操作はどのように行われますか? CPU はオフセットをキャッシュラインに取り込んで次のn
バイトを読み取ることができますか?
キャッシュは通常、フル ライン (この場合は 64B) を提供し、MMU 内の別のコンポーネントが、要求されたオフセットとサイズに応じて結果 (通常はバレル シフター) をローテーションおよびカットします。通常、途中でいくつかのエラー チェック (キャッシュが ECC メカニズムをサポートしている場合) も取得します。
多くの場合、キャッシュはバンクで編成されるため、読み取りでは複数の場所からバイトをフェッチする必要がある場合があることに注意してください。完全な行を提供することにより、キャッシュは、MMU に関連する部分を選択させる前に、最初に適切な順序でバイトを構築 (およびチェックを実行) できます。
省電力に焦点を当てた一部の設計では、より低い粒度を実装することを決定する場合がありますが、多くの場合、分割されている線セグメントのより多くのケースに対処する必要があるため、これは複雑さを追加するだけです。