色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

當我們在談論cpu指令亂序的時候,究竟在談論什么?

dyquk4xk2p3d ? 來源:羅一鑫 ? 2023-05-19 14:42 ? 次閱讀

很多現代高級語言多提供了多線程并發技術,今天服務器CPU基本上都是多核架構,在Java中,JVM能夠根據處理器特性(CPU多級緩存系統、多核處理器等)適當對機器指令進行重排序,最大限度發揮機器性能。Java中的指令重排有兩次,第一次發生在將字節碼編譯成機器碼的階段,第二次發生在CPU執行的時候,也會適當對指令進行重排。

寫這篇文章的目的,是想明確下cpu指令亂序這件事。只要是熟悉計算機底層系統的同學就會知道,程序里面的每行代碼的執行順序,有可能會被編譯器和cpu根據某種策略,給打亂掉,目的是為了性能的提升,讓指令的執行能夠盡可能的并行起來。

知道指令的亂序策略很重要,原因是這樣我們就能夠通過barrier(內存屏障)等指令,在正確的位置告訴cpu或者是編譯器,這里我可以接受亂序,那里我不能接受亂序等等。從而,能夠在保證代碼正確性的前提下,最大限度地發揮機器的性能。

10多年前的程序員對處理器亂序執行和內存屏障應該是很熟悉的,但隨著計算機技術突飛猛進的發展,我們離底層原理越來越遠,這并不是一件壞事,但在有些情況下了解一些底層原理有助于我們更好的工作,比如現代高級語言多提供了多線程并發技術,如果不深入下來,那么有些由多線程造成問題就很難排查和理解。

前言

這里我不打算討論編譯器的亂序策略,這里討論的指令亂序,含義稍廣些,包括在多核上分別執行的指令間,在時間維度上的亂序。

如果在多核cpu層面考慮亂序執行的話,我們要來梳理清楚以下幾個概念:單核和多核,亂序執行和順序提交,store buffer和invalid queue。最后會對x86和arm/power架構的異同,做一個總結。

24a2495e-f5fc-11ed-90ce-dac502259ad0.jpg

單核 vs 多核

從多核的視角上來說,是存在著亂序的可能的。比如,假設存在變量x = 0,cpu0上執行寫入W0(x, 1),對x寫入1。接著在cpu1上,執行讀取R1(x, 0),得到x = 0,這在x86和arm/power的cpu上都是可能出現的。原因是x86上cpu核和cache以及內存之間,存在著store buffer,當W0(x, 1)執行成功后,修改只存在于store buffer中,并未寫到cache以及內存上,因此cpu1讀取不到最新的x值。對于arm/power來說,同樣也有store buffer,而且還可能會有invalid queue,導致cpu1讀不到最新的x值。

對于沒有invalid queue的x86系列cpu來說,當修改從store buffer刷入cache時,就能夠保證在其他核上能夠讀到最新的修改。但是,對于存在invalid queue的cpu來說,則不一定。

為了能夠保證多核之間的修改的可見性,我們在寫程序的時候需要加上內存屏障,例如x86上的mfence指令。

亂序執行 vs 順序提交

我們知道,在cpu中為了能夠讓指令的執行盡可能地并行起來,從而發明了流水線技術。但是如果兩條指令的前后存在依賴關系,比如數據依賴,控制依賴等,此時后一條語句就必需等到前一條指令完成后,才能開始。

cpu為了提高流水線的運行效率,會做出比如:

1)對無依賴的前后指令做適當的亂序和調度;

2)對控制依賴的指令做分支預測;

3)對讀取內存等的耗時操作,做提前預讀;

等等。以上總總,都會導致指令亂序的可能。

但是對于x86的cpu來說,在單核視角上,其實它做出了Sequential consistency[1]的一致性保障。Sequential consistency的在wiki上的定義如下:

"... the result of any execution is the same as if the operations of all the processors were executed in some sequential order, and the operations of each individual processor appear in this sequence in the order specified by its program."

也就是說,要滿足Sequential consistency,必需保障每個處理器的指令執行順序必需和程序給出的順序一致。奇怪吧?這不就和我剛才說的指令亂序優化矛盾了嘛?其實并不矛盾,指令在cpu核內部確實是亂序執行和調度的,但是它們對外表現卻是順序提交的。

如果把ISA寄存器(如EAX,EBX等)和store buffer,作為cpu對外的接口的話,cpu只需要把內部真實的物理寄存器按照指令的執行順序,順序映射到ISA寄存器上,也就是cpu只要將結果順序地提交到ISA寄存器,就可以保證Sequential consistency。

當然,以上是對x86架構的cpu來說的,ARM/Power架構的cpu在單核上的一致性保證要弱一些,無需保證Sequential consistency,因此也不需要順序提交,只需保證控制依賴,數據依賴,地址依賴等指令的順序即可。要想在這些弱一致性模型cpu下保證無關指令間的提交順序,需要使用barrier指令。

Store Buffer & Invalid Queue

store buffer存在于cpu核與cache之間,對于x86架構來說,store buffer是FIFO,因此不會存在亂序,寫入順序就是刷入cache的順序。但是對于ARM/Power架構來說,store buffer并未保證FIFO,因此先寫入store buffer的數據,是有可能比后寫入store buffer的數據晚刷入cache的。從這點上來說,store buffer的存在會讓ARM/Power架構出現亂序的可能。store barrier存在的意義就是將store buffer中的數據,刷入cache。

在某些cpu中,存在invalid queue。invalid queue用于緩存cache line的失效消息,也就是說,當cpu0寫入W0(x, 1),并從store buffer將修改刷入cache,此時cpu1讀取R1(x, 0)仍是允許的。因為使cache line失效的消息被緩沖在了invalid queue中,還未被應用到cache line上。這也是一種會使得指令亂序的可能。load barrier存在的意義就是將invalid queue緩沖刷新。

X86 vs ARM/Power

對于x86架構的cpu來說,在單核上來看,其保證了Sequential consistency,因此對于開發者,我們可以完全不用擔心單核上的亂序優化會給我們的程序帶來正確性問題。在多核上來看,其保證了x86-tso模型,使用mfence就可以將store buffer中的數據,寫入到cache中。而且,由于x86架構下,store buffer是FIFO的和不存在invalid queue,mfence能夠保證多核間的數據可見性,以及順序性。[2]

對于arm和power架構的cpu來說,編程就變得危險多了。除了存在數據依賴,控制依賴以及地址依賴等的前后指令不能被亂序之外,其余指令間都有可能存在亂序。而且,它們的store buffer并不是FIFO的,而且還可能存在invalid queue,這些也同樣讓并發編程變得困難重重。因此需要引入不同類型的barrier來完成不同的需求。[3]

總結

從上面的介紹可以知道,開發者想要做好并發編程是多么困難的事情,但是我們至少跨出了第一步,也就是定義困難本身。

審核編輯 :李倩

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 處理器
    +關注

    關注

    68

    文章

    19349

    瀏覽量

    230288
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10882

    瀏覽量

    212221
  • 多線程
    +關注

    關注

    0

    文章

    278

    瀏覽量

    20021
收藏 人收藏

    評論

    相關推薦

    CYW20704能否支持Tethering呢?

    CYW20704 能否支持 Tethering? 如果是,有什么指導原則或文件在談論它嗎? 如果沒有,如何幫助客戶找到它?
    發表于 06-04 09:31

    談論MCU上運行什么樣的應用

    作者| Rober van der Zwan(荷蘭)譯者|禾沐當我們談論使用MCU的嵌入式系統時,我們在談論MCU上運行什么樣的應用?眾所周知,我們
    發表于 12-22 08:19

    Lovepedal SuperSix資料分享

    非常適合緩沖、放大或收集聲音。為您的吉他設置添加柔和的復古壓縮或復古音色。Lovepedal Super 6 不是過載踏板,但在極端設置下可能會增加一些額外的功能。它也增加了壓縮,但我們不是在談論
    發表于 08-12 06:50

    關于智慧銀行,我們在談論著什么?

    英特爾公司中國區物聯網產品營銷部產品經理徐民先生表示:“智慧銀行是一個利用信息技術(云計算、大數據、互聯網、智能設備等)提高銀行的管理水平和運營效率,實現產品創新、服務創新,更好地為客戶提供金融服務的系統工程,可以說英特爾為智慧的銀行發展提供云網端的產品和技術支持。”
    發表于 07-01 14:32 ?4937次閱讀

    Michael I. Jordan給AI潑冷水,人工智能革命尚未發生

    當我們在談論 AI 時,我們到底在談什么?人工智能三度崛起,所有的人張口閉口都是 AI,媒體的炒作讓人看到未來仿佛已經來到我們的身邊。
    的頭像 發表于 04-27 14:37 ?3864次閱讀

    我們的生活與大數據關聯在一起,確保信息安全極為重要

    大數據的研究和探討我們持續了快一個季度了,現在我們在談論大數據和云計算,而我們在談論的過程當中有一點是無論如何也繞不開的也無法避免的問題,
    發表于 06-20 11:30 ?1570次閱讀

    我們是不是要信任智慧城市?

    我們需要確保我們在談論正確的事情,發出正確的指令,我們可以相信它們告訴我們的事情,并且它們會遵
    的頭像 發表于 06-25 08:39 ?3494次閱讀

    科技巨頭扎堆 是什么催化了AIoT時代的到來

    有人形容AIoT是一個大的硬件生態、是一個全新的技術浪潮,是一個宏大的未來藍圖。那么,當我們在談論AIoT的時候,我們到底在說什么?又是什么,催化了AIoT時代的到來?
    的頭像 發表于 01-23 14:12 ?4117次閱讀

    科技巨頭扎堆AIoT,華為、小米究竟看到了什么?

    編者按 :有人形容AIoT是一個大的硬件生態、是一個全新的技術浪潮,是一個宏大的未來藍圖。那么,當我們在談論AIoT的時候,我們到底在說什么?又是什么,催化了AIoT時代的到來? 20
    的頭像 發表于 01-27 16:01 ?882次閱讀

    All in AIoT,華為、小米、曠視們究竟在打什么主意?

    、是一個全新的技術浪潮,是一個宏大的未來藍圖。那么,當我們在談論AIoT的時候,我們到底在說什么?又是什么,催化了AIoT時代的到來? 我們
    的頭像 發表于 01-27 16:28 ?693次閱讀

    每個人都在談論的物聯網究竟在哪里

    物聯網(IoT)越來越受歡迎。所有與IT相關的網站都發表了許多與智能家居、連網汽車、工業物聯網、可穿戴設備、新技術以及物聯網標準相關的文章。還有很多大眾媒體也越來越多地報道物聯網的巨大潛力,許多報道稱其市場規模巨大,是下一件不可忽視的大事。
    的頭像 發表于 02-14 09:43 ?2948次閱讀

    當我們在談論中美領跑人工智能競賽的時候,日本在干什么?

    人工智能技術還有望用于犯罪調查和維持社會治安,日本警察廳將從今年開始這方面的實驗。實驗中將摸索能否通過監控攝像頭圖像鎖定汽車車型或在人群中發現可疑人員。日本媒體稱如果能順利實現,未來或將誕生能解決任何疑難案件的“人工智能刑警”。
    的頭像 發表于 03-08 16:22 ?4210次閱讀

    AI詩人和人類詩人,哪個更勝一籌?

    當前我們在談論AI寫的詩好不好的時候,也忘了一個問題:未來人類是否愿意讀AI的詩?
    發表于 07-02 17:19 ?1408次閱讀

    我們在談論音質的時候在談論什么資料下載

    電子發燒友網為你提供我們在談論音質的時候在談論什么資料下載的電子資料下載,更有其他相關的電路圖、源代碼、課件教程、中文資料、英文資料、參考設計、用戶指南、解決方案等資料,希望可以幫助到
    發表于 04-25 08:45 ?10次下載
    <b class='flag-5'>我們</b><b class='flag-5'>在談論</b>音質的<b class='flag-5'>時候</b><b class='flag-5'>在談論</b>什么資料下載

    英特爾邊緣AI技術賦能智慧生活

    是不是很奇妙?當我們在談論智慧生活的時候,它已經不再是一個未來概念,而是從科幻小說走向了現實。
    的頭像 發表于 12-13 11:44 ?242次閱讀
    主站蜘蛛池模板: 久久91精品国产91| 青娱乐极品视觉盛宴国产视频| 国产精品亚洲视频在线观看| 俄罗斯XX性幻女18| 丰满五十六十老熟女HD60| 国产成人免费| 国产在线精品亚洲第一区| 久久精品视频在线直播6| 恋孩癖网站大全在线观看| 暖暖的视频完整视频免费韩国| 亲女乱h文小兰第一次| 四虎国产精品免费观看视频 | ca88亚洲城娱乐| 俄罗斯bbbbbbbbb大片| 国语自产拍在线视频普通话| 久久婷婷色香五月综合激情| 女人高潮久久久叫人喷水| 日韩欧美高清一区| 亚洲精品AV一区午夜福利| 2019香蕉在线观看直播视频| 擦擦擦在线视频观看| 国产免费怕怕免费视频观看 | 中文字幕在线观看网址| WWW国产亚洲精品久久麻豆 | 夜蒲团之5阳性之教| 99RE6这里只有精品国产AV| 成人免费在线视频| 黑人干日本美女| 嗯别插太快好深再深点| 四虎永久在线精品国产免费| 一道精品视频一区二区三区| beeg xxx日本老师| 国产午夜三区视频在线| 伦理 电影在线观看| 四虎成人影院| 18黄女脱内衣| 国产成人在线视频| 麻豆国产原创中文AV网站| 天海翼精品久久中文字幕| 又亲又揉摸下面视频免费看| 刺激一区仑乱|