99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

證明CPU指令是亂序執(zhí)行的

sakobpqhz6 ? 來源:平凡人筆記 ? 2023-03-15 09:13 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

承接上文CPU緩存一致性原理

雙擊QQ.exe從磁盤加載到內(nèi)存里面,內(nèi)存里面就會有了一個(gè)進(jìn)程,進(jìn)程產(chǎn)生的時(shí)候會產(chǎn)生一個(gè)主線程,就是main方法所在的線程,cpu會找到main開始的地方,把它的指令讀取過來放到程序計(jì)數(shù)器,把數(shù)據(jù)放到寄存器,然后ALU開始做計(jì)算,一步一步來執(zhí)行整個(gè)程序,這就是普通程序執(zhí)行的過程。

cpu速度要比內(nèi)存的速度快100倍,中間有各種各樣的緩存,最常見的是三級緩存,由于它的速度非常快,在執(zhí)行指令的時(shí)候也會有一些優(yōu)化,比如現(xiàn)在有2條指令,一個(gè)是mov指令即從內(nèi)存中讀取一個(gè)數(shù)據(jù)到某一個(gè)寄存器中,第二個(gè)指令是把寄存器中的指令數(shù)值加1,如果嚴(yán)格按照前后寫的效率執(zhí)行,會發(fā)現(xiàn)它的效率比較低;第一條指令從內(nèi)存中讀數(shù)據(jù)出來,cpu等待99個(gè)時(shí)間周期,如果讀完第一個(gè)指令之后,才可以執(zhí)行第二個(gè)指令的話,cpu將會有99個(gè)空檔期,所以現(xiàn)在的cpu設(shè)計(jì)是流水線式的設(shè)計(jì)(采用流水線式后,并沒有加速單條指令的執(zhí)行,每條指令的操作步驟一個(gè)也不能少,只是多條指令的不同操作步驟同時(shí)執(zhí)行,因而從總體上看加快了指令流速度,縮短了程序執(zhí)行時(shí)間),發(fā)送一條指令在等待內(nèi)存數(shù)據(jù)返回的過程當(dāng)中,會把后面這條指令執(zhí)行了即后面的指令跑到前面先執(zhí)行了,簡單稱為cpu的亂序執(zhí)行,主要是為了提高效率,在等待費(fèi)時(shí)的指令執(zhí)行的時(shí)候,優(yōu)先執(zhí)行后面的指令。

證明cpu亂序執(zhí)行是存在的

a8a1ae18-c2ab-11ed-bfe3-dac502259ad0.png

這里有個(gè)死循環(huán),每一次循環(huán)都會把這4個(gè)值(x、y、a、b)設(shè)置為0,每一次循環(huán)都會起2個(gè)線程,第一個(gè)線程會執(zhí)行a=1、x=b,第二個(gè)線程會執(zhí)行b=1、y=a;假設(shè)所有的語句都是按照順序執(zhí)行的,從多線程微觀的角度進(jìn)行時(shí)間順序上的排列組合,你會發(fā)現(xiàn)會有各種各樣的組合場景:

a8bd5a96-c2ab-11ed-bfe3-dac502259ad0.png

比如第一種組合,

aad8c54a-c2ab-11ed-bfe3-dac502259ad0.png

第一種組合先執(zhí)行a=1、x=b,后執(zhí)行b=1、y=a,得到的結(jié)果是x=0、y=1。

這6種排列組合的結(jié)果無論如何都不可能得到x=0、y=0的情況即只要按照順序執(zhí)行,絕對不會出現(xiàn)x=0、y=0。

這是數(shù)學(xué)上的排列組合,但cpu執(zhí)行指令的時(shí)候未必是按照順序執(zhí)行的。

出現(xiàn)x=0、y=0的情況比較少見,為什么這么難出現(xiàn)?什么樣的組合下才會出現(xiàn)?

aae81842-c2ab-11ed-bfe3-dac502259ad0.png

跑了270多萬次才出現(xiàn)了一次x=0、y=0的情況,

ab0b8f84-c2ab-11ed-bfe3-dac502259ad0.png

這兩種是亂序執(zhí)行的排列組合,比如第一個(gè)場景是線程1先執(zhí)行x=b、線程2執(zhí)行y=a,切換到線程1執(zhí)行a=1,切換到線程2執(zhí)行b=1,結(jié)果是x=0、y=0。

只有這2種場景,2個(gè)線程的這2個(gè)指令都得顛倒順序才會出現(xiàn),這種很難出現(xiàn),不管怎樣,得出一個(gè)結(jié)論:cpu內(nèi)部是亂序執(zhí)行的。

單線程的情況下,2個(gè)指令亂了順序執(zhí)行沒有關(guān)系,反正最終的結(jié)果是一樣的,但是在多線程的情況下,非常有可能出現(xiàn)你不想看到的情形,比如x=0、y=0的情況,比如在預(yù)知中沒有這種情況,但是多線程的情況下,會出現(xiàn),所以一定會影響整個(gè)多線程程序的運(yùn)行,單線程的程序不會影響。

有了as-if-serial(看上去像序列化的)指令就可以隨便變換順序,只要維持最終一致性即可;單線程的重排序只需要保證最終的一致性,比如a=b、y=1,隨便重排序,只要能保證單線程的最終一致性。

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 寄存器
    +關(guān)注

    關(guān)注

    31

    文章

    5435

    瀏覽量

    124601
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11083

    瀏覽量

    217180
  • 指令
    +關(guān)注

    關(guān)注

    1

    文章

    616

    瀏覽量

    36501
  • 緩存
    +關(guān)注

    關(guān)注

    1

    文章

    246

    瀏覽量

    27204
  • 線程
    +關(guān)注

    關(guān)注

    0

    文章

    508

    瀏覽量

    20243
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    單片機(jī)執(zhí)行指令過程詳解

    因?yàn)?b class='flag-5'>指令是要求把取得的數(shù)送到A累加器,所以取出的數(shù)字經(jīng)內(nèi)部數(shù)據(jù)總線進(jìn)入A累加器,而不是進(jìn)入指令寄存器。至此,一條指令執(zhí)行完畢。單片機(jī)中PC=0002H,PC在
    的頭像 發(fā)表于 02-15 09:53 ?2w次閱讀

    CPU指令的條件執(zhí)行分享!

    ,是LE標(biāo)志:恰巧,在print中有puts函數(shù),puts函數(shù)中有判斷,正好改變了CPSR中的高四位,使CPU執(zhí)行該異常指令。再說一句,CPU執(zhí)行
    發(fā)表于 09-10 05:45

    CPU周期與微指令周期的關(guān)系

    CPU周期與微指令周期的關(guān)系 在串行方式的微程序控制器中:       微指令周期 = 讀出微指令的時(shí)間 +
    發(fā)表于 03-26 16:16 ?35次下載

    什么是CPU分枝/亂序執(zhí)行?

    什么是分枝/亂序執(zhí)行?   分枝(branch)是指程序運(yùn)行時(shí)需要改變的節(jié)點(diǎn)。分枝有無條件分枝和有條件分枝,其中無條件分枝只
    發(fā)表于 02-04 10:49 ?974次閱讀

    cpu執(zhí)行指令的過程詳解

    計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行。即取指令-----分析指令-----執(zhí)行指令。
    的頭像 發(fā)表于 03-09 16:30 ?10.5w次閱讀
    <b class='flag-5'>cpu</b><b class='flag-5'>執(zhí)行</b><b class='flag-5'>指令</b>的過程詳解

    CPU操作指令詳解

    CPU將CS:IP指向的內(nèi)存單元中的內(nèi)容看作指令,因?yàn)椋谌魏螘r(shí)候,CPU將CS,IP中的內(nèi)容當(dāng)作指令的段地址和偏移地址,用它們合成指令的物
    的頭像 發(fā)表于 09-24 17:52 ?1w次閱讀

    80C51單片機(jī)指令的取指和執(zhí)行時(shí)序詳細(xì)說明

    現(xiàn)按4類指令介紹CPU時(shí)序。因?yàn)?b class='flag-5'>CPU工作的過程就是取指令執(zhí)行指令的過程,所以
    發(fā)表于 09-27 17:16 ?1次下載
    80C51單片機(jī)<b class='flag-5'>指令</b>的取指和<b class='flag-5'>執(zhí)行</b>時(shí)序詳細(xì)說明

    嵌入式RISC-V亂序執(zhí)行處理器的設(shè)計(jì)方案

    具有順序單發(fā)射、亂序執(zhí)行、亂序寫回等特性的三級流水線結(jié)構(gòu),運(yùn)用哈佛體系結(jié)構(gòu)及AHB總線協(xié)議,可滿足并行訪問指令與數(shù)據(jù)的需求。在 Artix-7(XC7A35T-L1CSG324FPGA
    發(fā)表于 03-11 10:57 ?17次下載
    嵌入式RISC-V<b class='flag-5'>亂序</b><b class='flag-5'>執(zhí)行</b>處理器的設(shè)計(jì)方案

    超標(biāo)量處理器的指令亂序提交機(jī)制綜述

    針對超標(biāo)量處理器中長周期執(zhí)行指令延遲退休及持續(xù)譯碼導(dǎo)致的重排序緩存(ROB)阻塞問題,提出一種指令亂序提交機(jī)制。通過設(shè)計(jì)容量可配置的多緩存指令
    發(fā)表于 06-07 11:39 ?13次下載

    CPU指令執(zhí)行過程 CPU指令流水線

    幾乎所有的馮·諾伊曼型計(jì)算機(jī)的 CPU,其工作都可以分為 5 個(gè)階段:取指令、指令譯碼、執(zhí)行指令、訪存取數(shù)、結(jié)果寫回。
    發(fā)表于 05-09 17:29 ?2.1w次閱讀
    <b class='flag-5'>CPU</b><b class='flag-5'>指令</b>的<b class='flag-5'>執(zhí)行</b>過程 <b class='flag-5'>CPU</b><b class='flag-5'>指令</b>流水線

    如何證明CPU指令亂序執(zhí)行的呢?

    雙擊QQ.exe從磁盤加載到內(nèi)存里面,內(nèi)存里面就會有了一個(gè)進(jìn)程,進(jìn)程產(chǎn)生的時(shí)候會產(chǎn)生一個(gè)主線程,就是main方法所在的線程
    的頭像 發(fā)表于 03-15 09:14 ?1468次閱讀

    當(dāng)我們在談?wù)?b class='flag-5'>cpu指令亂序的時(shí)候,究竟在談?wù)撌裁矗?/a>

    知道指令亂序策略很重要,原因是這樣我們就能夠通過barrier(內(nèi)存屏障)等指令,在正確的位置告訴cpu或者是編譯器,這里我可以接受亂序,
    的頭像 發(fā)表于 05-19 14:42 ?1787次閱讀
    當(dāng)我們在談?wù)?b class='flag-5'>cpu</b><b class='flag-5'>指令</b><b class='flag-5'>亂序</b>的時(shí)候,究竟在談?wù)撌裁矗? />    </a>
</div>                              <div   id=

    編譯器的亂序策略

    寫這篇文章的目的,是想明確下cpu指令亂序這件事。只要是熟悉計(jì)算機(jī)底層系統(tǒng)的同學(xué)就會知道,程序里面的每行代碼的執(zhí)行順序,有可能會被編譯器和cpu
    的頭像 發(fā)表于 05-19 14:46 ?977次閱讀
    編譯器的<b class='flag-5'>亂序</b>策略

    cpu執(zhí)行程序內(nèi)部變化

    CPU(Central Processing Unit)是計(jì)算機(jī)的核心部件之一,它負(fù)責(zé)執(zhí)行計(jì)算機(jī)程序的指令,并進(jìn)行數(shù)據(jù)處理和控制操作。CPU執(zhí)行
    的頭像 發(fā)表于 12-05 11:26 ?880次閱讀

    CPU的各種指令執(zhí)行流程

    在集成電路設(shè)計(jì)中,CPU指令是指計(jì)算機(jī)中央處理單元(CPU)用來執(zhí)行計(jì)算任務(wù)的基本操作指令集。這些指令
    的頭像 發(fā)表于 04-18 11:24 ?862次閱讀