在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

證明CPU指令是亂序執行的

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

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

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

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

證明cpu亂序執行是存在的

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

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

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

比如第一種組合,

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

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

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

這是數學上的排列組合,但cpu執行指令的時候未必是按照順序執行的。

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

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

跑了270多萬次才出現了一次x=0、y=0的情況,

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

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

只有這2種場景,2個線程的這2個指令都得顛倒順序才會出現,這種很難出現,不管怎樣,得出一個結論:cpu內部是亂序執行的。

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

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

審核編輯:湯梓紅

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

    關注

    31

    文章

    5357

    瀏覽量

    120659
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10879

    瀏覽量

    212188
  • 指令
    +關注

    關注

    1

    文章

    608

    瀏覽量

    35759
  • 緩存
    +關注

    關注

    1

    文章

    240

    瀏覽量

    26700
  • 線程
    +關注

    關注

    0

    文章

    505

    瀏覽量

    19705
收藏 人收藏

    評論

    相關推薦

    單片機執行指令過程詳解

    因為指令是要求把取得的數送到A累加器,所以取出的數字經內部數據總線進入A累加器,而不是進入指令寄存器。至此,一條指令執行完畢。單片機中PC=0002H,PC在
    的頭像 發表于 02-15 09:53 ?1.9w次閱讀

    CPU指令的條件執行分享!

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

    CPU周期與微指令周期的關系

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

    什么是CPU分枝/亂序執行

    什么是分枝/亂序執行?   分枝(branch)是指程序運行時需要改變的節點。分枝有無條件分枝和有條件分枝,其中無條件分枝只
    發表于 02-04 10:49 ?907次閱讀

    cpu執行指令的過程詳解

    計算機每執行一條指令都可分為三個階段進行。即取指令-----分析指令-----執行指令
    的頭像 發表于 03-09 16:30 ?10.4w次閱讀
    <b class='flag-5'>cpu</b><b class='flag-5'>執行</b><b class='flag-5'>指令</b>的過程詳解

    CPU操作指令詳解

    CPU將CS:IP指向的內存單元中的內容看作指令,因為,在任何時候,CPU將CS,IP中的內容當作指令的段地址和偏移地址,用它們合成指令的物
    的頭像 發表于 09-24 17:52 ?9900次閱讀

    80C51單片機指令的取指和執行時序詳細說明

    現按4類指令介紹CPU時序。因為CPU工作的過程就是取指令執行指令的過程,所以
    發表于 09-27 17:16 ?1次下載
    80C51單片機<b class='flag-5'>指令</b>的取指和<b class='flag-5'>執行</b>時序詳細說明

    嵌入式RISC-V亂序執行處理器的設計方案

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

    超標量處理器的指令亂序提交機制綜述

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

    單片機是怎么執行指令的?

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

    CPU指令執行過程 CPU指令流水線

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

    如何證明CPU指令亂序執行的呢?

    雙擊QQ.exe從磁盤加載到內存里面,內存里面就會有了一個進程,進程產生的時候會產生一個主線程,就是main方法所在的線程
    的頭像 發表于 03-15 09:14 ?1199次閱讀

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

    知道指令亂序策略很重要,原因是這樣我們就能夠通過barrier(內存屏障)等指令,在正確的位置告訴cpu或者是編譯器,這里我可以接受亂序
    的頭像 發表于 05-19 14:42 ?1373次閱讀
    當我們在談論<b class='flag-5'>cpu</b><b class='flag-5'>指令</b><b class='flag-5'>亂序</b>的時候,究竟在談論什么?

    編譯器的亂序策略

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

    cpu執行程序內部變化

    CPU(Central Processing Unit)是計算機的核心部件之一,它負責執行計算機程序的指令,并進行數據處理和控制操作。CPU執行
    的頭像 發表于 12-05 11:26 ?660次閱讀
    主站蜘蛛池模板: 一区二区三区四区在线观看视频 | 日本在线一区二区| 国产成人福利夜色影视| 久久久久久夜精品精品免费啦| 免费高清在线观看a网站| 国产一级特黄aaa大片| 日本wwwhdsex69| 一区二区福利| 99久热| 婷婷久久综合| 色多多污网站在线观看| 欧美色图色就是色| 精品啪啪| 18视频免费网址在线观看| 天天色天天操综合网| 久久91精品牛牛| 国产h在线观看| 欧美日本一道免费一区三区| 一级欧美视频| 日本一区三区二区三区四区| 精品国产免费人成高清| 在线操| 国产一区二区三区波多野吉衣| 免费观看高清视频| 在线观看免费视频网站色| 日韩美女奶水喂男人在线观看| 久久夜色精品国产噜噜| 夜夜操天天| 国产视频久| 色婷婷激情五月综合| 五月婷婷激情在线| 免费色视频网站| 伊人狼人综合网| 国产精品无码永久免费888| 色爱区综合激情五月综合色| 欧美影院一区二区| 国产玖玖在线| 欧美天天干| 又黄又湿又爽| 天堂a| 国产吧在线视频|