99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

SCEV如何對(duì)變量進(jìn)行分析優(yōu)化

openEuler ? 來(lái)源:openEuler ? 作者:openEuler ? 2022-07-07 11:16 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

0. 基礎(chǔ)知識(shí)盤(pán)點(diǎn)

0.1 循環(huán)(loop)

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

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

存在一條進(jìn)入循環(huán)頭的回邊;

相關(guān)術(shù)語(yǔ)

entering block:一個(gè)非loop內(nèi)的結(jié)點(diǎn)有一條邊連接到loop。當(dāng)只有一個(gè)entering block且其只有一條邊連接到header,稱之為preheader;作為非loop結(jié)點(diǎn)的peheader支配整個(gè)loop;

latch:有一條邊連接到header;

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

exiting edge:一條邊從loop內(nèi)到loop外,邊的出發(fā)結(jié)點(diǎn)稱之為exiting block,目標(biāo)結(jié)點(diǎn)稱之為exit block;

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

上面右圖中,黃色區(qū)域是一個(gè)loop,而紅色區(qū)域不是,為什么呢?
因?yàn)榧t色區(qū)域a和c都是入口結(jié)點(diǎn),不滿足單一入口結(jié)點(diǎn)的性質(zhì)。

0.2 Scalar Evolution(SCEV)

定義

SCEV是編譯器對(duì)變量進(jìn)行分析的優(yōu)化(往往只針對(duì)整數(shù)類型),且主要用于分析循環(huán)中變量是如何被更新的,然后根據(jù)這個(gè)信息來(lái)進(jìn)行優(yōu)化。

循環(huán)鏈

如圖所示,循環(huán)中歸納變量var的起始值為start,迭代的方式為?,步長(zhǎng)為step;

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

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

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

舉個(gè)例子:

intm=0;
for(inti=0;i

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

1. Induction Variable(歸納變量)

1.1 定義

循環(huán)的每次迭代中增加或減少固定量的變量,或者是另一個(gè)歸納變量的線性函數(shù)。

舉個(gè)例子[3],下面循環(huán)中的i和j都是歸納變量:

for(i=0;i

1.2 益處

歸納變量?jī)?yōu)化的好處,有但不局限于以下幾點(diǎn):

用更簡(jiǎn)單的指令替換原來(lái)的計(jì)算方式。
比如,上面的例子中識(shí)別到歸納變量,將對(duì)應(yīng)的乘法替換為代價(jià)更小的加法。

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

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

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

當(dāng)前的loop有兩個(gè)歸納變量:i、j,用其中一個(gè)變量表達(dá)另外一個(gè)后,如下:

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

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

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

轉(zhuǎn)換為:

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

2. 實(shí)踐

2.1 相關(guān)編譯選項(xiàng)

compiler option
gcc -fivopt
畢昇 -indvars

2.2 優(yōu)化用例

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

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

它的IR用例test.ll是:

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

編譯命令是:

opt test.ll -indvars -S

當(dāng)前的例子中,header、latch和exiting block都是同一個(gè)BB,即bb5。

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

步驟一:依據(jù) def-use 關(guān)系,遍歷loop的 ExitBlock 中phi結(jié)點(diǎn)的操作數(shù)的來(lái)源,計(jì)算出最終值同時(shí)替換它,繼而替換該phi結(jié)點(diǎn)的使用。
例子中,計(jì)算 %tmp2.lcssa ,其唯一的操作數(shù)是 %tmp2 = add nuw nsw i32 %i.01.0, 3 ,該表達(dá)式所在的loop是bb5,此時(shí) %tmp2 的循環(huán)鏈為

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

獲取當(dāng)前l(fā)oop的不退出循環(huán)的最大值是199999,那當(dāng)前 %tmp2=add(3, mul(3,199999))=600000;接下來(lái)會(huì)看當(dāng)前的替換不是高代價(jià)(代價(jià)的計(jì)算會(huì)依據(jù)不同架構(gòu)有所不同),同時(shí)在phi結(jié)點(diǎn)的 user 中替換該值。優(yōu)化結(jié)果如下:

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

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

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

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

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

步驟四:刪除 HeaderBlock 中的“死”phi結(jié)點(diǎn)。
例子中, %tmp4 和phi結(jié)點(diǎn) %x.03.0 構(gòu)成了一個(gè)不會(huì)有成果的循環(huán),就會(huì)刪除它們,同理刪除 %tmp2 和 %i.01.0 。優(yōu)化結(jié)果如下:

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

原文標(biāo)題:編譯器優(yōu)化那些事兒(4):歸納變量

文章出處:【微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

    關(guān)注

    31

    文章

    5434

    瀏覽量

    124467
  • 編譯器
    +關(guān)注

    關(guān)注

    1

    文章

    1662

    瀏覽量

    50216
  • CFG
    CFG
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    9998

原文標(biāo)題:編譯器優(yōu)化那些事兒(4):歸納變量

文章出處:【微信號(hào):openEulercommunity,微信公眾號(hào):openEuler】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    推進(jìn)電機(jī)端蓋結(jié)構(gòu)的抗沖擊分析優(yōu)化

    。同時(shí)以此為基礎(chǔ),在保證推進(jìn)電機(jī)的抗沖擊性能的約束前提條件下,以提高電機(jī)的轉(zhuǎn)矩密度為目標(biāo),建立了相應(yīng)的數(shù)學(xué)模型和參數(shù)化的有限元模型,對(duì)該結(jié)構(gòu)進(jìn)行了設(shè)計(jì)優(yōu)化,為實(shí)際工程設(shè)計(jì)了奠定基礎(chǔ)。 純分享帖,需要者可點(diǎn)
    發(fā)表于 06-23 07:12

    VirtualLab:光柵的優(yōu)化分析

    光柵是光學(xué)工程師使用的最基本的工具。為了設(shè)計(jì)和分析這類組件,快速物理光學(xué)建模和設(shè)計(jì)軟件VirtualLab Fusion為用戶提供了許多有用的工具。其中包括參數(shù)優(yōu)化,以輕松優(yōu)化系統(tǒng),以及參數(shù)運(yùn)行,它
    發(fā)表于 05-23 08:49

    VirtualLab 應(yīng)用:傾斜光柵的參數(shù)優(yōu)化及公差分析

    允許為目標(biāo)值定義參數(shù)約束和權(quán)重值。更多信息請(qǐng)參見(jiàn): 參數(shù)優(yōu)化文檔的介紹 第一級(jí)次的參數(shù)優(yōu)化 **結(jié)果——公差分析 **
    發(fā)表于 05-22 08:52

    VirtualLab Fusion應(yīng)用:使用optiSLang進(jìn)行光柵優(yōu)化

    1.摘要 當(dāng)代光學(xué)系統(tǒng)的優(yōu)化往往涉及大量參數(shù)。正如光柵的優(yōu)化設(shè)計(jì),不僅需要考慮光柵的幾何參數(shù),更需要分析所需的入射方向。這樣的需求導(dǎo)致優(yōu)化過(guò)程面臨大量參數(shù)的挑戰(zhàn)。在本實(shí)例中,Virtu
    發(fā)表于 03-18 08:51

    VirtualLab Fusion應(yīng)用:光柵的魯棒性分析優(yōu)化

    一個(gè)場(chǎng)景,在這個(gè)場(chǎng)景中,我們分析了二元光柵的偏振依賴性,并對(duì)結(jié)構(gòu)進(jìn)行優(yōu)化,使其在任意偏振角入射光下均能表現(xiàn)良好。 傾斜光柵的魯棒性優(yōu)化 這個(gè)用例演示了一個(gè)具有稍微變化的填充因子的傾
    發(fā)表于 02-19 08:54

    VirtualLab Fusion應(yīng)用:具有連續(xù)調(diào)制光柵區(qū)域的光波導(dǎo)優(yōu)化

    此用例的一部分) 足跡和光柵分析工具的應(yīng)用,包括生成滿足參數(shù)調(diào)制所有要求的光學(xué)設(shè)置 光柵參數(shù)所需調(diào)制的定義 選擇變量并定義評(píng)價(jià)函數(shù)以優(yōu)化調(diào)制光柵參數(shù)。 起點(diǎn)是一個(gè)現(xiàn)有的、可執(zhí)行的光波導(dǎo)系統(tǒng),其中已經(jīng)
    發(fā)表于 02-07 09:34

    FRED應(yīng)用:LED發(fā)光顏色優(yōu)化

    ” 色度值優(yōu)化函數(shù)定義 X和y色度坐標(biāo)優(yōu)化函數(shù)需要彩色圖像計(jì)算他們的值。輸入變量g_ana 是分析面“屏幕”的節(jié)點(diǎn)數(shù)。這里,只有中心像素點(diǎn)的值用于決定X和y的色度值,只在光束重疊區(qū)域
    發(fā)表于 01-17 09:39

    FRED應(yīng)用:LED發(fā)光顏色優(yōu)化

    ” 色度值優(yōu)化函數(shù)定義 X和y色度坐標(biāo)優(yōu)化函數(shù)需要彩色圖像計(jì)算他們的值。輸入變量g_ana 是分析面“屏幕”的節(jié)點(diǎn)數(shù)。這里,只有中心像素點(diǎn)的值用于決定X和y的色度值,只在光束重疊區(qū)域
    發(fā)表于 01-07 08:51

    具有連續(xù)調(diào)制光柵區(qū)域的光波導(dǎo)優(yōu)化

    程 基本光學(xué)光波導(dǎo)設(shè)置的配置(不屬于此用例的一部分) 足跡和光柵分析工具的應(yīng)用,包括生成滿足參數(shù)調(diào)制所有要求的光學(xué)設(shè)置 光柵參數(shù)所需調(diào)制的定義 選擇變量并定義評(píng)價(jià)函數(shù)以優(yōu)化調(diào)制光柵參數(shù)。 起點(diǎn)是一個(gè)現(xiàn)有
    發(fā)表于 12-16 08:56

    圖紙模板中的文本變量

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

    如何進(jìn)行有效的eda分析

    基礎(chǔ)。 一、數(shù)據(jù)收集和加載 獲取數(shù)據(jù)集 :從數(shù)據(jù)庫(kù)、文件、API等數(shù)據(jù)源獲取數(shù)據(jù)集。 了解數(shù)據(jù) :確保了解數(shù)據(jù)的來(lái)源、格式以及數(shù)據(jù)集中包含的變量。 加載數(shù)據(jù) :使用適當(dāng)?shù)臄?shù)據(jù)加載工具(如Pandas庫(kù))將數(shù)據(jù)加載到分析環(huán)境中。 二、數(shù)據(jù)初步觀察 查看數(shù)據(jù) :對(duì)數(shù)據(jù)集
    的頭像 發(fā)表于 11-13 10:48 ?985次閱讀

    使用Arthas火焰圖工具的Java應(yīng)用性能分析優(yōu)化經(jīng)驗(yàn)

    分享作者在使用Arthas火焰圖工具進(jìn)行Java應(yīng)用性能分析優(yōu)化的經(jīng)驗(yàn)。
    的頭像 發(fā)表于 10-28 09:27 ?1288次閱讀
    使用Arthas火焰圖工具的Java應(yīng)用性能<b class='flag-5'>分析</b>和<b class='flag-5'>優(yōu)化</b>經(jīng)驗(yàn)

    Linux環(huán)境變量配置方法

    過(guò)程并不復(fù)雜,但是一些細(xì)節(jié)沒(méi)有注意就可能導(dǎo)致配置的變量不生效。本文針對(duì)Linux環(huán)境變量主要場(chǎng)景進(jìn)行描述。
    的頭像 發(fā)表于 10-23 13:39 ?705次閱讀

    IP 地址大數(shù)據(jù)分析如何進(jìn)行網(wǎng)絡(luò)優(yōu)化?

    一、大數(shù)據(jù)分析在網(wǎng)絡(luò)優(yōu)化中的作用 1.流量分析 大數(shù)據(jù)分析可以對(duì)網(wǎng)絡(luò)中的流量進(jìn)行實(shí)時(shí)監(jiān)測(cè)和分析,
    的頭像 發(fā)表于 10-09 15:32 ?571次閱讀
    IP 地址大數(shù)據(jù)<b class='flag-5'>分析</b>如何<b class='flag-5'>進(jìn)行</b>網(wǎng)絡(luò)<b class='flag-5'>優(yōu)化</b>?

    通過(guò)工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)中間變量表達(dá)式的快速配置

    組態(tài)平臺(tái)的主要功能之一就是監(jiān)控下位機(jī)數(shù)據(jù)變量的變化,并通過(guò)綁定的控件進(jìn)行展示。比如,很多時(shí)候,組態(tài)上的圖形控件可能只綁定了一個(gè)溫度變量,那么超過(guò)80度就會(huì)自動(dòng)告警。但這個(gè)控件也有可能綁定多個(gè)
    的頭像 發(fā)表于 10-08 17:10 ?641次閱讀
    通過(guò)工業(yè)智能網(wǎng)關(guān)實(shí)現(xiàn)中間<b class='flag-5'>變量</b>表達(dá)式的快速配置