Tick-Tock是Intel發展微處理器芯片設計製造業務的一種戰略模式。Intel指出,每一次處理器微架構的更新和每一次芯片製程的更新遵循「Tick-Tock」規律,名稱源於時鐘秒針行走時所發出的聲響。每一次「Tick」表明着一代微架構的處理器芯片製程的更新,而每一次「Tock」表明着在上一次「Tick」的芯片製程的基礎上,更新微處理器架構提高性能。通常一次「Tick-Tock」的週期爲兩年,「Tick」佔一年,「Tock」佔一年。架構
一個例子,下面loop1和loop2 哪一個執行快app
int []arr = new int[64 * 1024 * 1024];
// Loop 1
for (int i = 0; i < arr.Length; i++) arr[i] *= 3;
// Loop 2
for (int i = 0; i < arr.Length; i += 16) arr[i] *= 3;
第二個循環只執行了第一個1/16的計算量,可是兩個循環在計算機上的耗時是差很少的70-80ms;形成這個問題的緣由在於cpu cache line是64bytes,每次從內存加載64Bytes數據到cache;
3.1 Nehalem(三級)結構 oop
L1(每核獨有) 數據32k 指令32K分開性能
L2(每核獨有) 256K
L3(共享) 8Mspa
一類是全關聯cache(full associative cache),一種是直接關聯cache(direct mapped cache),還有一種是N路關聯cache(N-ways associative cache)。設計
全關聯(每一個內存塊可映射到任意cache line),衝突最低,定位慢;直接關聯(每一個內存塊映射到固定的cache line),定位最快,衝突嚴重;N路關聯折中。3d
下圖是8路關聯 cache line定位,共64個set:code
其中:blog
index用於定位set內存
tag用於在set中定位cache line
offet在cache line中定位數據
cache一致性問題描述:
步驟2 update時,根據一致性協議,會先發送Invalid消息到總線,失效core1的cache及RAM;core1讀取Bar時,發現Invalid狀態後,會向總線請求,core2會發送Bar=2給core1的cache。
MESI提供cache一致性保證,表示cache對應的四種狀態及狀態遷移。
Invalid:無有效數據
Shared:與memory有一致數據,讀
Modified:更新數據,與memory不一致
Excusive:與memory有一致數據,單點持有;