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

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

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

什么是指令調(diào)度(上)

jf_78858299 ? 來源:姜海波 畢昇編譯 ? 作者:姜海波 畢昇編譯 ? 2023-02-02 09:36 ? 次閱讀

指令調(diào)度簡介

指令調(diào)度是指對程序塊或過程中的操作進行排序以有效利用處理器資源的任務^[1]^。指令調(diào)度的目的就是通過重排指令,提高指令級并行性,使得程序在擁有指令流水線的CPU上更高效的運行。指令調(diào)度優(yōu)化的一個必要前提就是CPU硬件支持指令并行,否則,指令調(diào)度是毫無意義的。

根據(jù)指令調(diào)度發(fā)生的階段,可以把其分為靜態(tài)調(diào)度和動態(tài)調(diào)度^[2]^。

  • 靜態(tài)調(diào)度:發(fā)生在程序編譯時期。靜態(tài)調(diào)度由編譯器完成,在生成可執(zhí)行文件之前通過指令調(diào)度相關(guān)優(yōu)化,完成指令重排。
  • 動態(tài)調(diào)度:發(fā)生在程序運行時期。需要提供相應的硬件支持,比如亂序執(zhí)行(OoOE: out-of-order execution),此時指令的發(fā)射順序和執(zhí)行順序可能是不一致,但CPU會保證程序執(zhí)行的正確性。

無論是靜態(tài)調(diào)度還是動態(tài)調(diào)度,都是通過指令重排以提高指令流水,進而提高程序執(zhí)行性能。靜態(tài)調(diào)度和動態(tài)調(diào)度二者相輔相成,可以彌補對方的一些天然不足,協(xié)同完成指令流水優(yōu)化,提高程序性能。本文主要介紹靜態(tài)調(diào)度,如無特殊說明,后續(xù)指令調(diào)度均指靜態(tài)指令調(diào)度。

現(xiàn)代計算機的指令并行方案

現(xiàn)代計算機的三種并行模式:流水線、超標量、多核。其中流水線和超標量與指令調(diào)度相關(guān)性更強,下面簡單介紹一下這兩種模式。

  1. 流水線
    將指令執(zhí)行過程分成多個階段,每個階段使用不同的硬件資源,從而使得多條指令的執(zhí)行時間可以重疊。
    經(jīng)典五段式流水線:IF(取指)、ID(譯碼)、EX(執(zhí)行)、MEM(訪存)、WB(回寫)。在五段式流水線中將一條指令的執(zhí)行過程分成了5個階段。
    圖片
    • 使能流水線之前
      圖片

    • 使能流水線之后
      圖片

      在最優(yōu)情況下,一個cycle中,由于指令執(zhí)行的每個階段使用不同的硬件資源,不存在競爭關(guān)系,從而可以使每個指令執(zhí)行在不同的階段。而由于數(shù)據(jù)依賴等原因的存在,流水線的并行程度一般很難達到最優(yōu),具體的并行程度需要依賴于指令調(diào)度的效果。

對于如下原始指令序列

ldr    x1, [x2, x3]
add    x1, x1, #1
ldr    x5, [x2, x4]
sub    x5, x5, #1
mul    x6, x1, x5

在指令調(diào)度之前,耗時17個cycle:

圖片

在指令調(diào)度之后,耗時13個cycle:

ldr    x1, [x2, x3]
ldr    x5, [x2, x4]
add    x1, x1, #1
sub    x5, x5, #1
mul    x6, x1, x5

圖片

  1. 超標量
    具備超標量結(jié)構(gòu)的CPU在一個內(nèi)核上集成了多個譯碼器、ALU等單元。相比于具備普通流水線技術(shù)的CPU,具備超標量技術(shù)的CPU可以在同一個階段執(zhí)行多條處在相同階段的指令。
    圖片
    超標量流水線:
    圖片

    指令調(diào)度與寄存器分配的關(guān)系

講到指令調(diào)度,不可避免的會想到寄存器分配,而指令調(diào)度和寄存器分配之間可以說具有相互約束、相互作用的關(guān)系。

指令調(diào)度通過重排指令順序,降低指令間依賴,提高程序的并行度,相應的,改變指令的執(zhí)行時機也會改變指令所使用的寄存器的生命周期;而寄存器分配又是挖掘程序的局部性,盡量縮短寄存器的生命周期,以能夠讓更多的數(shù)據(jù)直接存儲在寄存器中。

寄存器分配同樣也會影響指令調(diào)度,例如當對寄存器的需求超過寄存器數(shù)量時,會選擇增加一些訪存指令,這些指令也需要納入到指令調(diào)度的考慮范疇之內(nèi)。

所以說兩者相互約束??梢灾?,將指令調(diào)度問題和寄存器分配問題作為兩個約束條件進行聯(lián)合求解得到的解決方案是相對更優(yōu)的,但由于無論是指令調(diào)度還是寄存器分配,都是很復雜的NP完全問題,綜合考慮下,編譯器一般會分別處理二者^[1]^。

在LLVM編譯器的設(shè)計中,寄存器分配之前和寄存器分配之后都會執(zhí)行指令調(diào)度。

  • 寄存器分配之前執(zhí)行指令調(diào)度:當前LLVM IR中分配的寄存器為虛擬寄存器,寄存器數(shù)量不受限制,此時指令調(diào)度受到的約束最小,可以更大程度上提高指令并行度。但是在寄存器分配階段,使用物理寄存器替換虛擬寄存器,由于物理寄存器數(shù)量有限,寄存器壓力增大,可能產(chǎn)生寄存器spill場景影響程序性能。
  • 寄存器分配之后執(zhí)行指令調(diào)度:寄存器分配階段由于寄存器復用等情況會增加指令間依賴,破壞在寄存器分配之前做好的指令調(diào)度優(yōu)化,所以在寄存器分配之后還要再次執(zhí)行指令調(diào)度。

圖片

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

    關(guān)注

    68

    文章

    19286

    瀏覽量

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

    關(guān)注

    68

    文章

    10863

    瀏覽量

    211796
  • 指令調(diào)度器
    +關(guān)注

    關(guān)注

    0

    文章

    4

    瀏覽量

    1508
收藏 人收藏

    評論

    相關(guān)推薦

    一種改進的SEDF調(diào)度算法

    法引入一種比較機制來執(zhí)行多處理器間的負載平衡.當VCPU調(diào)度時,將就緒VCPU遷移到總運行時間最少的處理器.仿真實驗結(jié)果表明:IEDF調(diào)度算法性能有較大的提升【關(guān)鍵詞】:SMP;;SEDF;;負載平衡
    發(fā)表于 04-24 10:03

    μC/OS的任務調(diào)度實現(xiàn)方法及PowerPC的優(yōu)化

    那些具有優(yōu)先級算法硬件指令的CPU,僅做移植是很不夠的?! ? 基于優(yōu)先級的任務調(diào)度  一個基于優(yōu)先級的實時多任務內(nèi)核的任務調(diào)度機制需要實現(xiàn)下面三個核心的處理功能:  ◆ 將任務置于就緒態(tài);  ◆ 將
    發(fā)表于 04-16 09:18

    應急通信調(diào)度指揮系統(tǒng)的原理

      應急通信調(diào)度指揮系統(tǒng)的原理  從技術(shù)層面,我們提到的應急通信調(diào)度指揮系統(tǒng)原理,如圖所示,主要包括四個方面:信息采集、信息傳遞、信息處理以及指令下達和執(zhí)行 。其中,虛框內(nèi)表示急需  1.信息采集
    發(fā)表于 12-29 17:21

    請問ucos多任務使用全局變量什么時候需要關(guān)中斷或者關(guān)調(diào)度

    在STM32用ucos ,有的時候不方便用郵箱 和隊列 只能用全局變量,那么問題來了,因為操作全局變量的時候有時是多條匯編指令,如果現(xiàn)在中斷來了,進行任務調(diào)度的話就破壞了該全局變量,結(jié)果不可預料
    發(fā)表于 10-23 00:20

    在BLE broadcaster基礎(chǔ)測試TMOS調(diào)度,無法正常調(diào)度是為什么?

    在BLE broadcaster基礎(chǔ)測試TMOS調(diào)度,發(fā)現(xiàn)在ProcessEvent里第一行增加PRINT("LED_Process:%x ",events
    發(fā)表于 08-11 06:26

    編譯器優(yōu)化的靜態(tài)調(diào)度介紹

      指令調(diào)度簡介  指令調(diào)度是指對程序塊或過程中的操作進行排序以有效利用處理器資源的任務。指令調(diào)度
    發(fā)表于 03-17 17:07

    基于ARM Cortex-M3的μCOS-II任務調(diào)度硬件指令實現(xiàn)

    本文首先多UC/OS-II的任務調(diào)度算法做了詳細的分析, 然后介紹了基于基于ARM Cortex-M3的COS-II的任務調(diào)度硬件指令實現(xiàn)
    發(fā)表于 03-25 15:13 ?270次下載
    基于ARM Cortex-M3的μCOS-II任務<b class='flag-5'>調(diào)度</b>硬件<b class='flag-5'>指令</b>實現(xiàn)

    同時多線程處理器的指令調(diào)度器設(shè)計

    同時多線程處理器的指令調(diào)度器設(shè)計_李樂
    發(fā)表于 01-08 14:55 ?0次下載

    跳轉(zhuǎn)指令B及帶連接的跳轉(zhuǎn)指令BLX 

    跳轉(zhuǎn)(B)和跳轉(zhuǎn)連接(BL)指令是改變指令執(zhí)行順序的標準方式。ARM一般按照字地址順序執(zhí)行指令,需要時使用條件執(zhí)行跳過某段指令。只要程序必須偏離順序執(zhí)行,就要使用控制流
    發(fā)表于 10-19 10:26 ?2次下載
    跳轉(zhuǎn)<b class='flag-5'>指令</b>B及帶連接的跳轉(zhuǎn)<b class='flag-5'>指令</b>BLX<b class='flag-5'>上</b> 

    柔性負荷調(diào)度,發(fā)電調(diào)度的補充

    的負荷,包含具備需求彈性的可調(diào)節(jié)負荷或可轉(zhuǎn)移負荷,具備雙向調(diào)節(jié)能力的電動汽車、儲能、蓄能,以及分布式電源、微網(wǎng)等。傳統(tǒng)發(fā)電調(diào)度中,機組需按照調(diào)控指令完全響應,而柔性負荷調(diào)度在滿足電網(wǎng)調(diào)度
    發(fā)表于 05-24 14:44 ?7131次閱讀
    柔性負荷<b class='flag-5'>調(diào)度</b>,發(fā)電<b class='flag-5'>調(diào)度</b>的補充

    計算機系統(tǒng)結(jié)構(gòu)教程之指令級并行的詳細資料說明

    本文檔的主要內(nèi)容詳細介紹的是計算機系統(tǒng)結(jié)構(gòu)教程之指令級并行的詳細資料說明包括了:1 指令級并行的概念,2 指令的動態(tài)調(diào)度,3 動態(tài)分支預測技術(shù),4 多
    發(fā)表于 12-10 08:00 ?0次下載
    計算機系統(tǒng)結(jié)構(gòu)教程之<b class='flag-5'>指令</b>級并行的詳細資料說明

    機場智能調(diào)度系統(tǒng)的功能及應用方案

    根據(jù)機場地勤運作特點和業(yè)務需求,易華錄提供了一體化端到端的機場無線地勤調(diào)度解決方案,為機場運作提供高效、安全、可靠并且高性價比的特有的機場調(diào)度系統(tǒng),統(tǒng)一承載語音通話、集群語音、工作流指令、信息發(fā)布
    發(fā)表于 11-16 10:49 ?3185次閱讀

    HLS優(yōu)化設(shè)計的最關(guān)鍵指令

    Unroll 指令在 for 循環(huán)的代碼區(qū)域進行優(yōu)化,這個指令不包含流水線執(zhí)行的概念,單純地將循環(huán)體展開使用更多地硬件資源實現(xiàn),保證并行循環(huán)體在調(diào)度地過程中是彼此獨立的。
    的頭像 發(fā)表于 01-14 09:41 ?2602次閱讀

    什么是調(diào)度?如何進行調(diào)度

    進程調(diào)度是操作系統(tǒng)最重要的內(nèi)容之一,也是學習操作系統(tǒng)的重點和難點。關(guān)于進程調(diào)度,我們首先就會問出一些問題,什么是進程調(diào)度,為什么要進程調(diào)度,如何進行
    發(fā)表于 08-05 09:04 ?1.4w次閱讀

    什么是指令調(diào)度(下)

    指令調(diào)度是指對程序塊或過程中的操作進行排序以有效利用處理器資源的任務[1]。指令調(diào)度的目的就是通過重排指令,提高
    的頭像 發(fā)表于 02-02 09:36 ?1392次閱讀
    什么是<b class='flag-5'>指令</b><b class='flag-5'>調(diào)度</b>(下)