一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

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

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

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

多面體模型的基本概念

jf_pmFSk4VX ? 來(lái)源:GiantPandaCV ? 2023-04-03 11:19 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

多面體模型的基本概念

編譯器中的多面體模型(polyhedral model)是一種高效的程序優(yōu)化技術(shù),它將復(fù)雜的循環(huán)依賴關(guān)系映射到高維幾何空間,從而在編譯階段實(shí)現(xiàn)對(duì)計(jì)算任務(wù)的并行化和局部性優(yōu)化。

通過(guò)構(gòu)建和操作多面體表示能有效地調(diào)度指令和數(shù)據(jù)訪問(wèn),以減少資源爭(zhēng)用和緩存未命中德情況,從而提高程序執(zhí)行的性能。

本文將介紹多面體編譯技術(shù)的理論基礎(chǔ),并以發(fā)掘循環(huán)可并行部分為例子講解。

將循環(huán)表示為線性不等式

首先我們來(lái)看一個(gè)常規(guī)的循環(huán):

for(inti=1;ifor(intj=1;j

我們先不關(guān)注循環(huán)內(nèi)執(zhí)行什么語(yǔ)句,而是關(guān)注迭代空間 ij 以及迭代限制條件:

i>=1
i=1
j

轉(zhuǎn)換為等價(jià)形式:

i>=1
i<=?N?-?1
j>=1
j<=?N?-?1

再統(tǒng)一轉(zhuǎn)換為 >= 0 約束:

i-1>=0
-i+N-1>=0
j-1>=0
-j+N-1>=0

這樣就將循環(huán)迭代空間表示成了一組線性不等式,然后矩陣形式表達(dá)如下:

這一組線性不等式其實(shí)就定義了二維空間上的一個(gè)矩形:

acdb141c-d177-11ed-bfe3-dac502259ad0.png

我們?cè)賮?lái)看一個(gè)例子,

for(inti=1;ifor(intj=1;jif(i<=?N?-?j?+?1)
S[i][j]=....

這個(gè)循環(huán)相比上面的循環(huán)就是多了一個(gè)約束條件 i <= N - j + 1 也就是 j <= -i + N + 1,也就是在上面坐標(biāo)軸上再加一條線:

ace5a0bc-d177-11ed-bfe3-dac502259ad0.png

這樣就很清楚了,這些約束的交集對(duì)應(yīng)了二維空間上的一個(gè)多面體(polyhedron),同理可得如果是三層循環(huán)空間,那就是對(duì)應(yīng)了三維空間上的一個(gè)多面體,每個(gè)約束條件對(duì)應(yīng)一個(gè)二維平面,而在 n 維空間上就是一個(gè)超平面了。

數(shù)據(jù)依賴距離向量的定義

接著我們來(lái)介紹怎么分析循環(huán)中的數(shù)據(jù)依賴,多面體模型中的數(shù)據(jù)依賴描述了在循環(huán)結(jié)構(gòu)中,不同迭代之間因數(shù)據(jù)訪問(wèn)而產(chǎn)生的依賴關(guān)系。

而對(duì)于循環(huán)嵌套內(nèi)的依賴關(guān)系,可以用距離向量來(lái)描述相對(duì)執(zhí)行順序。

比如對(duì)于以下循環(huán):

for(inti=1;ifor(intj=1;j-1][j]+A[i][j-1];

在當(dāng)前次 (ij) 迭代中需要往 A[i][j] 中寫入數(shù)據(jù),然后需要讀取 A[i-1][j]A[i][j-1] 的內(nèi)容也就是循環(huán)維度 ij 的前一次迭代 i-1j-1 需要寫入的位置,所以這就引入了一個(gè)先寫然后再讀取的數(shù)據(jù)依賴。

然后我們定義距離向量如下,向量的值大小表示了在對(duì)應(yīng)循環(huán)維度上依賴的上一次迭代的距離:

  • A[i][j] -> A[i-1][j] 的距離向量為 [i - (i -1 ), j - j] = [1, 0]
  • A[i][j] -> A[i][j-1] 的距離向量為 [i - i, j - (j - 1)] = [0, 1]

矩陣形式表示:

能否簡(jiǎn)單從距離向量看出循環(huán)能否并行呢?

以下討論均假設(shè)循環(huán)都是正向且迭代步長(zhǎng)均為1,且迭代空間為常規(guī)的整數(shù),且不保證結(jié)論能推廣。

對(duì)于該循環(huán)

for(inti=1;ifor(intj=1;j-1][j]+A[i][j-1];

其距離向量為:

分析第一行可以看到i 循環(huán)維度的上,依賴了前一次迭代的計(jì)算值,所以可以知道在 i 循環(huán)上無(wú)法并行。

而分析第二行依賴,j 循環(huán)維度也依賴了前一次迭代的計(jì)算值,所以可以知道在 j 循環(huán)上也無(wú)法并行。

又比如對(duì)于循環(huán)

for(inti=1;ifor(intj=1;j0;

其距離向量為 [0]

循環(huán)維度 ij 對(duì)于前面的循環(huán)沒(méi)有任何依賴,所以能將兩個(gè)循環(huán)合并為一個(gè)然后并行運(yùn)行。

又比如對(duì)于循環(huán)

for(inti=1;ifor(intj=1;j-1];

其距離向量為 [0, 1]。循環(huán)維度 i 無(wú)依賴可以在該維度上并行,但是在 j 維度上有依賴無(wú)法并行。

又比如對(duì)于循環(huán)

for(inti=1;ifor(intj=1;j-1][j]+A[i-1][j-1];

其距離向量為:

兩個(gè)依賴的循環(huán)維度 i 都是大于0,所以在 i 維度無(wú)法循環(huán),但是在 j 維度卻可以并行。所以只要第一列都大于0,則不用分析第二維了,第二維是一定可以并行的。

有些循環(huán)的距離向量沒(méi)法直接看出來(lái),比如經(jīng)典的矩陣乘法:

for(inti=0;ifor(intj=0;jfor(intk=0;k

這里在循環(huán)維度 k 上有個(gè)隱式的依賴,當(dāng)前迭代(i', j', k')C[i'][j'] 計(jì)算依賴于上一次迭代 (i', j', k'-1) 計(jì)算得到的 C[i'][j'],所以距離向量為 [0, 0, k-(k'-1)=1],所以在k 維度上無(wú)法并行。

對(duì)循環(huán)做變換

多面體模型中對(duì)循環(huán)優(yōu)化是通過(guò)對(duì)循環(huán)迭代空間做仿射變換實(shí)現(xiàn)的,下面我們介紹三種簡(jiǎn)單的變換,交換和傾斜。

以二層循環(huán)為例:

for(inti=1;i<=?2;++i)
for(intj=1;j<=?3;++j)
S[i][j]=...

對(duì)應(yīng)的每一次迭代的執(zhí)行順序如下圖,圖中的圓型就對(duì)應(yīng)每一次的迭代,序號(hào)就是原始執(zhí)行順序:

acf96ea8-d177-11ed-bfe3-dac502259ad0.png

假設(shè)變換后的循環(huán)維度分別是 i'j'。

循環(huán)交換

對(duì)應(yīng)的變換矩陣如下:

變換過(guò)程如下:

對(duì)應(yīng)的循環(huán)就變?yōu)椋?/p>

for(intj=1;j<=?3;++j)
for(inti=1;i<=?2;++i)
S[i][j]=...

對(duì)應(yīng)的迭代執(zhí)行順序如下:ad05c93c-d177-11ed-bfe3-dac502259ad0.png

圖中圓型的序號(hào)為變換前的原始執(zhí)行順序。

第一個(gè)執(zhí)行的坐標(biāo)是 (i'=1, j'=1),對(duì)應(yīng)原始坐標(biāo)是 (i=1, j=1),對(duì)應(yīng)圓型 1。

第二個(gè)執(zhí)行的坐標(biāo)是 (i'=1, j'=2),對(duì)應(yīng)原始坐標(biāo)是 (i=2, j=1),對(duì)應(yīng)圓型 4

第三個(gè)執(zhí)行的坐標(biāo)是 (i'=2, j'=1),對(duì)應(yīng)原始坐標(biāo)是 (i=1, j=2),對(duì)應(yīng)圓型 2

其他以此類推

循環(huán)反轉(zhuǎn)

對(duì)應(yīng)的變換矩陣如下,假設(shè)就對(duì)循環(huán) i 做反轉(zhuǎn):

變換過(guò)程如下:

對(duì)應(yīng)的循環(huán)就變?yōu)椋?/p>

for(inti=-1;i>=-2;--i)
for(intj=1;j<=?3;++j)
S[i+3][j]=...

對(duì)應(yīng)的迭代執(zhí)行順序如下:

ad19e098-d177-11ed-bfe3-dac502259ad0.png

圖中圓型的序號(hào)為變換前的原始執(zhí)行順序。

第1個(gè)迭代 (i'=-1, j'=1) 對(duì)應(yīng)原始坐標(biāo) (i=2, j=1) ,對(duì)應(yīng)原始循環(huán)的圓型 4 。

第4個(gè)迭代 (i'=-2, j'=1) 對(duì)應(yīng)原始坐標(biāo) (i=1, j=1) ,對(duì)應(yīng)原始循環(huán)圓型 1 。

循環(huán)傾斜

對(duì)應(yīng)的變換矩陣如下:

變換過(guò)程如下:

對(duì)應(yīng)的循環(huán)就變?yōu)椋?/p>

for(intd=2;d<=?5;++d)
for(intj=max(1,d-2);j<=?min(3,d-1);++j)
inti=d-j;
S[i][j]=...

對(duì)應(yīng)的迭代執(zhí)行順序如下:

ad2d8a76-d177-11ed-bfe3-dac502259ad0.png

圖中圓型的序號(hào)為變換前的原始執(zhí)行順序。

第1個(gè)迭代 (d=2, j=1) 對(duì)應(yīng)原始坐標(biāo) (i=1, j=1) ,對(duì)應(yīng)原始循環(huán)的圓型 1 。

第2個(gè)迭代 (d=3, j=1) 對(duì)應(yīng)原始坐標(biāo) (i=2, j=1) ,對(duì)應(yīng)原始循環(huán)圓型 4 。

第3個(gè)迭代 (d=3, j=2) 對(duì)應(yīng)原始坐標(biāo) (i=1, j=2) ,對(duì)應(yīng)原始循環(huán)圓型 2

第4個(gè)迭代 (d=4, j=2) 對(duì)應(yīng)原始坐標(biāo) (i=2, j=2) ,對(duì)應(yīng)原始循環(huán)圓型 5 。

第5個(gè)迭代 (d=4, j=3) 對(duì)應(yīng)原始坐標(biāo) (i=1, j=3) ,對(duì)應(yīng)原始循環(huán)圓型 3 。

第6個(gè)迭代 (d=5, j=3) 對(duì)應(yīng)原始坐標(biāo) (i=2, j=3) ,對(duì)應(yīng)原始循環(huán)圓型 6 。

如何將串行執(zhí)行的循環(huán)轉(zhuǎn)換為可并行執(zhí)行

以下面的循環(huán)為例:

for(inti=1;i<=?N;?i++)?{
????for(intj=1;j<=?N;?j++)?{
????????A[i][j]?=?A[i-1][j]+A[i][j-1];
}
}

分析上其數(shù)據(jù)依賴分析可得其距離向量:

可知該循環(huán)在 ij 維度上都無(wú)法并行執(zhí)行。

接下來(lái)嘗試對(duì)循環(huán)空間 ij 做仿射變換,我們采用傾斜變換,其實(shí)這個(gè)是很經(jīng)典的一個(gè)并行方法了,稱之為對(duì)角線變換。

具體到多面體編譯技術(shù)的代碼的實(shí)現(xiàn),是怎么自動(dòng)找到這個(gè)變換的過(guò)程我還沒(méi)完全弄懂,所以假設(shè)我們現(xiàn)在知道了是直接應(yīng)用傾斜變換:

代碼變?yōu)椋?/p>

for(intd=2;d<=?2*N;++d){
for(intj=max(1,d-N);j<=?min(N,?d?-?1);++j){
inti=d-j;
A[i][j]=A[i-1][j]+A[i][j-1];
}
}

接著分析數(shù)據(jù)依賴矩陣,這時(shí)候 A[i][j]= A[d-j][j] 的計(jì)算都只依賴于循環(huán) d 前一次迭代的計(jì)算而循環(huán) j 維度上沒(méi)有數(shù)據(jù)依賴,所以依賴矩陣為:

從依賴矩陣可知,變換后的循環(huán)可以在 j 循環(huán)維度上做循環(huán)。

上面的文字解釋可能有些抽象我們畫圖來(lái)輔助解釋,假設(shè)循環(huán)上界 N=5,則原始的循環(huán)迭代空間如下圖所示:

ad3fc11e-d177-11ed-bfe3-dac502259ad0.png

黑色實(shí)線箭頭表示每個(gè)計(jì)算 A[i][j] 的計(jì)算順序。

數(shù)據(jù)依賴關(guān)系如下:

ad550196-d177-11ed-bfe3-dac502259ad0.png

紅色箭頭表示數(shù)據(jù)依賴。

則經(jīng)過(guò)傾斜變換后的循環(huán)迭代空間如下:

for(intd=2;d<=?2*5;++d){
for(intj=max(1,d-5);j<=?min(5,d-1);++j){
inti=d-j;
A[i][j]=A[i-1][j]+A[i][j-1];
}
}
ad714e64-d177-11ed-bfe3-dac502259ad0.png

其實(shí)就是對(duì)應(yīng)于原始空間上,按照對(duì)角線的順序去遍歷。

數(shù)據(jù)依賴如下:

ad8a3b4a-d177-11ed-bfe3-dac502259ad0.png

從數(shù)據(jù)依賴上看,可以看到變換后在 j 維度上沒(méi)有數(shù)據(jù)依賴所以可以并行執(zhí)行。

最后在 j 維度上加上 omp 并行:

for(intd=2;d<=?2*5;++d){
#pragmaompfor
for(intj=max(1,d-5);j<=?min(5,d-1);++j){
inti=d-j;
A[i][j]=A[i-1][j]+A[i][j-1];
}
}

后記

這篇文章中對(duì)于多面體模型有并不少是個(gè)人理解,不一定準(zhǔn)確。多面體編譯技術(shù)個(gè)人感覺(jué)很復(fù)雜,在閱讀相關(guān)文獻(xiàn)和書籍的時(shí)候,還需要去搜過(guò)相關(guān)前置知識(shí)才能看懂大概。

而這篇學(xué)習(xí)筆記也僅僅是介紹了一些基本的入門概念,多面體編譯技術(shù)能做的事情并不僅僅局限于本文所介紹的循環(huán)變換發(fā)掘可并行部分,感興趣的讀者可以閱讀參考資料。

審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)注

    0

    文章

    204

    瀏覽量

    25639
  • 模型
    +關(guān)注

    關(guān)注

    1

    文章

    3519

    瀏覽量

    50411
  • 編譯
    +關(guān)注

    關(guān)注

    0

    文章

    679

    瀏覽量

    33980

原文標(biāo)題:參考資料

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

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

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

    Proteus涉及的基本概念

    Proteus涉及的基本概念
    發(fā)表于 08-01 20:58

    電子元件基本概念和原理

    電子元件基本概念和原理
    發(fā)表于 08-05 21:25

    Fpga Cpld的基本概念

    Fpga Cpld的基本概念
    發(fā)表于 08-20 17:14

    C語(yǔ)言基本概念

    C語(yǔ)言基本概念
    發(fā)表于 08-01 02:00

    數(shù)據(jù)結(jié)構(gòu)的基本概念是什么

    數(shù)據(jù)結(jié)構(gòu)之基本概念
    發(fā)表于 05-27 08:29

    阻抗控制相關(guān)的基本概念

    阻抗控制部分包括兩部分內(nèi)容:基本概念及阻抗匹配。本篇主要介紹阻抗控制相關(guān)的一些基本概念。
    發(fā)表于 02-25 08:11

    智能天線的基本概念

    1智能天線的基本概念 智能天線綜合了自適應(yīng)天線和陣列天線的優(yōu)點(diǎn),以自適應(yīng)信號(hào)處理算法為基礎(chǔ),并引入了人工智能的處理方法。智能天線不再是一個(gè)簡(jiǎn)單的單元,它已成為一個(gè)具有智能的系統(tǒng)。其具體定義為:智能
    發(fā)表于 08-05 08:30

    人工智能基本概念機(jī)器學(xué)習(xí)算法

    目錄人工智能基本概念機(jī)器學(xué)習(xí)算法1. 決策樹2. KNN3. KMEANS4. SVM5. 線性回歸深度學(xué)習(xí)算法1. BP2. GANs3. CNN4. LSTM應(yīng)用人工智能基本概念數(shù)據(jù)集:訓(xùn)練集
    發(fā)表于 09-06 08:21

    CODESYS的基本概念有哪些

    CODESYS是什么?CODESYS的基本概念有哪些?CODESYS有哪些功能?
    發(fā)表于 09-18 06:52

    無(wú)刷電機(jī)的基本概念和參數(shù)介紹及無(wú)刷電機(jī)在模型上的應(yīng)用資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是無(wú)刷電機(jī)的基本概念和參數(shù)介紹及無(wú)刷電機(jī)在模型上的應(yīng)用資料免費(fèi)下載  主要內(nèi)容包括了一、無(wú)刷電機(jī)的基本概念1、基本概念2、
    發(fā)表于 09-21 08:00 ?110次下載
    無(wú)刷電機(jī)的<b class='flag-5'>基本概念</b>和參數(shù)介紹及無(wú)刷電機(jī)在<b class='flag-5'>模型</b>上的應(yīng)用資料免費(fèi)下載

    計(jì)算機(jī)網(wǎng)絡(luò)的基本概念和網(wǎng)絡(luò)互連模型OSI資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是計(jì)算機(jī)網(wǎng)絡(luò)的基本概念和網(wǎng)絡(luò)互連模型OSI資料免費(fèi)下載。
    發(fā)表于 10-11 08:00 ?0次下載
    計(jì)算機(jī)網(wǎng)絡(luò)的<b class='flag-5'>基本概念</b>和網(wǎng)絡(luò)互連<b class='flag-5'>模型</b>OSI資料免費(fèi)下載

    通信原理的基本概念講解

    通信原理的基本概念講解。
    發(fā)表于 05-27 14:48 ?17次下載

    多面體模型中循環(huán)分塊算法的設(shè)計(jì)方案

    多面體模型中循環(huán)分塊算法的設(shè)計(jì)方案
    發(fā)表于 06-24 14:58 ?10次下載

    放大器的基本概念

      首先回顧一下基本概念,然后介紹四種類型的放大器:共源結(jié)構(gòu)、共柵結(jié)構(gòu)、源跟隨器和共源共柵結(jié)構(gòu),對(duì)于每一種模型,我們先從其簡(jiǎn)化模型入手,然后逐漸考慮溝道長(zhǎng)度調(diào)制效應(yīng)和效應(yīng)之類的二級(jí)效
    的頭像 發(fā)表于 04-26 11:14 ?2013次閱讀
    放大器的<b class='flag-5'>基本概念</b>

    基本概念.zip

    基本概念
    發(fā)表于 12-30 09:21 ?2次下載