精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

什么是指令調度(上)

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

指令調度簡介

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

根據指令調度發生的階段,可以把其分為靜態調度和動態調度^[2]^。

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

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

現代計算機的指令并行方案

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

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

    • 使能流水線之后
      圖片

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

對于如下原始指令序列

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

在指令調度之前,耗時17個cycle:

圖片

在指令調度之后,耗時13個cycle:

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

圖片

  1. 超標量
    具備超標量結構的CPU在一個內核上集成了多個譯碼器、ALU等單元。相比于具備普通流水線技術的CPU,具備超標量技術的CPU可以在同一個階段執行多條處在相同階段的指令。
    圖片
    超標量流水線:
    圖片

    指令調度與寄存器分配的關系

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

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

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

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

在LLVM編譯器的設計中,寄存器分配之前和寄存器分配之后都會執行指令調度。

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

圖片

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

    關注

    68

    文章

    19178

    瀏覽量

    229201
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10829

    瀏覽量

    211196
  • 指令調度器
    +關注

    關注

    0

    文章

    4

    瀏覽量

    1492
收藏 人收藏

    評論

    相關推薦

    一種改進的SEDF調度算法

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

    μC/OS的任務調度實現方法及PowerPC的優化

    那些具有優先級算法硬件指令的CPU,僅做移植是很不夠的。  1 基于優先級的任務調度  一個基于優先級的實時多任務內核的任務調度機制需要實現下面三個核心的處理功能:  ◆ 將任務置于就緒態;  ◆ 將
    發表于 04-16 09:18

    應急通信調度指揮系統的原理

      應急通信調度指揮系統的原理  從技術層面,我們提到的應急通信調度指揮系統原理,如圖所示,主要包括四個方面:信息采集、信息傳遞、信息處理以及指令下達和執行 。其中,虛框內表示急需  1.信息采集
    發表于 12-29 17:21

    請問ucos多任務使用全局變量什么時候需要關中斷或者關調度?

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

    在BLE broadcaster基礎測試TMOS調度,無法正常調度是為什么?

    在BLE broadcaster基礎測試TMOS調度,發現在ProcessEvent里第一行增加PRINT("LED_Process:%x ",events
    發表于 08-11 06:26

    編譯器優化的靜態調度介紹

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

    基于ARM Cortex-M3的μCOS-II任務調度硬件指令實現

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

    同時多線程處理器的指令調度器設計

    同時多線程處理器的指令調度器設計_李樂
    發表于 01-08 14:55 ?0次下載

    跳轉指令B及帶連接的跳轉指令BLX 

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

    柔性負荷調度,發電調度的補充

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

    計算機系統結構教程之指令級并行的詳細資料說明

    本文檔的主要內容詳細介紹的是計算機系統結構教程之指令級并行的詳細資料說明包括了:1 指令級并行的概念,2 指令的動態調度,3 動態分支預測技術,4 多
    發表于 12-10 08:00 ?0次下載
    計算機系統結構教程之<b class='flag-5'>指令</b>級并行的詳細資料說明

    機場智能調度系統的功能及應用方案

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

    HLS優化設計的最關鍵指令

    Unroll 指令在 for 循環的代碼區域進行優化,這個指令不包含流水線執行的概念,單純地將循環體展開使用更多地硬件資源實現,保證并行循環體在調度地過程中是彼此獨立的。
    的頭像 發表于 01-14 09:41 ?2571次閱讀

    什么是調度?如何進行調度

    進程調度是操作系統最重要的內容之一,也是學習操作系統的重點和難點。關于進程調度,我們首先就會問出一些問題,什么是進程調度,為什么要進程調度,如何進行
    發表于 08-05 09:04 ?1.3w次閱讀

    什么是指令調度(下)

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