並行編程——從緩存一致性到內存屏障與volatile

一.CPU高速緩存

1.爲什麼需要高速緩存

現代CPU的速度比現代內存系統的速度快得多,比如在一個主頻爲1.8GHZ的CPU上,每秒有1.8*10^9個時鐘週期,假設每條指令平均需要數個週期,那每秒可執行的指令數亦是相當驚人的,而在這樣一個始終週期內,光在真空鐘只能傳播8cm,在一個5GHZ的時鐘週期內更是降低到了3cm,更糟糕的是,電子在硅鐘的傳播速度是真空鐘光速的1/30到1/3,而一個1cm的距離對於一個現代計算機系統的體積來說還是太小了一點。

如此一來,若每次cpu執行讀取內存的指令後,都等待數十乃至數百個週期去訪問內存,將會大大降低CPU的執行效率,因此爲了匹配CPU與內存訪問的速率,引入了高速緩存。

2.高速緩存結構

CPU高速緩存和內存之間的數據流是固定長度的塊,稱之爲“緩存行“,其大小一般爲2的N次方,範圍一般爲16到256字節。CPU高速緩存的結構爲多路緩存行,所謂多路要先從高速緩存結構是一個由硬件實現的簡單hash表,其中其中每個桶所能容納的元素(緩存行)的數量稱之爲”路“,如下圖所示便是一個16sets的2路高速緩存,以及本機的CPU高速緩存信息,內存與緩存行的映射方式爲地址hash

                               

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章