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

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

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

3天內不再提示

Machine Outliner簡介

冬至子 ? 來源:畢昇編譯 ? 作者:王婉酈 ? 2023-06-06 15:41 ? 次閱讀

嵌入式領域,代碼體積(code size)優化能夠減少內存的使用,對產品的競爭力至關重要。對當代產品而言, code size優化可以為產品放入更多特性,增強競爭力;對下一代產品而言,code size優化能夠帶來產品功耗和成本的競爭力提升。LLVM Machine Outliner是一種編譯器優化技術,可以識別重復代碼片段,將其提取出來并轉換成一個獨立的函數,從而降低程序code size。

示例

通過以下代碼示例,描述是否開啟Machine Outliner優化的效果:

int div(int x) {
    int a = x / 2;
    int b = x;
    return b / a;
}

int sub(int x) {
    int a = x / 2;
    int b = x;
    return b - a;
}

以上代碼片段由div和sub兩個函數組成,通過函數參數x,對變量a和b賦值,然后分別返回b和a相除,以及b和a相減的結果。其中,關于變量a、b賦值部分為重復代碼片段。

是否開啟Machine Outliner優化,在匯編層面的區別如下表所示:

image.png

如果不開啟Machine Outliner優化,則會分別在標簽div和sub下生成相關的重復匯編指令。開啟Machine Outliner優化,則會將重復指令提取為單獨的函數,并且在重復指令初始位置添加函數調用,從而降低程序code size。在編譯階段,可以通過使用 -mllvm -enable-machine-outliner=always 選項開啟Machine Outliner優化,提取出的函數統一以“OUTLINED_FUNCTION_n”的形式命名。

后綴樹

Machine Outliner優化依靠后綴樹(Suffix Tree)的形式進行重復指令序列的識別,后綴樹的構造和重復字符串查詢操作均可在線性時間復雜度內完成,從而實現了Machine Outliner優化的效率提升。

后綴樹是一種將字符串所有后綴存儲在一棵樹中的數據結構,目的是用來支持快速搜索和大量字符串匹配和查詢,能高效解決很多關于字符串的問題[2]。字符串S對應的后綴樹,也就是由該字符串所有后綴所共同構成的壓縮字典樹。

字典樹(Trie)是一種樹形數據結構,其中每條邊用來表示一個字符,且每個節點出邊對應的字符都不相同,將根節點到某一節點路徑上所經過的字符拼接起來,即為該節點所表示的字符串。壓縮字典樹(Compressed Trie)由字典樹演變而來,將字典樹中的單節點鏈條壓縮為一個節點,即將相鄰的具有相同前綴的節點合并,可得到對應的壓縮字典樹。字符串“ABD$0”對應的字典樹和壓縮字典樹如下所示:

image.png

后綴樹的構建需要經過字符串后綴生成和壓縮字典樹構建兩步:

  1. 生成字符串S的所有后綴,以“ABCAB$0”(“$0”是結束字符)為例,該字符串的所有后綴為:
    ABCAB$0
    BCAB$0
    CAB$0
    AB$0
    B$0
    $0
    
  2. 為以上所有后綴生成字典樹,并且合并節點生成相應的壓縮字典樹:

image.png

令字符串S的長度為n,通過構建字符串S所對應的后綴樹,即可在O(n)時間復雜度內,完成字符串重復次數,以及重復字符串長度的檢索[3]。

重復次數搜索: 假設字符串T在字符串S中重復次數為m,則字符串S應有m個后綴以字符串T為前綴,即字符串T所對應節點的葉節點數量為其重復次數。

重復字符串長度搜索: 由于重復字符串出現次數大于1,所以字符串T在后綴樹中一定以非葉節點的形式表示,字符串T的長度為該非葉節點到根節點所經過的字符總數。

編譯器實現

LLVM對于Machine Outliner的實現在寄存器分配之后,主要集中在MachineOutliner.cpp中,基于機器指令表示(MIR)進行函數的分析和提取,以實現程序code size優化。

編譯器側的實現過程可劃分為指令映射、后綴樹構建和函數提取三個階段:

  1. 將指令映射成特定的無符號數,并以指令-無符號數對的形式存儲在Map中;
  2. 以無符號數組為輸入構建指令序列對應的后綴樹,并且找出所有長度大于2的重復指令序列;
  3. 遍歷后綴樹并進行收益計算,從而得到包含正收益序列的候選列表,對于具備收益的候選項進行函數外提。

指令映射

首先需要遍歷源文件對應的所有指令,將所有合法指令映射為無符號數(InstrNumber),并以指令-無符號數對的形式存儲在Map中,如果兩條指令的操作碼和操作數均相同,則認為兩條指令相同。對于所訪問的每條指令,首先應該在Map中查詢是否已經存儲了相同的指令,如果是,則返回對應的InstrNumber;否則,將該指令插入到Map中,InstrNumber自加。

至此,所有指令均以無符號數的形式進行唯一標識,以作為構建后綴樹的輸入。而對于讀寫棧指針、PC相關,以及其他與call、ret指令有數據依賴的指令,將被判定為非法指令,為保證程序運行的正確性,這些指令不參與上述映射過程。

image.png

后綴樹構建

假定將無符號數以字符形式表示,以指令映射輸出的無符號數組為輸入,通過添加終結符和構建后綴樹,即可在線性時間復雜度內,完成字符串S的所有重復子字符串長度、重復次數和起始下標的計算,這些重復字符串將以候選列表的形式輸出。

  1. 以第2節所示匯編指令為例,經過指令映射和添加終結符后可得到字符串S: ABCDEFG$0ABCDEH$1,其中添加終結符可避免跨函數指令序列提取。

image.png

  1. 以字符串S為輸入,構建后綴樹:

image.png

令ABCDE所指向的節點為P,單個字符所表示的距離為1,則節點P到根節點的距離為5,大于其他非葉節點到根節點的距離,因此ABCDE為字符串S中的最長重復子字符串T。節點P有兩個子節點,因此字符串T的重復次數為2,且T在S中的起始下標分別為[0,4],[8,12]。

函數提取

完成后綴樹構建和重復字符串解析后,還需要對提取該重復字符串對應的指令序列進行code size收益計算,計算公式如下:

codesize_benefit = codesize_before - codesize_after
codesize_before = 指令序列重復次數 * 指令序列codesize
codesize_after = 插入call指令的codesize + 指令序列codesize + 插入ret指令的codesize

如果收益大于1,則提取同一重復字符串對應的所有指令序列,以構造outline函數,并在函數末尾額外添加ret指令。而對于重復字符串指向的下標位置,需要刪除初始指令序列,并且通過call指令增加對outline函數的調用。

image.png

總結

本文對Machine Outliner的基本概念和實現方法進行了簡單介紹,通過將所有指令映射成為無符號數,并且以后綴樹的形式對重復指令序列進行高效識別,最后提取具有正收益的指令序列作為outline函數,實現程序code size優化,從而提高代碼的可讀性并且減少程序的內存占用。

在源碼中大量使用宏、模板,以及循環展開的場景下,開啟Machine Outliner優化將會獲得明顯的code size收益;而對于程序本身code size很小、結構化設計良好,或者包含大量違反外提約束的情況,Machine Outliner對code size的優化效果不顯著。此外,在LLVM14及更高版本上,完成了多次outline的實現,相比于本文所述的單次outline,能夠進一步實現code size提升。

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

    關注

    1

    文章

    1634

    瀏覽量

    49164
  • 嵌入式系統中

    關注

    0

    文章

    2

    瀏覽量

    5705
  • DIV
    DIV
    +關注

    關注

    0

    文章

    6

    瀏覽量

    10570
  • sub函數
    +關注

    關注

    0

    文章

    3

    瀏覽量

    1019
收藏 人收藏

    評論

    相關推薦

    Coke Machine State Machine

    `Coke Machine State Machine 源碼:、在官方給的例程中加以修改,關于狀態機是個很好的學習范例。PDF資料截圖如下:`
    發表于 08-06 19:42

    JKI-State-Machine-Objects(SMO)框架講解

    SMO-------------------------- 主帖---------------------------- 1.JKI-State-Machine-Objects簡介
    發表于 06-12 13:23

    Brain Machine腦機器套件解析

    Brain Machine Kit,為您提供一種有趣,簡單的冥想方式,同時非常上鏡。它們使用燈光和聲音,以14分鐘長的腦波頻率冥想序列脈動。你的大腦與這個冥想序列同步,你冥想。就是這么簡單,沿途生動
    發表于 07-26 17:26

    vipm中 jki state machine

    新電腦,安裝完labview 2014后 報如下錯誤,進而導致vipm中沒有 jki sate machine安裝包原電腦打開vipm的界面如下請問如果解決
    發表于 04-12 17:15

    MCU也能做Machine learning嗎

    你知道嗎?MCU也能做Machine learning (ML)剛剛過去的2018年被稱為“人工智能元年”,2隨著單芯片計算力的不斷增長,機器學習(ML)不再是云計算和高性能處理器的專利,邊緣計算
    發表于 11-03 06:36

    Finite State Machine Datapath

    Finite State Machine Datapath Design, Optimization, and Implementation explores the design space
    發表于 07-22 11:26 ?0次下載

    Research on Human Machine Inte

    Research on Human Machine Interface of Palm CNC:Huai Yin Institute of Technology ,Mechnical
    發表于 10-15 17:01 ?23次下載

    Design Safe Verilog State Machine(Synplicity)

    One of the strengths of Synplify is the Finite State Machine compiler. This is a powerfulfeature
    發表于 01-17 11:12 ?0次下載
    Design Safe Verilog State <b class='flag-5'>Machine</b>(Synplicity)

    State Machine Coding Styles for Synthesis

    本文論述了狀態機的verilog編碼風格,以及不同編碼風格的優缺點, Steve Golsons 1994 paper, State Machine Design Techniques
    發表于 01-17 11:22 ?0次下載
    State <b class='flag-5'>Machine</b> Coding Styles for Synthesis

    State Machine電路設計

    State Machine電路設計,喜歡的朋友可以下載來學習。
    發表于 01-12 11:21 ?0次下載

    繪圖案例【Circuit Simulation】State_Machine

    繪圖案例【Circuit Simulation】State Machine
    發表于 02-16 11:26 ?0次下載

    EcoStruxure Machine Expert編程指南

    本文檔介紹 EcoStruxure Machine Expert 軟件的圖形用戶界面及其提供的功能。 有關其他信息,請參閱 EcoStruxure Machine Expert 在線幫助內的獨立文檔。
    發表于 09-07 11:47 ?14次下載

    Machine Outliner簡介

    在嵌入式領域,代碼體積(code size)優化能夠減少內存的使用,對產品的競爭力至關重要。對當代產品而言, code size優化可以為產品放入更多特性
    的頭像 發表于 05-20 17:35 ?1132次閱讀
    <b class='flag-5'>Machine</b> <b class='flag-5'>Outliner</b><b class='flag-5'>簡介</b>

    使用Teachable Machine和Python輕松進行對象檢測

    電子發燒友網站提供《使用Teachable Machine和Python輕松進行對象檢測.zip》資料免費下載
    發表于 06-27 09:26 ?0次下載
    使用Teachable <b class='flag-5'>Machine</b>和Python輕松進行對象檢測

    準備time machine備份磁盤發生錯誤

    Time Machine是蘋果公司旗下的一款備份工具,它能夠自動將你的文件備份到外部磁盤。然而,在備份過程中,有時會遇到一些錯誤。本文將詳細介紹如何解決Time Machine備份磁盤發生錯誤
    的頭像 發表于 12-28 11:27 ?1250次閱讀
    主站蜘蛛池模板: 日本电影护士| 两个人看的www免费高清直播| 国产毛片视频网站| 亚洲国产日韩欧美高清片a| av天堂网站avtt2017| 久久福利影院| 亚洲.日韩.欧美另类| 国产精品嫩草99AV在线| 伸进同桌奶罩里摸她胸作文| 亚洲精品无夜久久久久久久久| 国产ts调教| 窝窝影院午夜看片毛片| 国产福利视频在线观看福利| 桃隐社区最新最快地址| 国产成人亚洲综合无| 欧美性xxx极品| 亚洲欧洲免费三级网站| 99久久国产综合精品成人影院| 久青草国产97香蕉在线视频| 在线伦理电影网| 久久伊人网站| 99久久精品国产亚洲AV| 欧美色妞AV重囗味视频| xx顶级欧美熟妞xxhd| 色戒西瓜视频| 国产偷国产偷亚洲高清app| 亚洲女人网| 麻豆国产自制在线观看| SORA是什么意思| 少妇性饥渴BBBBBBBBB| 国产在线高清亚洲精品一区| 亚洲午夜久久久无码精品网红A片 亚洲午夜久久久久中文字幕 | 狠狠人妻久久久久久综合九色| 亚洲精品九色在线网站| 久久草香蕉频线观| 91精品乱码一区二区三区| 欧美.亚洲.日韩.天堂| 国产成人免费片在线观看| 亚洲乱妇88网| 内射老妇BBX| 国产精品成人免费视频99|