哈哈哈哈哈操欧洲电影,久草网在线,亚洲久久熟女熟妇视频,麻豆精品色,久久福利在线视频,日韩中文字幕的,淫乱毛视频一区,亚洲成人一二三,中文人妻日韩精品电影

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

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

3天內不再提示

深入淺出編譯優(yōu)化選項(下)

IAR愛亞系統(tǒng) ? 來源:IAR愛亞系統(tǒng) ? 2023-04-21 10:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在《深入淺出編譯優(yōu)化選項(上)》中,我們介紹了如何在IAR Embedded Workbench編譯器中進行編譯優(yōu)化等級配置、多文件編譯配置、靈活配置編譯優(yōu)化選項作用域、鏈接階段優(yōu)化選項配置等。

本文將進一步探索編譯優(yōu)化技術,介紹編譯優(yōu)化策略以及如何進行編譯優(yōu)化微調項配置。如果把編譯優(yōu)化等級選項看作粗調參數,那么編譯優(yōu)化微調項就可以比作細調參數,幫助用戶進一步打磨關鍵代碼的體積和性能的最佳配比。

編譯優(yōu)化等級如何對應到編譯優(yōu)化策略

b999b38a-df81-11ed-bfe3-dac502259ad0.png

《深入淺出編譯優(yōu)化選項(上)》一文中的“編譯器代碼構建過程”章節(jié)詳細介紹了代碼構建過程,如上圖所示。圖中右邊紅框內的內容為編譯過程中所實施的編譯優(yōu)化策略,我們在配置編譯優(yōu)化等級時,其實就是配置了一組相對應的編譯優(yōu)化策略。

以IAR Embedded Workbench(基于EWARM v9.32.2)編譯器為例,通過菜單欄(Project -> Options)打開項目選項界面,選中“C/C++ Compiler”欄目,并且在右邊選項卡選中“Optimizations”,即可進行編譯優(yōu)化選項配置,如下圖所示。

b9d52b86-df81-11ed-bfe3-dac502259ad0.png

IAR Embedded Workbench共分為4個優(yōu)化等級(None, Low, Medium, High),其中優(yōu)化等級 “High” 又分為3個子優(yōu)化等級(Balanced, Size, Speed)。下表總結各個優(yōu)化等級對應的優(yōu)化策略組合。

ba13aaaa-df81-11ed-bfe3-dac502259ad0.png

由上表可以看出,各個編譯優(yōu)化等級包含了不同的編譯優(yōu)化策略組合,每種組合都是IAR根據大量用戶使用經驗進行配比,因此設置編譯優(yōu)化等級能夠滿足大多數軟件編譯優(yōu)化的需求。但是我們也看到上表中4個優(yōu)化等級對應了10個以上的編譯優(yōu)化策略,如果能夠在設置編譯優(yōu)化等級的基礎上,再使能對優(yōu)化策略的精細配置,那么有助于用戶進一步打磨關鍵代碼的體積和性能的最佳配比。

編譯優(yōu)化微調項配置

IAR Embedded Workbench編譯器作為一款業(yè)界領先的編譯工具鏈,除了提供最佳編譯性能之外,也提供了極其靈活的編譯優(yōu)化選項配置來滿足上述需求。用戶除了可以進行編譯優(yōu)化等級的配置外,IAR Embedded Workbench還提供了編譯優(yōu)化微調項(Enabled transformations),在不同的編譯優(yōu)化等級中,可以進一步打開或者關閉一些優(yōu)化策略,使得用戶可以根據關鍵代碼需求配置出更加精準的編譯優(yōu)化策略組合。

具體微調選項在下圖中所示:

ba34edbe-df81-11ed-bfe3-dac502259ad0.png

公共子表達式消除(Common subexpression elimination)

在編譯器優(yōu)化階段,消除程序中重復計算的表達式。如下圖示例,如果程序中存在多處使用相同的表達式,那么在進行“公共子表達式消除”優(yōu)化后,只需要計算一次該表達式,然后將結果緩存起來供其他地方使用,從而減少程序的運行時間和計算量。

ba4fda48-df81-11ed-bfe3-dac502259ad0.png

循環(huán)展開(Loop unrolling)

在編譯器優(yōu)化階段,將循環(huán)體中的代碼復制多次,以減少循環(huán)次數和內存訪問次數,從而提高程序的執(zhí)行效率。如下圖示例,如果程序中有一個循環(huán)體,每次循環(huán)都進行一次printf操作,那么在進行“循環(huán)展開”優(yōu)化后,可以將循環(huán)體中的代碼復制多次,從而減少循環(huán)次數和內存訪問次數,從而提高程序的執(zhí)行效率。

ba68b8d8-df81-11ed-bfe3-dac502259ad0.png

函數內聯(Function inline)

指的是在編譯器優(yōu)化階段,將函數調用的代碼替換為函數本體代碼,從而減少函數調用的開銷和程序的執(zhí)行時間。如下圖示例,如果程序中有一個函數調用語句,那么在進行“函數內聯”優(yōu)化后,可以將函數調用語句替換為函數體中的代碼,從而避免了函數調用的開銷,同時也使得程序更加緊湊,提高程序的執(zhí)行效率。

ba8372c2-df81-11ed-bfe3-dac502259ad0.png

代碼移動(Code motion)

指的是在編譯器優(yōu)化階段,將程序中的某些計算或操作移到可以共享的位置,以減少程序執(zhí)行時的計算量和內存訪問次數,從而提高程序的效率。如下圖示例,如果程序中有多處重復計算相同的表達式,那么在進行“代碼移動”優(yōu)化后,可以將這些計算移到一個共享的位置,只計算一次,并將結果緩存起來供其他地方使用,從而減少程序的計算量和內存訪問次數。

ba99c202-df81-11ed-bfe3-dac502259ad0.png

類型別名分析(Type-based alias analysis)

嵌入式系統(tǒng)中,內存訪問往往是非常“昂貴”的操作,而內存的訪問速度會影響系統(tǒng)的響應速度和能耗。因此,在編寫嵌入式C代碼時,需要考慮如何盡可能減少內存訪問次數以提高系統(tǒng)的性能。"類型別名分析"是一種編譯器優(yōu)化技術,可在編譯代碼時識別出哪些變量指向了同一個內存地址,從而可以更有效地使用內存,并避免在訪問內存時出現重復數據的加載和存儲。如下圖示例,優(yōu)化后,使用臨時變量i(通常保存在CPU寄存器)進行計算并賦值給sum,而不使用*a,避免重新從內存中加載,從而提高運行性能。

babb4cf6-df81-11ed-bfe3-dac502259ad0.png

靜態(tài)聚類(Static clustering)

指的是在編譯器優(yōu)化階段,通過對代碼進行靜態(tài)分析,將相關的代碼組合在一起,以便在執(zhí)行時能夠更好地利用硬件資源,提高程序的執(zhí)行效率和響應速度。具體來說,“靜態(tài)聚類”技術會根據程序中的數據流分析,將具有相同數據依賴關系的代碼段組合成獨立的塊,然后為每個塊分配內存空間,并將其存儲在連續(xù)的物理內存地址上,以便在執(zhí)行時能夠更好地利用緩存和預取機制,減少內存訪問延遲,提高程序的性能。

指令調度(Instruction scheduling)

指的是在編譯器優(yōu)化階段,重新安排程序中指令的順序,將需要等待某些操作完成的指令與其他指令分離開來,以優(yōu)化指令的執(zhí)行順序,從而減少CPU流水線上的空閑時間和內存訪問次數,以提高運行性能。

矢量化(Vectorization)

“矢量化”將順序循環(huán)轉換為 NEON 硬件矢量操作,無需編寫匯編代碼或使用內部函數。這增強了便攜性。僅當目標處理器具有 NEON 功能并啟用了自動矢量化時,才會對循環(huán)進行矢量化。

編譯優(yōu)化微調選項

對代碼體積和代碼性能的影響

以上編譯優(yōu)化微調選項會對生成的代碼體積和性能產生不同的影響,用戶可以根據下表進行按需配置。

bace6138-df81-11ed-bfe3-dac502259ad0.png

總結

了解各項編譯器優(yōu)化選項的定義和使用,用戶就可以按照項目需求,嵌入式應用特點,靈活的配置編譯器優(yōu)化,實現嵌入式軟件代碼性能和體積達到最佳平衡點。

IAR Embedded Workbench是一款業(yè)界領先的編譯工具鏈,除了提供卓越的性能之外,也提供了豐富靈活的編譯優(yōu)化選項配置,可以幫助用戶在不同的嵌入式軟件應用需求下,都能配比出最佳代碼性能和代碼體積。

審核編輯:湯梓紅

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

    關注

    5

    文章

    414

    瀏覽量

    38654
  • 函數
    +關注

    關注

    3

    文章

    4420

    瀏覽量

    67788
  • C++
    C++
    +關注

    關注

    22

    文章

    2124

    瀏覽量

    77333
  • 代碼
    +關注

    關注

    30

    文章

    4975

    瀏覽量

    74314
  • 編譯器
    +關注

    關注

    1

    文章

    1672

    瀏覽量

    51866

原文標題:深入淺出編譯優(yōu)化選項(下)

文章出處:【微信號:IAR愛亞系統(tǒng),微信公眾號:IAR愛亞系統(tǒng)】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    深入淺出AVR(傻孩子)

    本帖最后由 eehome 于 2013-1-5 09:56 編輯 深入淺出AVR(傻孩子)
    發(fā)表于 06-29 15:43

    深入淺出AVR

    深入淺出AVR,一本書。
    發(fā)表于 07-15 12:02

    深入淺出玩轉FPGA

    深入淺出玩轉FPGA
    發(fā)表于 07-21 09:21

    深入淺出ARM7

    深入淺出ARM7
    發(fā)表于 08-18 10:12

    HDMI技術深入淺出

    HDMI技術深入淺出
    發(fā)表于 08-19 10:52

    深入淺出Android

    深入淺出Android
    發(fā)表于 08-20 10:14

    深入淺出Android

    深入淺出Android
    發(fā)表于 04-26 10:48

    深入淺出安防視頻監(jiān)控系統(tǒng)

    深入淺出安防視頻監(jiān)控系統(tǒng)深入淺出安防視頻監(jiān)控系統(tǒng)
    發(fā)表于 05-22 19:28

    深入淺出AVR

    深入淺出AVR
    發(fā)表于 08-23 10:10

    網絡講壇:深入淺出TDMS文件格式()-labview視頻

    網絡講壇:深入淺出TDMS文件格式()-labview視頻教程
    發(fā)表于 03-26 16:43 ?105次下載

    深入淺出數據分析

    深入淺出數據分析,有需要的朋友下來看看。
    發(fā)表于 01-15 14:22 ?0次下載

    深入淺出談多層面板布線技巧

    深入淺出談多層面板布線技巧
    發(fā)表于 12-13 22:20 ?0次下載

    深入淺出Android—Android開發(fā)經典教材

    深入淺出Android—Android開發(fā)經典教材
    發(fā)表于 10-24 08:52 ?15次下載
    <b class='flag-5'>深入淺出</b>Android—Android開發(fā)經典教材

    深入淺出數字信號處理

    深入淺出數字信號處理
    發(fā)表于 12-07 20:14 ?795次閱讀

    深入淺出學習250個通信原理資源下載

    深入淺出學習250個通信原理資源下載
    發(fā)表于 04-12 09:16 ?30次下載
    宜春市| 阜宁县| 怀安县| 凌海市| 兖州市| 永和县| 古蔺县| 巴林右旗| 北川| 钟祥市| 威宁| 福安市| 裕民县| 闽清县| 米林县| 铁力市| 永寿县| 霍州市| 吉安市| 兴义市| 酉阳| 饶河县| 孝昌县| 六盘水市| 卢龙县| 镇江市| 江陵县| 米易县| 西安市| 疏勒县| 高邑县| 拜泉县| 明溪县| 临朐县| 田东县| 宁强县| 嘉义县| 哈巴河县| 兴隆县| 平泉县| 唐海县|