亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

蟲蟲首頁| 資源下載| 資源專輯| 精品軟件
登錄| 注冊

您現在的位置是:首頁 > 技術閱讀 >  當我們在談論cpu指令亂序的時候,究竟在談論什么?

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

時間:2024-02-10

原文:https://zhuanlan.zhihu.com/p/45808885

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

這篇文章的目的,是想明確下cpu指令亂序這件事。只要是熟悉計算機底層系統的同學就會知道,程序里面的每行代碼的執行順序,有可能會被編譯器和cpu根據某種策略,給打亂掉,目的是為了性能的提升,讓指令的執行能夠盡可能的并行起來。知道指令的亂序策略很重要,原因是這樣我們就能夠通過barrier(內存屏障)等指令,在正確的位置告訴cpu或者是編譯器,這里我可以接受亂序,那里我不能接受亂序等等。從而,能夠在保證代碼正確性的前提下,最大限度地發揮機器的性能。

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

前言

這里我不打算討論編譯器的亂序策略,后續有機會會寫專門的文章來討論,否則就太亂了。而且,這里討論的指令亂序,含義稍廣些,包括在多核上分別執行的指令間,在時間維度上的亂序。如果在多核cpu層面考慮亂序執行的話,我們要來梳理清楚以下幾個概念:單核多核,亂序執行順序提交,store bufferinvalid queue。最后會對x86arm/power架構的異同,做一個總結。

單核 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]

總結

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

Reference

[1] Lamport, Leslie. "How to make a multiprocessor computer that correctly executes multiprocess progranm." IEEE transactions on computers 9 (1979): 690-691.
[2] Sewell, Peter, et al. "x86-TSO: a rigorous and usable programmer's model for x86 multiprocessors." Communications of the ACM 53.7 (2010): 89-97.
[3] Maranget, Luc, Susmit Sarkar, and Peter Sewell. "A tutorial introduction to the ARM and POWER relaxed memory models." Draft available from http://www. cl. cam. ac. uk/~ pes20/ppc-supplemental/test7. pdf (2012).

往期推薦



C++都有哪些就業方向?是否應該學習C++?

如何優雅的實現多維數組

推薦學習這個開源項目

高端操作:不用繼承我也能實現多態

知乎高贊:為什么有些大公司技術弱爆了?

手擼一個智能指針

冷門知識點:進程間通信如何加鎖?

不要再無腦背誦面向對象三大特性了

繼承和組合,究竟我要選哪個?


亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品少妇自拍| 国产精品亚洲精品| 欧美性色综合| 久久在线视频在线| 欧美一区二区三区四区在线| 亚洲美女尤物影院| 亚洲国产精品女人久久久| 好吊日精品视频| 国产一区二区毛片| 国产精品呻吟| 欧美一区二区三区四区在线观看地址 | 久久久久.com| 亚洲图中文字幕| 麻豆亚洲精品| 国产在线精品一区二区中文| 亚洲一区二区三区国产| 欧美精品在线极品| 亚洲国产视频一区| 久久午夜影视| 伊人久久综合| 久久久久亚洲综合| 黄色成人在线| 久久久夜夜夜| 亚洲国产精品123| 老司机精品久久| …久久精品99久久香蕉国产| 老**午夜毛片一区二区三区| 在线不卡中文字幕| 牛牛精品成人免费视频| 亚洲电影在线播放| 欧美激情成人在线视频| 亚洲三级视频在线观看| 欧美日本成人| 亚洲香蕉伊综合在人在线视看| 欧美午夜不卡影院在线观看完整版免费 | 国产曰批免费观看久久久| 先锋资源久久| 国产在线麻豆精品观看| 毛片av中文字幕一区二区| 91久久在线| 欧美日本韩国一区| 亚洲欧美视频一区二区三区| 国产美女精品视频| 久久久亚洲成人| 亚洲美洲欧洲综合国产一区| 欧美日韩综合另类| 午夜伦欧美伦电影理论片| 精品二区久久| 国产精品高精视频免费| 久久精品国产77777蜜臀| 亚洲国产视频a| 欧美日韩视频在线第一区| 亚洲午夜电影网| 在线欧美日韩精品| 国产精品久久久久久久久借妻 | 亚洲精品男同| 国产精品美女久久久浪潮软件 | 欧美日韩国产综合新一区| 亚洲欧美中文字幕| 国内精品视频在线播放| 欧美三级第一页| 久久亚洲私人国产精品va| 一区二区高清在线观看| 激情久久久久久久| 国产精品黄色| 免费成年人欧美视频| 中文在线不卡视频| 国模精品一区二区三区| 欧美激情第1页| 久久精品99久久香蕉国产色戒| 黄色一区二区三区| 欧美天天在线| 久久理论片午夜琪琪电影网| 日韩一级欧洲| 韩国欧美一区| 欧美日韩综合另类| 久久精品成人一区二区三区 | 欧美成人精品| 香蕉成人伊视频在线观看 | 久久久综合网站| 亚洲欧美成人精品| 亚洲日本中文| 亚洲成人中文| 韩日视频一区| 韩日欧美一区二区三区| 国产女优一区| 国产精品区一区二区三| 国产精品久久久久一区| 老司机午夜精品视频在线观看| 亚洲婷婷综合色高清在线| 亚洲国内精品| 又紧又大又爽精品一区二区| 国产日韩在线看| 欧美性jizz18性欧美| 欧美精品一区二区久久婷婷| 久久在线免费视频| 麻豆国产va免费精品高清在线| 久久久7777| 久久亚洲综合| 久久免费高清| 久久精品国产在热久久| 久久久久久色| 欧美成人久久| 欧美 日韩 国产精品免费观看| 欧美成人免费全部| 欧美国产日韩亚洲一区| 免费久久99精品国产| 久久综合影视| 久久久亚洲精品一区二区三区| 欧美有码视频| 久久久久久久尹人综合网亚洲| 久久久成人精品| 免费久久99精品国产| 欧美mv日韩mv国产网站| 久久精品综合一区| 久久婷婷色综合| 欧美国产日韩一区| 欧美精品成人| 欧美日韩高清免费| 国产精品一区在线观看你懂的| 国产精品久久国产三级国电话系列| 国产精品国产三级国产aⅴ浪潮| 国产精品成人免费精品自在线观看| 国产精品视频免费一区| 韩国在线视频一区| 亚洲精品一区二区三区四区高清| 亚洲韩日在线| 午夜精品福利一区二区三区av | 国产精品一区二区在线观看不卡| 国产农村妇女精品| 亚洲国产精品一区制服丝袜| 亚洲视频欧洲视频| 国产欧美精品在线观看| 欧美日韩在线播放一区| 国产精品日韩欧美一区二区| 国产日产精品一区二区三区四区的观看方式 | 久久久97精品| 欧美剧在线观看| 国产手机视频一区二区| 亚洲人成亚洲人成在线观看| 午夜精品视频在线| 免费的成人av| 国产一区99| 在线亚洲观看| 蜜月aⅴ免费一区二区三区| 欧美视频一区二| 91久久精品美女高潮| 亚洲在线网站| 欧美日韩国产在线| 亚洲第一黄色| 久久久激情视频| 国产精品女主播在线观看| 亚洲人在线视频| 久久夜精品va视频免费观看| 国产精品国内视频| av成人免费在线| 欧美国内亚洲| 在线日韩av| 久久久水蜜桃| 黄色成人av网| 久久天天狠狠| 性久久久久久| 欧美电影免费| 国产日韩欧美综合| 一区二区三区视频免费在线观看| 欧美在线观看日本一区| 国产精品超碰97尤物18| 亚洲深爱激情| 国产精品www| 亚洲视频一区在线| 欧美日韩不卡合集视频| 亚洲经典自拍| 欧美精品色网| 91久久精品美女高潮| 女同一区二区| 亚洲精品五月天| 欧美日本不卡| 亚洲系列中文字幕| 国产精品久久久久久久久| 亚洲午夜免费福利视频| 国产精品美女久久久久av超清| 亚洲午夜小视频| 国产伦精品一区二区三区视频黑人| 亚洲小说欧美另类社区| 国产精品久久久久国产精品日日| 在线视频日本亚洲性| 国产精品久久久一区二区| 性欧美videos另类喷潮| 国产亚洲毛片在线| 蜜乳av另类精品一区二区| 亚洲久久视频| 国产欧美综合在线| 欧美1区2区3区| 亚洲视频国产视频| 国产视频一区二区三区在线观看| 久久久久国色av免费看影院| 亚洲精品乱码久久久久久久久| 国产精品高清网站| 另类激情亚洲| 亚洲曰本av电影|