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

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

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

3天內不再提示

SCEV如何對變量進行分析優化

openEuler ? 來源:openEuler ? 作者:openEuler ? 2022-07-07 11:16 ? 次閱讀

0. 基礎知識盤點

0.1 循環(loop)

定義
loop(llvm里理解為natural loop)是定義在CFG中的一個結點集合L,并具有以下屬性[1][2]:

有單一的入口結點(稱為header),該結點支配loop中的所有結點;

存在一條進入循環頭的回邊;

相關術語

entering block:一個非loop內的結點有一條邊連接到loop。當只有一個entering block且其只有一條邊連接到header,稱之為preheader;作為非loop結點的peheader支配整個loop;

latch:有一條邊連接到header;

backedge:稱為回邊,一條從latch到header的邊;

exiting edge:一條邊從loop內到loop外,邊的出發結點稱之為exiting block,目標結點稱之為exit block;

10e78e90-fd25-11ec-ba43-dac502259ad0.jpg

上面右圖中,黃色區域是一個loop,而紅色區域不是,為什么呢?
因為紅色區域a和c都是入口結點,不滿足單一入口結點的性質。

0.2 Scalar Evolution(SCEV)

定義

SCEV是編譯器對變量進行分析的優化(往往只針對整數類型),且主要用于分析循環中變量是如何被更新的,然后根據這個信息來進行優化。

循環鏈

如圖所示,循環中歸納變量var的起始值為start,迭代的方式為?,步長為step;

10f6beec-fd25-11ec-ba43-dac502259ad0.jpg

它的循環鏈(chrec,Chains of Recurrences)如下:

var = {start, ? , step}
// ?∈{+,?}
// start: starting value
// step: step in each iteration

舉個例子:

intm=0;
for(inti=0;i

那么m的循環鏈為:m = {0,+,n}。

1. Induction Variable(歸納變量)

1.1 定義

循環的每次迭代中增加或減少固定量的變量,或者是另一個歸納變量的線性函數。

舉個例子[3],下面循環中的i和j都是歸納變量:

for(i=0;i

1.2 益處

歸納變量優化的好處,有但不局限于以下幾點:

用更簡單的指令替換原來的計算方式。
比如,上面的例子中識別到歸納變量,將對應的乘法替換為代價更小的加法。

j=-17;
for(i=0;i

減少歸納變量的數目,降低寄存器壓力。

externintsum;
intfoo(intn){
inti,j;
j=5;
for(i=0;i

當前的loop有兩個歸納變量:i、j,用其中一個變量表達另外一個后,如下:

externintsum;
intfoo(intn){
inti;
for(i=0;i

歸納變量替換,使變量和循環索引之間的關系變得明確,便于其他優化分析(如依賴性分析)。舉例如下,將c表示為循環索引相關的函數:

intc,i;
c=10;
for(i=0;i

轉換為:

intc,i;
c=10;
for(i=0;i

2. 實踐

2.1 相關編譯選項

compiler option
gcc -fivopt
畢昇 -indvars

2.2 優化用例

歸納變量的優化(ivs)在llvm中的位置是:llvmlibTransformsScalarIndVarSimplify.cpp
讓我們通過一個用例,看看畢昇編譯器的優化過程。
如下圖,假設上面func里面的部分就是要優化的代碼,下面func里面就是預期生成的結果:

11136ae2-fd25-11ec-ba43-dac502259ad0.jpg

它的IR用例test.ll是:

11261e44-fd25-11ec-ba43-dac502259ad0.jpg

編譯命令是:

opt test.ll -indvars -S

當前的例子中,header、latch和exiting block都是同一個BB,即bb5。

11418b5c-fd25-11ec-ba43-dac502259ad0.jpg

步驟一:依據 def-use 關系,遍歷loop的 ExitBlock 中phi結點的操作數的來源,計算出最終值同時替換它,繼而替換該phi結點的使用。
例子中,計算 %tmp2.lcssa ,其唯一的操作數是 %tmp2 = add nuw nsw i32 %i.01.0, 3 ,該表達式所在的loop是bb5,此時 %tmp2 的循環鏈為

%tmp2={3,+,3}<%bb5>

獲取當前loop的不退出循環的最大值是199999,那當前 %tmp2=add(3, mul(3,199999))=600000;接下來會看當前的替換不是高代價(代價的計算會依據不同架構有所不同),同時在phi結點的 user 中替換該值。優化結果如下:

1154e684-fd25-11ec-ba43-dac502259ad0.jpg

步驟二:遍歷 ExitingBlock ,對其跳轉條件進行計算,依據 def-use 的關系,刪除相應的指令。
例子中,計算出 br i1 %0, label %bb5, label %bb7 的 %0 是 false,跳轉指令替換后,%0 = icmp ult i32 %tmp4,200000 不存在 user,將其加入到“死指令”中。優化結果如下:

11690db2-fd25-11ec-ba43-dac502259ad0.jpg

步驟三:刪除所有“死指令”,并看看他的操作數是否要一并刪除。
例子中,作為 %0 的操作數的 %tmp4 還有其他的 user %x.03.0,因此不能被視為“死指令”被刪除。優化結果如下:

118b3f04-fd25-11ec-ba43-dac502259ad0.jpg

步驟四:刪除 HeaderBlock 中的“死”phi結點。
例子中, %tmp4 和phi結點 %x.03.0 構成了一個不會有成果的循環,就會刪除它們,同理刪除 %tmp2 和 %i.01.0 。優化結果如下:

11c0930c-fd25-11ec-ba43-dac502259ad0.jpg

原文標題:編譯器優化那些事兒(4):歸納變量

文章出處:【微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。

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

    關注

    31

    文章

    5357

    瀏覽量

    120637
  • 編譯器
    +關注

    關注

    1

    文章

    1636

    瀏覽量

    49172
  • CFG
    CFG
    +關注

    關注

    0

    文章

    10

    瀏覽量

    9825

原文標題:編譯器優化那些事兒(4):歸納變量

文章出處:【微信號:openEulercommunity,微信公眾號:openEuler】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FRED應用:LED發光顏色優化

    ” 色度值優化函數定義 X和y色度坐標優化函數需要彩色圖像計算他們的值。輸入變量g_ana 是分析面“屏幕”的節點數。這里,只有中心像素點的值用于決定X和y的色度值,只在光束重疊區域
    發表于 01-07 08:51

    具有連續調制光柵區域的光波導優化

    程 基本光學光波導設置的配置(不屬于此用例的一部分) 足跡和光柵分析工具的應用,包括生成滿足參數調制所有要求的光學設置 光柵參數所需調制的定義 選擇變量并定義評價函數以優化調制光柵參數。 起點是一個現有
    發表于 12-16 08:56

    圖紙模板中的文本變量

    進行定義。無論是系統內置的變量,還是用戶自定義的變量,都以這種方式表述。 系統內置文本變量 以下表格展示系統內置的文本變量,無需定義,可以直
    的頭像 發表于 11-13 18:21 ?190次閱讀
    圖紙模板中的文本<b class='flag-5'>變量</b>

    如何進行有效的eda分析

    基礎。 一、數據收集和加載 獲取數據集 :從數據庫、文件、API等數據源獲取數據集。 了解數據 :確保了解數據的來源、格式以及數據集中包含的變量。 加載數據 :使用適當的數據加載工具(如Pandas庫)將數據加載到分析環境中。 二、數據初步觀察 查看數據 :對數據集
    的頭像 發表于 11-13 10:48 ?314次閱讀

    使用Arthas火焰圖工具的Java應用性能分析優化經驗

    分享作者在使用Arthas火焰圖工具進行Java應用性能分析優化的經驗。
    的頭像 發表于 10-28 09:27 ?300次閱讀
    使用Arthas火焰圖工具的Java應用性能<b class='flag-5'>分析</b>和<b class='flag-5'>優化</b>經驗

    Linux環境變量配置方法

    過程并不復雜,但是一些細節沒有注意就可能導致配置的變量不生效。本文針對Linux環境變量主要場景進行描述。
    的頭像 發表于 10-23 13:39 ?186次閱讀

    IP 地址大數據分析如何進行網絡優化?

    一、大數據分析在網絡優化中的作用 1.流量分析 大數據分析可以對網絡中的流量進行實時監測和分析,
    的頭像 發表于 10-09 15:32 ?255次閱讀
    IP 地址大數據<b class='flag-5'>分析</b>如何<b class='flag-5'>進行</b>網絡<b class='flag-5'>優化</b>?

    OpenHarmony之開機優化

    PNG或PDF)的圖形報表,以便用戶進行深入分析。 功能與用途 分析系統啟動時間和啟動過程中資源的使用情況。 發現可能影響系統啟動速度的因素,如某些進程啟動緩慢或占用過多資源等。 對系統進行
    發表于 07-01 16:39

    3PCS01G輸入電流波形在頂部和底部有變量的情況,請問COMP腳本如何進行優化?

    3PCS01G 現在輸入電流波形在頂部和底部有變量的情況,請問COMP腳本如何進行優化。 現在情況是這樣,就是PFC母線的輸出是 390V 2000W。 由于我們輸出的是 35-68V,再加上效率
    發表于 05-20 07:19

    請問stm32程序中如何優化大量的編譯開關和全局變量?

    剛接手一個程序,發現里面存在大量的編譯開關和定義了大量的全局變量,感覺這些顯得很是臃腫,有什么方法可以優化一下這些編譯開關和全局變量? 全局變量是一個個的標志位,有時候還會有條件嵌套。
    發表于 05-06 06:35

    C語言變量應用詳解

    變量其實只不過是程序可操作的存儲區的名稱。C 中每個變量都有特定的類型,類型決定了變量存儲的大小和布局,該范圍內的值都可以存儲在內存中,運算符可應用于變量上。
    發表于 03-18 11:18 ?430次閱讀
    C語言<b class='flag-5'>變量</b>應用詳解

    變量位置不同會死機?郭天祥老師視頻的遺留問題分析答案

    在郭天祥老師視頻里有一個問題分享,是EXMC初始化里的一個變量定義和初始化位置不同會導致程序死機,最終定位到程序是進入hardfault死機,但暫時沒有后續分析了,這里我們來繼續分析一下。
    的頭像 發表于 02-26 09:12 ?373次閱讀
    <b class='flag-5'>變量</b>位置不同會死機?郭天祥老師視頻的遺留問題<b class='flag-5'>分析</b>答案

    請問如何防止tasking將const變量合并?

    編譯中發現tasking將const變量值相同的變量合并了,先去掉一些優化選項還是不起作用,只能改變const變量的值,是不是有什么編譯選項可以去掉這個
    發表于 02-02 08:07

    請問GTM的MCS和主CPU如何進行變量傳遞?

    請問GTM的MCS和主CPU如何進行變量傳遞?謝謝!
    發表于 01-23 07:44

    自動控制系統中的操縱變量指什么

    自動控制系統中的操縱變量指的是在系統中由控制器控制的可調節參數,用于調節或改變被控對象的輸出或狀態。操縱變量是自動控制中非常重要的概念,它是控制系統實現自動調節和優化的核心要素之一。本文將詳細介紹
    的頭像 發表于 01-15 11:29 ?5399次閱讀
    主站蜘蛛池模板: 亚洲AV國產国产久青草| 福利一区福利二区| 精品午夜寂寞影院在线观看| 再插深点嗯好大好爽| 欧美末成年videos丨| 高清 国产 在线 亚洲| 亚洲国产成人久久精品影视 | 日本xxxxxx片免费播放18| 国产99久久久国产精品成人| 亚洲人女同志video| 暖暖视频 免费 高清 日本8| 国产精品成人免费观看| 正在播放久久| 涩涩网站在线看| 久久免费看少妇级毛片蜜臀| 把腿张开再深点好爽宝贝| 亚洲精品无码葡京AV天堂| 柠檬福利精品视频导航| 果冻传媒在线观看完整版免费| 99国产精品久久| 学生无码AV一区二区三区| 美女被艹网站| 国产精品久久久久久亚洲影视| 再插深点嗯好大好爽| 深夜草逼逼| 免费高清毛片| 狠狠色狠狠色综合| 苍井空a 集在线观看网站| 一边喂奶一边做边爱| 天天久久影视色香综合网| 免费三级黄色| 久久操韩国自偷拍| 国产精品亚洲AV毛片一区二区三区| 4hu四虎免费影院www| 亚洲精品国产国语| 色多多污版app下载网站| 免费观看a视频| 精品亚洲一区二区三区在线播放| 国产成人精品电影| wwww69| 365电影成人亚洲网在线观看|