Cache
2.1 Cache的一般設計
cache的產生原因:大容量存儲器的訪問速度和處理器的運行速度不匹配
並且數據之間存在時間相關性和空間相關性,即一個數據現在被訪問以后可能還會被訪問,它周圍的數據也可能會被訪問。

L1cache速度最快,緊密耦合在處理器流水線中。
L1 cache一般包含指令Cache(I-Cache)和數據Cache(D-Cache),一般使用SRAM實現,主要體現“快”。
L2 Cache體現“全”,一般指令和數據共享,要盡量保存更多的內容。
多核情況下,L1 Cache屬於私有,L2與L3可以多核共享。
Cache由Tag和data轉成,data從來保存一片連續地址的數據,tag保存這片連續數據的公共地址。一個Tag和它對應的所有數據組成的一行稱為一個Cache line。


Cache的缺失:cache只能保存最近被處理器使用過的內容,但由於容量有限,很多情況下要找的指令或數據並不在cache中。
直接相連
查找數據時先對比index,再對比tag,最后通過block offset獲得數據實際位置。但index部分相同時,cache對應位置就會被交互訪問,一直缺失。

組相連
思想是一個數據不單單只放在一個cache line中,對index尋址后通過對比tag確定最終哪個cache line才是需要的。如果tag全都比對錯誤,那么說明發生了cache缺失。此種方法因為需要比對tag所以延遲會比較大,但能顯著減少cache缺失發生的頻率。

全相聯
不再需要index,通過tag在整個cache中進行比較。
全相聯cache缺失率最低,延遲也最大。一般使用CAM(Content Address Memory)存儲tag,使用普通SRAM存儲數據。

2.2提高cache的性能
寫緩存

流水線

多級結構

victim cache

本質相當於增加了 way的個數,能夠避免多個數據競爭cache中有限的位置。
2.3 多端口Cache
最原始的多端口Cache將所有Cache中的控制通路和數據通路都進行復制,但這種方法會增大很多面積,並且需要驅動多個端口會增加訪問時間和功耗。
常用方法
multi-banking
將cache分為很多小的banck,每個bank只有一個端口。

2.4 超標量處理器的取指令
n-way的超標量處理器的I-Cache應該支持每周期能至少取出n條指令,這樣才能不浪費流水線。
對於cache來說,一個周期只能訪問一個cache line,除非n條指令在同一個cache line中才可以一次性取出,不然無法取足就會造成流水線性能浪費。
