2012-07-05 63 views
9

我有點卡住了,因爲我找不到任何可以覆蓋緩存的「數據」部分的內容,所以我用Google搜索的所有內容都會對緩存尋址產生99.9%的回報。有人問我的問題措辭這樣「數據位」容量vs「開銷位」大小?

 
Contrast the difference between "data bit" capacity and "overhead bit" size 
for the two caches. 

我不想要的答案,所以我沒有要發佈的實際集大小並沒有什麼,我只是在尋找一個方向,也許一個網站或解釋如何「對比」兩者。任何可能的幫助,非常感謝!

+4

學習的最好方法是詢問方向而不是答案 – 2012-07-05 19:43:52

回答

2

我不知道你已經給了我們這個問題足夠的上下文,但在這裏不用。

緩存必須不僅存儲實際緩存數據,也 - 對每一塊的數據 - 的「指數」,它指的是。因此,當您查找記錄N時,緩存不僅要保存記錄N的值,還要保存N - 以便您可以實際查找數據。這是一個非常簡單的看待它的方式。高速緩存可以具有其它元數據以指示有效性和最後訪問時間等

示例#1:在一個32位的地址空間

每個高速緩存條目具有存儲數據值中的字節的高速緩存( 8個比特)加上地址(32位)= 40位,

實施例#2:32位字中的32位地址空間

每個高速緩存條目具有存儲的數據值的高速緩存(32位)加上地址(32位)= 64位,

您可以看到示例#1的開銷顯着較高。

同往常一樣,維基百科可能會有幫助。 http://en.wikipedia.org/wiki/Cache_(computing

+0

當我們定義一個32位的內存地址空間時,它總是32字節+ datasize? – 2012-07-05 20:20:57

+0

@ user1260028 - 好的,沒有。 32位地址空間可容納2^32個字節== 2^30個整數 - 所以在這種情況下您可能只需要30位。取決於你的緩存如何工作。加旗標位... – Roddy 2012-07-05 20:28:44

1

既然您已經標記了計算機體系結構和C我認爲這是一個任務,要求您在C或類似的地方做一個緩存「模擬器」。而且問題中的「兩個緩存」是指兩種不同類型的緩存(完全關聯,n-way,直接映射......)。在這個範圍內,問題是要求您討論兩種類型的緩存之間的差異,主要是「開銷位」大小(這裏是緩存條目需要的信息(有效位,偏移量,標籤)和「數據位「,它是存儲在高速緩存行中的實際數據。 我希望這可以幫助。

2

緩存存儲數據,通常是在如數據陣列SRAM,但也有開銷。我不特別喜歡術語「數據位大小」和「開銷位大小」,因爲(a)存在不是存儲位單元的開銷,並且(b)並非所有的位單元都是同樣昂貴的。但現在讓我們繼續討論這些條款。

我的看法是,「開銷位大小」大概是指需要存儲,以訪問緩存標記的位數。通常這些存儲在不同的數組中,即與數據數組分開的標記數組。比較數據位的數量。

這裏有三個簡單的例子:

考慮一個32 KIB(千字節)的高速緩存,64 B(字節)的高速緩存行。通常,我們會讓地址的0-5位爲緩存行偏移量。

32 KIB /(64 B /線)=> 2 ^(5 + 10)/ 2^6 => 2^9 => 512的高速緩存行。

--- ++例1:直接映射

讓我們想象一下,這是一個直接映射緩存。然後,我們可以將接下來的9位(地址的位6-14)作爲「索引」存入緩存行數組中。

到目前爲止這麼好。現在,爲了找出標籤,我們需要知道完整的地址寬度。我們假設它是64位(儘管大多數「64位」機器僅在2012年實現了40或48位)。爲了區分高速緩存行和映射到高速緩存中相同條目的其他高速緩存行,我們需要將地址的剩餘位(位15-63,49位)存儲爲標記。

訪問這樣一個直接映射的緩存然後通過提取索引,讀取帶有該索引的標籤和數據,將讀出的標籤與我們正在查找的地址的標籤進行比較,如果它們是聲明如果不匹配,那麼匹配和錯過,等等。開銷:每64B(512位)數據有49位標籤。

總計: *標記或「開銷」:512 * 49位 *數據位:512 * 512 = 32KiB = 256 Kib(千比特)。

--- ++示例2:8路組相聯

現在讓我們想象一下,緩存8路關聯。這意味着512行將被劃分爲512/8 = 64個集合,每行包含8行。

高速緩存行內的偏移量仍位0-5。

但是,我們現在只需要6位作爲索引來確定設置數量。位6-11。

標籤需要全部剩餘的位,位12-63,52位總數。

因此,8路聯合緩存的標籤開銷是512位數據的52位標籤。

總計: *標記:512個* 52比特* 數據:512 KIB

比較爲直接映射標記的49位。 8路組相關基本上將log2(8)個位移動到標籤中;一般而言,N路組相關移動將(log2(N))位移入標籤。

--- ++實施例3:全關聯

這是從直接映射頻譜的遠端。每個高速緩存行仍然有512位數據,但現在整個64位地址(除了6位偏移量)都是標記。完全關聯的58位標籤,8路的52位,直接映射的49位。

但記得我說過我不喜歡「頭頂位」這個詞?完全關聯的高速緩存中的標籤位通常必須不僅僅是普通的存儲位,而且還必須具有比較器 - 基本上是異或門。這種「CAM(內容可尋址存儲器)」位通常比普通位更昂貴。

--- +結論

所以,我覺得這是你的老師想要什麼:數據位與標記位的簡單比較。這是開銷的下限。

從直接映射到N路集關聯到完全關聯的頻譜提供了一個例子。但是緩存設計的其他方面會影響開銷。例如:

  • 如果您使用不同的地址大小,百分比開銷會發生變化。例如。在diredt映射的例子中,32位地址只有17位標記,而64位地址只有49位。

  • 如果更改緩存索引功能,則可能必須更改標籤大小。例如,在高速緩存中擁有主要數量的高速緩存行或集合有一些好處,例如, sdirect映射緩存的511行而不是512行。像這樣的素數減少了共振問題。但簡單地說,它們需要將標籤寬度增加到全寬58位。

  • 像扇形緩存這樣的方案允許共享標籤位的某些部分。

依此類推。

至於教程網站:

  • 對不起,我不知道一個這樣的初學者的東西。但我會從許多大學的課堂筆記谷歌。

  • 我的網站,http://comp-arch.net,涵蓋計算機體系結構的高級主題。但是這樣的事情太基本,太簡單了,對我來說就是comp.arch。儘管我想我應該在繼續討論高級主題之前先寫一些簡單的基本解釋。偶爾我會寫這樣的教程,就像這裏一樣,但我沒有收集它們。

  • USEnet新聞組comp.arch可能會有用。

--- +爲什麼這對於程序員在stackoverflow?

這主要是一個硬件話題。

但是,程序員調整代碼需要理解像這樣的東西,以獲得最佳性能。