CPU的性能優(yōu)化

1、CPU的緩存
CPU存在三級(jí)緩存分別是L1,L2,L3,其中L1的大小在32-4096KB,緩存的大小也是從L1到L3逐漸增加,其中大多數(shù)情況下是多核CPU共享一個(gè)L3緩存。
CPU讀取數(shù)據(jù)的時(shí)候是先讀取L1,然后L2,最后L3,要是緩存中沒(méi)有的話才從主存中讀取,最后主存中也咩有的話就從外存中讀取。
然后每個(gè)CPU都有自己的緩存那么怎么保證的數(shù)據(jù)一致性呢,就是通過(guò) 緩存同步協(xié)議。
1.1、緩存同步協(xié)
緩存一致性規(guī)定緩存要有四種狀態(tài)。分別是1、修改態(tài),2、專有態(tài),3、共享態(tài),4、無(wú)效態(tài)
1、修改態(tài):緩存中的數(shù)據(jù)已經(jīng)相對(duì)于主存有修改了,屬于緩存專有。
2、專有態(tài):緩存和主存中的數(shù)據(jù)相同,屬于緩存專有。
3、共享態(tài):緩存和主存中的數(shù)據(jù)相同,屬于緩存專有。
4、無(wú)效態(tài):緩存和主存中的數(shù)據(jù)已經(jīng)不同,切該cache已經(jīng)無(wú)效。
多核CPU中,CPU對(duì)于數(shù)據(jù)的修改需要通知給其他的CPU。
那就意味著,多核CPU在執(zhí)行的時(shí)候不僅要控制自己的數(shù)據(jù)讀寫,同時(shí)還要監(jiān)聽(tīng)別的CPU對(duì)數(shù)據(jù)的讀寫。從而保證數(shù)據(jù)的一致性。

2、指令重排序
第二個(gè)CPU對(duì)對(duì)于代碼執(zhí)行效率的優(yōu)化是指令重排序
指令重排序是指CPU在不改變程序執(zhí)行結(jié)果的情況下對(duì)執(zhí)行的指令進(jìn)行優(yōu)化。這里遵循 as-if-serial 原則,as-if-serial 原則就是CPU不會(huì)對(duì)有數(shù)據(jù)依賴的執(zhí)行指令進(jìn)行重排。這也是為了保證程序的正確性。

這里會(huì)遇到兩個(gè)問(wèn)題:
問(wèn)題一、
由于每個(gè)CPU操作的是他對(duì)應(yīng)的緩存中的數(shù)據(jù),在統(tǒng)一時(shí)刻各個(gè)CPU可能看到的統(tǒng)一地址的數(shù)據(jù)是不一致的。
問(wèn)題二、
在多核多線程情況下,as-if-serial 會(huì)失效。
為了解決以上問(wèn)題。出現(xiàn)了內(nèi)存屏障。
內(nèi)存屏障
1、寫內(nèi)存屏障(Store Memory Burrier),在指令后面插入寫內(nèi)存屏障(Story Burrier),就是強(qiáng)制將數(shù)據(jù)先寫進(jìn)內(nèi)存,并且CPU不會(huì)為了性能而進(jìn)行指令重排序。
2、讀內(nèi)存屏障(Load Memory Burrier),在指令前面插入讀內(nèi)存屏障(Load Burrier),就是強(qiáng)制所有的CPU說(shuō)該內(nèi)存的數(shù)據(jù)已經(jīng)失效,必須從主存中進(jìn)行讀取。
以上的內(nèi)存屏障就是為了保證緩存和主存的數(shù)據(jù)一致性。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容