成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

CPU緩存與內存屏障,你了解嗎?

商務辦公
高速緩存主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度比內存快得多,這樣會使CPU花費很長時間等待數據或者將數據寫入內存,當CPU調用大量數據時,可以先從緩存中調用,從而加快讀取速度。

[[282067]]

 CPU緩存

CPU緩存是位于CPU與內存之間的臨時存儲器,它的容量比內存小的多,但是交換速度比內存快得多。高速緩存主要是為了解決CPU運算速度與內存讀寫速度不匹配的矛盾,因為CPU運算速度比內存快得多,這樣會使CPU花費很長時間等待數據或者將數據寫入內存,當CPU調用大量數據時,可以先從緩存中調用,從而加快讀取速度。

CPU多級緩存

 

CPU緩存與內存屏障

 

在CPU緩存出現不久,隨著系統越來越復雜,高速緩存和主內存之間的速度被拉大,直到加入了另一級緩存,新加入的這級緩存比第一緩存更大,并且更慢,而且經濟上不合適,所以有了二級緩存,甚至是三級緩存。每一級緩存中所儲存的全部數據都是下一級緩存的一部分,這三種緩存的技術難度和制造成本是相對遞減的,所以其容量也是相對遞增的。當CPU要讀取一個數據時,首先從一級緩存中查找,如果沒有找到再從二級緩存中查找,如果還是沒有就從三級緩存或內存中查找。一般來說,每級緩存的命中率大概都在80%左右,也就是說全部數據量的80%都可以在一級緩存中找到,只剩下20%的總數據量才需要從二級緩存、三級緩存或內存中讀取,由此可見一級緩存是整個CPU緩存架構中最為重要的部分。

CPU緩存一致性

多核CPU的情況下有多個一級緩存,如何保證緩存內部數據的一致,不讓系統數據混亂。這里就引出了一個一致性的協議MESI。

 

CPU緩存與內存屏障

 

CPU中每個緩存行使用四種狀態進行標記

M(被修改,Modified):

該緩存行只緩存在該CPU緩存中,并 且是被修改過的,與主內存數據不一 致,緩 存行的數據需要在未來某個時 間點寫回主內存。當被寫回主內存 之后,該緩存行就會變成獨享狀態。

E(獨享的,Exclusive)

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

S(共享的,Shared)

該狀態意味著該緩存行可能被多個CPU緩存,并且各個緩存與主內存數據一致,當有一個CPU修改該緩存行時,其他CPU中該緩存行可以被作廢(變成無效狀態(Invalid))

I(無效的,Invalid)

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

在一個典型系統中,可能會有幾個緩存共享主存總線,每個相應的CPU會發出讀寫請求,而緩存的目的就是減少CPU讀寫共享主存的次數。

一個緩存除在I狀態外都可以滿足cpu的讀請求,一個invalid的緩存行必須從主存中讀取來滿足該CPU的請求。

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

一個處于M狀態的緩存行必須時刻監控所有試圖讀取該緩存行相對主內存的操作,這種操作必須在緩存將該緩存行寫回主內存并將狀態變成S之前被延遲執行。

一個處于S狀態的緩存行也必須時刻監聽其他緩存行使該緩存行無效或者獨享緩存行的請求,并將該緩存行變成無效。

一個處于E狀態的緩存行也時刻監聽其他緩存讀主存中該緩存行的操作,一旦有這種操作,該緩存行需要變成S狀態。

對于M和E狀態而言總是精確的,他們在和該緩存行的真正狀態是一致的。而s狀態可能是非一致的,如果一個緩存將處于S狀態的緩存行作廢,而另一個緩存實際可能已經獨享了該緩存,但是該緩存卻不會將該緩存行升遷為E狀態,這是因為其他緩存不會廣播他們作廢掉該緩存行的通知。

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

CPU亂序執行

處理器為提高運算速度而做出的違背代碼原有順序的優化。

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

內存屏障

CPU亂序執行在單線程環境下是一種很好的優化手段,但是在多線程環境下,就會出現數據不一致的問題,因此就可以通過內存屏障這個機制來處理這個問題。

1.寫內存屏障(Store Memory Barrier):在指令后插入Store Barrier,能讓寫入緩存中最新數據更新寫入主內存中,讓其他線程可見。強制寫入主內存,這種顯示調用,不會讓CPU去進行指令重排序

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

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2019-12-10 14:51:00

CPU緩存內存

2021-08-11 10:00:51

緩存MyBatis管理

2020-03-11 20:42:34

瀏覽器緩存機制

2020-04-21 22:18:20

MESI內存CPU

2021-11-30 07:51:29

共享內存進程

2022-09-21 18:06:10

Python內存管理

2025-01-16 10:41:40

2010-04-27 09:17:23

內存屏障JVM

2010-08-30 19:45:13

路由器DHCP

2022-04-06 08:49:44

SSTKV存儲引擎

2022-07-26 00:00:22

HTAP系統數據庫

2012-09-06 17:54:28

2014-04-17 16:42:03

DevOps

2024-08-02 14:52:00

2010-09-06 14:03:06

PPP身份認證

2021-01-15 07:44:21

SQL注入攻擊黑客

2021-11-09 09:48:13

Logging python模塊

2018-02-02 10:56:19

屏蔽機房擴建

2014-11-28 10:31:07

Hybrid APP

2023-03-16 10:49:55

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美日韩手机在线观看 | 尤物在线视频 | 中文字幕在线一区二区三区 | 99re99| 91精品国产综合久久小仙女图片 | 久久国产日韩欧美 | 国产亚洲一区二区三区在线观看 | av在线一区二区三区 | 欧美自拍另类 | 国产精品免费看 | 亚洲一区二区三区在线视频 | 欧美精品啪啪 | 久久久这里都是精品 | 欧美韩一区二区 | 国产欧美日韩精品一区 | 91看片免费版 | 日韩一区二区三区视频在线播放 | 日韩久久综合 | 国产成人精品亚洲日本在线观看 | 国产在线视频在线观看 | 日韩国产中文字幕 | 亚洲欧美中文日韩在线v日本 | av高清| 在线观看国产视频 | 三级在线观看 | 一级欧美一级日韩片免费观看 | 色综合久久天天综合网 | 日韩成人免费av | 久久久久中文字幕 | 成人在线中文字幕 | 亚洲精品久久久久久久久久久久久 | 粉嫩av| 二区三区视频 | 亚洲国产成人精品一区二区 | 国产精品国产馆在线真实露脸 | 久久精品高清视频 | 精彩视频一区二区三区 | 日韩网站在线观看 | 国产一级特黄真人毛片 | 国产高清精品一区二区三区 | a国产视频 |