一.cacheline
1.cache:解決cpu頻率與內存訪問之間速度差距越來越大的問題
2.cacheline:cpu cache的最小單位,主流為64B
3.指導:訪問數組數據在同一個cacheline內速度很快,若跨cacheline,則速度會慢很多,因為可能存在cache miss,需要將內存數據寫入cache中
二.cacheline與內存之間的映射策略
1.hash策略:hash值的計算需要10K個cycle,無法滿足cache訪問幾個或者幾十個cycle的要求
2.Fully Associative:時間問題
3.Direct Mapped:對每塊內存的訪問是等概率的,否則cache使用率很低,並且沖突很多
4.N-Way Set Associative:高效
a.將N個cacheline分為一組
b.每個cacheline中,根據偏移進行尋址,所以64B,需要6bit進行表示
如下:4M cache,設N=16,則
①4M內存,16個64B的cacheline為一組,共有2^12組Set,用中間12bit表示
②最后6bit表示64B的cacheline內偏移
實際cache尋址過程如下:
①根據64bit表示的addr的12bit計算出set號,這樣的話,只需要在本set內比較16個cacheline即可
②根據最后6bit表示的cacheline偏移,計算偏移地址
③對於set內的16個cacheline,結合前46bit,挨個比較每個cacheline中對應偏移的地址是否與addr相等
④若找到,則命中;否則cache miss
三.cacheline替換策略LRU/Random
1.LRU:最近最少使用算法,核心思想是最近被使用的內存在將來也有很大可能被使用
四、cacheline與內存對齊之間的性能問題
參考:
http://cenalulu.github.io/linux/all-about-cpu-cache/
https://en.wikipedia.org/wiki/Cache_placement_policies