自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CPU緩存與內(nèi)存屏障,你了解嗎?

商務(wù)辦公
高速緩存主要是為了解決CPU運(yùn)算速度與內(nèi)存讀寫(xiě)速度不匹配的矛盾,因?yàn)镃PU運(yùn)算速度比內(nèi)存快得多,這樣會(huì)使CPU花費(fèi)很長(zhǎng)時(shí)間等待數(shù)據(jù)或者將數(shù)據(jù)寫(xiě)入內(nèi)存,當(dāng)CPU調(diào)用大量數(shù)據(jù)時(shí),可以先從緩存中調(diào)用,從而加快讀取速度。

[[282067]]

 CPU緩存

CPU緩存是位于CPU與內(nèi)存之間的臨時(shí)存儲(chǔ)器,它的容量比內(nèi)存小的多,但是交換速度比內(nèi)存快得多。高速緩存主要是為了解決CPU運(yùn)算速度與內(nèi)存讀寫(xiě)速度不匹配的矛盾,因?yàn)镃PU運(yùn)算速度比內(nèi)存快得多,這樣會(huì)使CPU花費(fèi)很長(zhǎng)時(shí)間等待數(shù)據(jù)或者將數(shù)據(jù)寫(xiě)入內(nèi)存,當(dāng)CPU調(diào)用大量數(shù)據(jù)時(shí),可以先從緩存中調(diào)用,從而加快讀取速度。

CPU多級(jí)緩存

 

CPU緩存與內(nèi)存屏障

 

在CPU緩存出現(xiàn)不久,隨著系統(tǒng)越來(lái)越復(fù)雜,高速緩存和主內(nèi)存之間的速度被拉大,直到加入了另一級(jí)緩存,新加入的這級(jí)緩存比第一緩存更大,并且更慢,而且經(jīng)濟(jì)上不合適,所以有了二級(jí)緩存,甚至是三級(jí)緩存。每一級(jí)緩存中所儲(chǔ)存的全部數(shù)據(jù)都是下一級(jí)緩存的一部分,這三種緩存的技術(shù)難度和制造成本是相對(duì)遞減的,所以其容量也是相對(duì)遞增的。當(dāng)CPU要讀取一個(gè)數(shù)據(jù)時(shí),首先從一級(jí)緩存中查找,如果沒(méi)有找到再?gòu)亩?jí)緩存中查找,如果還是沒(méi)有就從三級(jí)緩存或內(nèi)存中查找。一般來(lái)說(shuō),每級(jí)緩存的命中率大概都在80%左右,也就是說(shuō)全部數(shù)據(jù)量的80%都可以在一級(jí)緩存中找到,只剩下20%的總數(shù)據(jù)量才需要從二級(jí)緩存、三級(jí)緩存或內(nèi)存中讀取,由此可見(jiàn)一級(jí)緩存是整個(gè)CPU緩存架構(gòu)中最為重要的部分。

CPU緩存一致性

多核CPU的情況下有多個(gè)一級(jí)緩存,如何保證緩存內(nèi)部數(shù)據(jù)的一致,不讓系統(tǒng)數(shù)據(jù)混亂。這里就引出了一個(gè)一致性的協(xié)議MESI。

 

CPU緩存與內(nèi)存屏障

 

CPU中每個(gè)緩存行使用四種狀態(tài)進(jìn)行標(biāo)記

M(被修改,Modified):

該緩存行只緩存在該CPU緩存中,并 且是被修改過(guò)的,與主內(nèi)存數(shù)據(jù)不一 致,緩 存行的數(shù)據(jù)需要在未來(lái)某個(gè)時(shí) 間點(diǎn)寫(xiě)回主內(nèi)存。當(dāng)被寫(xiě)回主內(nèi)存 之后,該緩存行就會(huì)變成獨(dú)享狀態(tài)。

E(獨(dú)享的,Exclusive)

該緩存行只被緩存在該CPU緩存中,并且與主存數(shù)據(jù)一致,可以在任何時(shí)刻當(dāng)有其他CPU讀取該內(nèi)存時(shí)變成共享(shared)狀態(tài),同樣的,當(dāng)CPU修改該緩存內(nèi)容時(shí),該狀態(tài)可以變成M狀態(tài)。

S(共享的,Shared)

該狀態(tài)意味著該緩存行可能被多個(gè)CPU緩存,并且各個(gè)緩存與主內(nèi)存數(shù)據(jù)一致,當(dāng)有一個(gè)CPU修改該緩存行時(shí),其他CPU中該緩存行可以被作廢(變成無(wú)效狀態(tài)(Invalid))

I(無(wú)效的,Invalid)

該緩存是無(wú)效的(可能有其他CPU修改了 該緩存行)。

在一個(gè)典型系統(tǒng)中,可能會(huì)有幾個(gè)緩存共享主存總線(xiàn),每個(gè)相應(yīng)的CPU會(huì)發(fā)出讀寫(xiě)請(qǐng)求,而緩存的目的就是減少CPU讀寫(xiě)共享主存的次數(shù)。

一個(gè)緩存除在I狀態(tài)外都可以滿(mǎn)足cpu的讀請(qǐng)求,一個(gè)invalid的緩存行必須從主存中讀取來(lái)滿(mǎn)足該CPU的請(qǐng)求。

一個(gè)寫(xiě)請(qǐng)求必須是在M或E狀態(tài)才能被執(zhí)行,如果緩存行處于S狀態(tài),必須先將其它緩存中該緩存行變成Invalid狀態(tài)(也即是不允許不同CPU同時(shí)修改同一緩存行,即使該緩存行中不同位置也不允許)。

一個(gè)處于M狀態(tài)的緩存行必須時(shí)刻監(jiān)控所有試圖讀取該緩存行相對(duì)主內(nèi)存的操作,這種操作必須在緩存將該緩存行寫(xiě)回主內(nèi)存并將狀態(tài)變成S之前被延遲執(zhí)行。

一個(gè)處于S狀態(tài)的緩存行也必須時(shí)刻監(jiān)聽(tīng)其他緩存行使該緩存行無(wú)效或者獨(dú)享緩存行的請(qǐng)求,并將該緩存行變成無(wú)效。

一個(gè)處于E狀態(tài)的緩存行也時(shí)刻監(jiān)聽(tīng)其他緩存讀主存中該緩存行的操作,一旦有這種操作,該緩存行需要變成S狀態(tài)。

對(duì)于M和E狀態(tài)而言總是精確的,他們?cè)诤驮摼彺嫘械恼嬲隣顟B(tài)是一致的。而s狀態(tài)可能是非一致的,如果一個(gè)緩存將處于S狀態(tài)的緩存行作廢,而另一個(gè)緩存實(shí)際可能已經(jīng)獨(dú)享了該緩存,但是該緩存卻不會(huì)將該緩存行升遷為E狀態(tài),這是因?yàn)槠渌彺娌粫?huì)廣播他們作廢掉該緩存行的通知。

同樣由于緩存并沒(méi)有保存該緩存行的copy的數(shù)量,因此(即使有這種通知)也沒(méi)有辦法確定自己是否已經(jīng)獨(dú)享了該緩存行。

CPU亂序執(zhí)行

處理器為提高運(yùn)算速度而做出的違背代碼原有順序的優(yōu)化。

例如:a=10,b=20,result=a+b,正常順序先執(zhí)行a,再執(zhí)行b,最后執(zhí)行a+b,但假如a不在緩存中,b在緩存中,因?yàn)閍不在緩存中,需要從主內(nèi)存讀取,這樣b=20的操作就需要等待a執(zhí)行完,CPU為了提高效率,先執(zhí)行b=20,再執(zhí)行a=10,最后執(zhí)行a+b,提高執(zhí)行效率。

內(nèi)存屏障

CPU亂序執(zhí)行在單線(xiàn)程環(huán)境下是一種很好的優(yōu)化手段,但是在多線(xiàn)程環(huán)境下,就會(huì)出現(xiàn)數(shù)據(jù)不一致的問(wèn)題,因此就可以通過(guò)內(nèi)存屏障這個(gè)機(jī)制來(lái)處理這個(gè)問(wèn)題。

1.寫(xiě)內(nèi)存屏障(Store Memory Barrier):在指令后插入Store Barrier,能讓寫(xiě)入緩存中最新數(shù)據(jù)更新寫(xiě)入主內(nèi)存中,讓其他線(xiàn)程可見(jiàn)。強(qiáng)制寫(xiě)入主內(nèi)存,這種顯示調(diào)用,不會(huì)讓CPU去進(jìn)行指令重排序

2.讀內(nèi)存屏障(Load Memory Barrier):在指令后插入Load Barrier,可以讓高速緩存中的數(shù)據(jù)失效,強(qiáng)制重新從主內(nèi)存中加載數(shù)據(jù)。也是不會(huì)讓CPU去進(jìn)行指令重排。

責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2019-12-10 14:51:00

CPU緩存內(nèi)存

2021-08-11 10:00:51

緩存MyBatis管理

2020-04-21 22:18:20

MESI內(nèi)存CPU

2020-03-11 20:42:34

瀏覽器緩存機(jī)制

2022-09-21 18:06:10

Python內(nèi)存管理

2021-11-30 07:51:29

共享內(nèi)存進(jìn)程

2025-01-16 10:41:40

2010-04-27 09:17:23

內(nèi)存屏障JVM

2022-04-06 08:49:44

SSTKV存儲(chǔ)引擎

2010-08-30 19:45:13

路由器DHCP

2024-08-02 14:52:00

2012-09-06 17:54:28

2022-07-26 00:00:22

HTAP系統(tǒng)數(shù)據(jù)庫(kù)

2014-04-17 16:42:03

DevOps

2010-04-21 14:20:45

處理器緩存技術(shù)

2018-02-02 10:56:19

屏蔽機(jī)房擴(kuò)建

2010-09-06 14:03:06

PPP身份認(rèn)證

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2019-09-16 08:40:42

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)