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

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

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

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

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

sakobpqhz6 ? 來源:平凡人筆記 ? 2023-03-15 09:14 ? 次閱讀

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

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

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

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

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

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í)行,絕對(duì)不會(huì)出現(xiàn)x=0、y=0。

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

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

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

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

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

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

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

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

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





審核編輯:劉清

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

    關(guān)注

    31

    文章

    5343

    瀏覽量

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

    關(guān)注

    68

    文章

    10870

    瀏覽量

    211880
  • 計(jì)數(shù)器
    +關(guān)注

    關(guān)注

    32

    文章

    2256

    瀏覽量

    94607
  • ALU
    ALU
    +關(guān)注

    關(guān)注

    0

    文章

    33

    瀏覽量

    13104

原文標(biāo)題:證明CPU指令是亂序執(zhí)行的

文章出處:【微信號(hào):IC學(xué)習(xí),微信公眾號(hào):IC學(xué)習(xí)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guā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 ?1.9w次閱讀

    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 ?900次閱讀

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

    計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行。即取指令-----分析指令-----執(zhí)行指令
    的頭像 發(fā)表于 03-09 16:30 ?10.4w次閱讀
    <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 ?9882次閱讀

    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í)行亂序寫回等特性的三級(jí)流水線結(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ī)制綜述

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

    單片機(jī)是怎么執(zhí)行指令的?

    單片機(jī)執(zhí)行程序的過程,實(shí)際上就是執(zhí)行我們所編制程序的過程。即逐條指令的過程。計(jì)算機(jī)每執(zhí)行一條指令都可分為三個(gè)階段進(jìn)行。即取
    發(fā)表于 02-09 11:13 ?3次下載
    單片機(jī)是怎么<b class='flag-5'>執(zhí)行</b><b class='flag-5'>指令</b>的?

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

    幾乎所有的馮·諾伊曼型計(jì)算機(jī)的 CPU,其工作都可以分為 5 個(gè)階段:取指令指令譯碼、執(zhí)行指令、訪存取數(shù)、結(jié)果寫回。
    發(fā)表于 05-09 17:29 ?1.9w次閱讀
    <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)存里面就會(huì)有了一個(gè)進(jìn)程,進(jìn)程產(chǎn)生的時(shí)候會(huì)產(chǎn)生一個(gè)主線程,就是main方法所在的線程,cpu會(huì)找到main開始的地方,把它的指令讀取過來放到程序計(jì)數(shù)器,把數(shù)據(jù)放到寄存器,然后ALU開始做計(jì)算,一步一步來
    的頭像 發(fā)表于 03-15 09:13 ?971次閱讀

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

    知道指令亂序策略很重要,原因是這樣我們就能夠通過barrier(內(nèi)存屏障)等指令,在正確的位置告訴cpu或者是編譯器,這里我可以接受亂序
    的頭像 發(fā)表于 05-19 14:42 ?1353次閱讀
    當(dāng)我們?cè)谡務(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é)就會(huì)知道,程序里面的每行代碼的執(zhí)行順序,有可能會(huì)被編譯器和cpu
    的頭像 發(fā)表于 05-19 14:46 ?728次閱讀
    編譯器的<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 ?644次閱讀
    主站蜘蛛池模板: 岛国大片在线观看免费版| 亚洲精品久久久一区| 影音先锋av色咪影院| 爽娇妻快高h| 色偷偷av男人的天堂| 亚洲精品线在线观看| 10分钟免费观看视频| 在线亚洲97se| 2022年国产精品久久久久| 成人精品视频在线| 俄罗斯12x13x处| 国产白丝精品爽爽久久蜜臀| 高H纯肉NP 弄潮NP男男| 果冻传媒在线观看资源七夕| 老年日本老年daddy| 久久伊人男人的天堂网站| 久久久久久天天夜夜天天 | 99久久蜜臀AV免费看蛮| 国产高清亚洲日韩字幕一区| 国产午夜在线精品三级a午夜电影| 国产伦精品一区二区三区精品| 国产欧美国产综合第一区| 蜜芽视频在线观看视频免费播放| 四虎国产精品免费观看视频| 最近最新的日本字幕MV| 国产精品一区二区免费| 浓毛BWBWBWBWBW日本| 亚洲日韩精品AV中文字幕| 东热rq大乱交| 美女图片131亚洲午夜| 亚洲国产高清视频在线观看| 成a人片亚洲日本久久| 久就热视频精品免费99| 新妺妺窝人体色WWW| 征服艳妇后宫春色| 国产精品久久久久久人妻精品蜜桃| 美女脱了内裤张开腿让男人桶到爽 | 久久99精品国产麻豆婷婷| 麻豆一二三区果冻| 青青精品国产自在线拍| 伊人久久中文|