2016-12-13 4 views
1

私は問題に取り組んでいます(私は自分の知識をチェックしている人にもっと興味があるので、ここで問題を少し変えるつもりです)。誰かがDキャッシュの理解が正確であることを確認できますか?

3つの10x20次元A、B、Cの配列はすべて倍精度浮動小数点数を保持します。 2048行のDキャッシュがあり、それぞれの長さは256バイトです。それは行優先順位です。

そのあとのように実行しますいくつかのコードを持っている:Aがアドレス0x10014000にある

for(i = 0 to 9) 
    for(j = 0 to 19) 
     C[i][j] = A[i][j] + B[i][j] 

、Bは、アドレス0x10019000にあり、Cはアドレスで0x1001E000

で、質問は、読み取りヒットを要求し、ライトミス。

私が理解する限り、倍精度浮動小数点数は8バイトです。行の長さはそれぞれ256バイトであるため、キャッシュの各行は32個の値を保持できます。また、2048行であるため、キャッシュには65536個の値を格納できます。右?

A、B、およびCはそれぞれ200個の要素を有する。それは、AとBの最初の読み込み後のすべてが読み込みヒットになることを意味しますか?そして、Cが最初にDキャッシュにロードされていないときに、書き込みミスが1つしかありませんか?

これは正確なのですか、間違っていますか?それは正しいとは言えませんが、私は何が欠けているのか分かりません。

答えて

0

これは正しくありません。あなたの例では、AとBの最初の "塗りつぶし"は1つのキャッシュラインを満たすにすぎません。これは、行列Aの0x10014000から0x100140ffまでです。そして、0x10014100が必要な場合は、行列Aでキャッシュミスが再び発生します。

は今、私の知る限り理解し、倍精度浮動小数点数は8バイト長であるより何。行の長さはそれぞれ256バイトであるため、キャッシュの各行は32個の値を保持できます。また、2048行であるため、キャッシュには65536個の値を格納できます。右?

そうです。しかし、キャッシュが完全連想型でない限り、キャッシュ容量がコンテンツよりも大きければ、キャッシュミスはないと結論づけることはできない。それは「衝突」と呼ばれます。キャッシュ連想に関するいくつかのリンクがあります

関連する問題