2012-04-29 66 views
5

我很抱歉,如果這是錯誤的堆棧交換;它似乎是最接近一個可能對計算機體系結構有所幫助的地方。對於在計算機系統中的作業問題,有人問我:直接映射緩存命中/小姐

Consider three direct mapped caches X, Y, and Z each interpreting an 
8-bit address slightly differently according to the {tag:setIdx:byteOffset} 
format specified. For each address in the reference stream, indicate whether the 
access will hit (H) or miss (M) in each cache. 

        C1  C2  C3 
Address Formats: {2:2:4} {2:3:3} {2:4:2} 

Address References in Binary: 00000010, 00000100... 

我應該說是否每個地址的引用將導致一個命中或缺失,但我不知道從哪裏開始。

對於格式,我認爲標記意味着緩存塊中數據的標記,setIdx意味着給出的位數以表示緩存中不同的塊,偏移量是塊中的特定字節可以選擇。

我覺得我不明白什麼是命中或錯過。我認爲有三種類型:強制性,能力和衝突。如果我不知道緩存中已有什麼,我怎麼會知道哪個是強制性錯過?如何判斷給定標籤格式的緩存容量?

感謝您的任何提示或提示。

回答

3

以C1爲例,它具有2位setIdx和4位byteOffset。所以這個緩存將有2^2 = 4個塊(00,01,10和11),並且每個塊將有2^4 = 16個字節。

地址參考現在可以分成C1格式:{00 00 0010}

假設高速緩存默認爲空,所述第一查找將導致未命中。但是,高速緩存現在將具有標記「00」加載的塊「00」。

下一個參考{00 00 0100}將查找塊「00」,它看到標籤也是「00」,我們有一個命中。

+0

那麼字節偏移是什麼? – KWJ2104

+0

字節偏移量是一個塊的大小。例如,使用與上面相同的參考,假設C1在塊{00}中加載了{00 00 0010},則該塊包含存儲器{00 00 0000}到{00 00 1111}。但是,如果您嘗試查找{01 00 0010},則會因爲標記不同而錯過。 (另外我假設這是一個單向集合關聯映射) –

1

我不認爲你會受到打擊。即使地址00 00 0100將查找同一個塊,它也會在內存中查找不同的地址。在直接映射的高速緩存命中只是通過嘗試訪問連續指令中同一塊內存中的相同地址而導致的。內存中的地址由字節地址給出,而不是塊號。直接映射緩存將替換塊的內容,只要它不嘗試訪問塊中的相同地址即可。如果00 00 0100在另一個00 00 0100之前,那麼在直接映射的高速緩存中會有一個命中。

在關聯的緩存中,由塊編號給出的存儲器地址而不是字節地址,因此在這裏產生命中。

塊號由floor(字節地址/字節每塊)mod(塊數)給出

+0

一般來說,緩存加載一個未命中的整個塊而不僅僅是請求的字節。 (一些高速緩存使用分區,每塊提供多於一個有效位,但沒有主流處理器每字節或每4字節塊提供有效位。另外,對於當前的DRAM,最小突發長度爲4,這可能會降低性能 - 所以64位寬的接口可以提供*最小* 32字節的傳輸。) –

+0

@ PaulA.Clayton您還可以看看這個緩存問題嗎? HTTP://計算器。COM /問題/ 30555623 /如何一對多位 - 是 - 在最地址場-FOR-A-直接映射緩存 – committedandroider