chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

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

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

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

多面體模型的基本概念

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

掃碼添加小助手

加入工程師交流群

多面體模型的基本概念

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

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

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

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

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

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

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

i>=1
i=1
j

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

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)迭代空間表示成了一組線性不等式,然后矩陣形式表達如下:

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

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

我們再來看一個例子,

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

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

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

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

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

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

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

比如對于以下循環(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 需要寫入的位置,所以這就引入了一個先寫然后再讀取的數(shù)據(jù)依賴。

然后我們定義距離向量如下,向量的值大小表示了在對應(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]

矩陣形式表示:

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

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

對于該循環(huán)

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

其距離向量為:

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

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

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

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

其距離向量為 [0]。

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

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

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

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

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

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

其距離向量為:

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

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

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

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

對循環(huán)做變換

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

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

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

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

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

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

循環(huán)交換

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

變換過程如下:

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

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

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

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

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

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

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

其他以此類推

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

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

變換過程如下:

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

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

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

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

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

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

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

循環(huán)傾斜

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

變換過程如下:

對應(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]=...

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

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

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

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

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

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

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

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

第6個迭代 (d=5, j=3) 對應(yīng)原始坐標(biāo) (i=2, j=3) ,對應(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 維度上都無法并行執(zhí)行。

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

具體到多面體編譯技術(shù)的代碼的實現(xiàn),是怎么自動找到這個變換的過程我還沒完全弄懂,所以假設(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ù)依賴矩陣,這時候 A[i][j]= A[d-j][j] 的計算都只依賴于循環(huán) d 前一次迭代的計算而循環(huán) j 維度上沒有數(shù)據(jù)依賴,所以依賴矩陣為:

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

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

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

黑色實線箭頭表示每個計算 A[i][j] 的計算順序。

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

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

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

則經(jīng)過傾斜變換后的循環(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

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

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

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

從數(shù)據(jù)依賴上看,可以看到變換后在 j 維度上沒有數(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];
}
}

后記

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

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

審核編輯 :李倩


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

    關(guān)注

    0

    文章

    217

    瀏覽量

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

    關(guān)注

    1

    文章

    3609

    瀏覽量

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

    關(guān)注

    0

    文章

    682

    瀏覽量

    34767

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

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

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

掃碼添加小助手

加入工程師交流群

    評論

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

    Proteus涉及的基本概念

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

    電子元件基本概念和原理

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

    Fpga Cpld的基本概念

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

    C語言基本概念

    C語言基本概念
    發(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)點,以自適應(yīng)信號處理算法為基礎(chǔ),并引入了人工智能的處理方法。智能天線不再是一個簡單的單元,它已成為一個具有智能的系統(tǒng)。其具體定義為:智能
    發(fā)表于 08-05 08:30

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

    目錄人工智能基本概念機器學(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

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

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

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

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

    通信原理的基本概念講解

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

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

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

    放大器的基本概念

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

    基本概念.zip

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