在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

Poly基本原理及卷積分析示例

冬至子 ? 來源:StarryHeavensAbove ? 作者:要術甲杰 ? 2023-07-17 14:19 ? 次閱讀

**Poly基本原理介紹 **

考慮到許多讀者可能對Poly并不了解,而且許多Poly文獻讀起來也比較抽象,我們先簡單介紹一下Poly的工作原理。我們力圖用最簡單的代數(shù)與幾何描述來解釋Poly的基本原理。這部分內容參考了文獻[12]的圖片,我們通過解讀這些圖片來解釋其中原理。

首先,我們假設有如圖1所示的一段簡單的循環(huán)嵌套,其中N為常數(shù)。循環(huán)嵌套內語句通過對A[i-1][j]和A[i][j-1]存儲數(shù)據的引用來更新A[i][j]位置上的數(shù)據。如果我們把語句在循環(huán)內的每一次迭代實例抽象成空間上的一個點,那么我們可以構造一個以(i,j)為基的二維空間,如圖2所示。圖中每個黑色的點表示寫入A[i][j]的一次語句的迭代實例,從而我們可以構造出一個所有黑色的點構成的一個矩形,這個矩形就可以看作是二維空間上的一個Polyhedron(多面體),這個空間稱為該計算的迭代空間。

圖片

圖1 一段簡單的代碼示例

圖片

圖2 圖1示例代碼的迭代空間

我們可以用代數(shù)中的集合來對這個二維空間上的Polyhedron進行表示,即{[i, j] : 1 <= i <= N - 1 and 1 <= j <= N – 1},其中[i, j]是一個二元組,“:”后面的不等式表示這個集合的區(qū)間。我們可以給這個二元組做一個命名,叫做S,表示一個語句,那么這個語句的Polyhedron就可以表示成{S[i, j] : 1 <= i <= N - 1 and 1 <= j <= N – 1}。

由于語句S是先迭代i循環(huán)再迭代j循環(huán),因此我們可以給語句S定義一個調度(順序),這個調度用映射表示,即{ S[i, j] -> [i, j] },表示語句S[i, j] 先按i的順序迭代再按照j的順序迭代。

接下來,我們來分析語句和它訪存的數(shù)組之間的關系,在代數(shù)中我們用映射來表示關系。圖1中語句S對數(shù)組A進行讀和寫,那么我們可以用Poly來計算出S和A之間的讀訪存關系,可以表示成{ S[i, j] -> A[i - 1, j] : 1 <= i <= N -1 and 1 <= j <= N- 1; S[i, j] -> A[i, j - 1] : 1 <= i <= N - 1 and 1 <= j <= N -1 } 。同樣地,寫訪存關系可以表示成{ S[i, j] -> A[i, j] : 1 <= i <= N - 1 and 1 <= j <= N -1 }。

基于這個讀寫訪存關系,Poly就可以計算出這個循環(huán)嵌套內的依賴關系,這個依賴關系可以表示成另外一種映射關系,即{ S[i, j] -> S[i, 1 + j] : 1 <= i <= N - 1 and 1 <= j <=N - 2; S[i, j] -> S[i + 1, j] : 1 <= i <= N - 2 and 1 <= j <= N- 1 }。

可以注意到,Poly對程序的表示都是用集合和映射來完成的。當我們把語句實例之間的依賴關系用藍色箭頭表示在迭代空間內時,就可以得到如圖3所示的形式。根據依賴的基本定理[13],沒有依賴關系的語句實例之間是可以并行執(zhí)行的,而圖中綠色帶內(對角線上)的所有點之間沒有依賴關系,所以這些點之間可以并行執(zhí)行。但是我們發(fā)現(xiàn)這個二維空間的基是(i, j),即對應i和j兩層循環(huán),無法標記可以并行的循環(huán),因為這個綠色帶與任何一根軸都不平行。所以Poly利用仿射變換把基(i, j)進行變換,使綠色帶能與空間基的某根軸能夠平行,這樣軸對應的循環(huán)就能并行,所以我們可以將圖3所示的空間轉化成如圖4所示的形式。

此時,語句S的調度就可以表示成{ S[i, j] -> [i + j, j]}的形式。所以Poly的變換過程也稱為調度變換過程,而調度變換的過程就是變基過程、實現(xiàn)循環(huán)變換的過程。

圖片

圖3 帶依賴關系的迭代空間

圖片

圖4 變基之后的迭代空間

圖4中綠色帶和j軸平行,這樣在代碼中表示起來就方便了。我們說Poly做循環(huán)變換的過程就是將基(i, j)變成(i + j, j)的一個過程,也就是說,Poly的底層原理就是求解一個系數(shù)矩陣,這個系數(shù)矩陣能夠將向量(i, j)轉換成向量(i + j, j)。

根據這樣的調度,Poly就可以利用它的代碼生成器,生成如圖5所示的代碼。此時,內層循環(huán)就可以并行了。(注:這里示意的是“源到源”翻譯的Poly編譯器,也就是Poly生成的代碼還需要交給基礎編譯器如GCC、ICC、LLVM等編譯成機器碼才能運行。也有內嵌在基礎編譯中的Poly工具。)

圖片

圖5 Poly變換后生成的代碼

當然,我們這里舉的例子是一個很簡單的例子,在實際應用中還有很多復雜的情況要考慮。Poly幾乎考慮了所有的循環(huán)變換,包括Interchange(交換)、Skewing/Shifting(傾斜/偏移)、Reversal(反轉)、Tiling/Blocking(分塊)、Stripe-mining、Fusion(合并)、Fission/Distribution(分布)、Peeling(剝離)、Unrolling(展開)、Unswitching、Index-set splitting、Coalescing/Linearization等,圖6~8[14]中給出了幾種Poly中實現(xiàn)的循環(huán)變換示意圖,右上角的代碼表示原輸入循環(huán)嵌套,右下角的代碼表示經過Poly變換后生成的代碼。圖中左邊的集合和映射關系的含義分別為:J代表原程序語句的迭代空間,S表示輸入程序時的調度,T表示目標調度,ST就是Poly要計算的調度變換。

圖片

圖6 Poly中skewing變換示意圖

圖片

圖7 Poly中Fusion變換示意圖

圖片

圖8 Poly中Tiling變換示意圖

深度學習應用的Poly優(yōu)化

讓我們以圖9中所示的二維卷積運算(矩陣乘法)為例來簡單介紹Poly是如何優(yōu)化深度學習應用的。

圖片

圖9 一個2D卷積示例

Poly會將循環(huán)嵌套內的計算抽象成一個語句。例如圖9中S1語句表示卷積初始化,S2代表卷積歸約;而S0和S3則分別可以看作卷積操作前后的一些操作,比如S0可以想象成是量化語句,而S3可以看作是卷積后的relu操作等。

為了便于理解,我們以CPU上的OpenMP程序為目標對圖9中的示例進行變換。Poly在對這樣的二維卷積運算進行變換的時候,會充分考慮程序的并行性和局部性。如果我們對變換后的程序并行性的要求大于局部性的要求,那么Poly會自動生成如圖10所示的OpenMP代碼;如果我們對局部性的要求高于并行性,那么Poly會自動生成如圖11所示的OpenMP代碼。(注:不同的Poly編譯器生成的代碼可能會因采用的調度算法、編譯選項、代碼生成方式等因素而不同。)

圖片

圖10 Poly生成的OpenMP代碼——并行性大于局部性

圖片

圖11 Poly生成的OpenMP代碼——局部性大于并行性

通過對比圖10和圖11,兩種生成的代碼采用的循環(huán)fusion(合并)策略不同:圖10中所示的代碼采用了({S0}, {S1, S2, S3})的合并策略,圖11中生成的代碼則使用了({S0,S1, S2, S3})的合并策略,但是必須通過對S2向右偏移99次、S3向右偏移148次,以及循環(huán)層次的interchange(交換)來實現(xiàn)這樣的合并。顯然,圖11所示的代碼局部性更好。而并行性上,仔細研究后不難發(fā)現(xiàn),圖11生成的代碼中,只有最外層c0循環(huán)是可以并行的,而圖10代碼中,S0語句的c0、c1循環(huán)都可以并行,并且包含S1、S2、 S3三條語句的循環(huán)嵌套的c0、c1循環(huán)也都可以并行,相對于圖11代碼,圖10生成的代碼可并行循環(huán)的維度更多。

當然,在面向CPU生成OpenMP代碼時,多維并行的優(yōu)勢沒有那么明顯,但是當目標架構包含多層并行硬件抽象時,圖9中的代碼能夠更好地利用底層加速芯片。例如,當面向GPU生成CUDA代碼時,而圖10對應的CUDA代碼(如圖12所示)由于合并成了兩個部分,會生成2個kernel,但是每個kernel內c0維度的循環(huán)被映射到GPU的線程塊上,而c1維度的循環(huán)被映射到GPU的線程上;圖11對應的CUDA代碼(如圖13所示)只有1個kernel,但是只有c0維度的循環(huán)被映射到GPU的線程塊和線程兩級并行抽象上。為了便于閱讀,我們并未開啟GPU上shared memory和private memory自動生成功能。從圖中也不難發(fā)現(xiàn),Poly也可以自動生成線程之間的同步語句。(注:圖中循環(huán)分塊大小為32,圖12中線程塊上線程布局為3216,圖13中為324*4。)

圖片

圖12 Poly生成的CUDA代碼——并行性大于局部性

圖片

圖片

圖13 Poly生成的CUDA代碼——局部性大于并行性

值得注意的是,為了充分挖掘程序的并行性和局部性,Poly會自動計算出一些循環(huán)變換來實現(xiàn)有利于并行性和局部性的變換。例如,為了能夠達到圖11和圖13中所有語句的合并,Poly會自動對S2和S3進行shifting(偏移)和interchange(交換)。

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

    關注

    38

    文章

    7619

    瀏覽量

    166097
  • 生成器
    +關注

    關注

    7

    文章

    322

    瀏覽量

    21596
  • CUDA
    +關注

    關注

    0

    文章

    122

    瀏覽量

    14024
  • OpenMP
    +關注

    關注

    0

    文章

    12

    瀏覽量

    5761
  • 卷積網絡
    +關注

    關注

    0

    文章

    43

    瀏覽量

    2424
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    晶振的基本原理及特性

    本帖最后由 hyingsky 于 2011-4-20 22:54 編輯 包含晶振的基本原理及特性:晶振基本電路、常見指標、分類,及簡單示例
    發(fā)表于 04-20 22:45

    圖解卷積積分

    本帖最后由 藍劍威 于 2017-5-29 14:31 編輯 圖解卷積積分圖解卷積積分
    發(fā)表于 05-09 11:18

    LLC電路基本原理分析及公式推導(ST)

    LLC電路基本原理分析及公式推導(ST)
    發(fā)表于 02-02 08:50

    網絡分析基本原理,怎么使用網絡分析儀?

    網絡分析基本原理網絡分析儀的測量方法網絡分析儀的結構怎么使用網絡分析儀?
    發(fā)表于 04-12 06:57

    功率分析儀的測量基本原理是什么?

    最常用的有功功率測量方法是什么?功率分析儀的測量基本原理是什么?有功功率的測量方法在變頻器的應用是什么?
    發(fā)表于 05-08 08:36

    模數(shù)轉換器(ADC)的基本原理是什么

    模數(shù)轉換器(ADC)的基本原理模擬信號轉換為數(shù)字信號,一般分為四個步驟進行,即取樣、保持、量化和編碼。前兩個步驟在取樣-保持電路中完成,后兩步驟則在ADC中完成。常用的ADC有積分型、逐次逼近型
    發(fā)表于 07-26 08:10

    SPWM的基本原理

    基本原理SPWM的全稱是(Sinusoidal PWM),正弦脈沖寬度調制是一種非常成熟,使用非常廣泛的技術;之前在PWM的文章中介紹過,基本原理就是面積等效原理,即沖量相等而形狀不同的窄脈沖加在
    發(fā)表于 09-06 08:13

    LLC電路基本原理分析及公式推導

    LLC電路基本原理分析及公式推導說明。
    發(fā)表于 04-29 14:42 ?87次下載

    信號與系統(tǒng)中卷積分析和總結

    卷積”是信號與系統(tǒng)時域分析中的一個重要內容。本文對此知識點進行了詳細的分析和總結,并給出了多道例題及詳細解答。 (一)常用信號的卷積表 首先,將常用信號的
    的頭像 發(fā)表于 09-29 17:28 ?4.2w次閱讀
    信號與系統(tǒng)中<b class='flag-5'>卷積分析</b>和總結

    卷積神經網絡的基本原理 卷積神經網絡發(fā)展 卷積神經網絡三大特點

    卷積神經網絡的基本原理 卷積神經網絡發(fā)展歷程 卷積神經網絡三大特點? 卷積神經網絡的基本原理
    的頭像 發(fā)表于 08-21 16:49 ?2921次閱讀

    了解矢量網絡分析基本原理

    了解矢量網絡分析基本原理
    發(fā)表于 11-02 15:11 ?1次下載

    卷積神經網絡的基本原理、結構及訓練過程

    卷積神經網絡(Convolutional Neural Network,簡稱CNN)是一種深度學習算法,廣泛應用于圖像識別、視頻分析、自然語言處理等領域。本文將詳細介紹卷積神經網絡的基本原理
    的頭像 發(fā)表于 07-02 14:21 ?3905次閱讀

    CNN模型的基本原理、結構、訓練過程及應用領域

    CNN模型的基本原理、結構、訓練過程以及應用領域。 卷積神經網絡的基本原理 1.1 卷積運算 卷積運算是CNN模型的核心,它是一種數(shù)學運算
    的頭像 發(fā)表于 07-02 15:26 ?5225次閱讀

    卷積神經網絡的基本原理和應用范圍

    卷積神經網絡(Convolutional Neural Network,簡稱CNN)是一種深度學習模型,廣泛應用于圖像識別、語音識別、自然語言處理等領域。本文將詳細介紹卷積神經網絡的基本原理
    的頭像 發(fā)表于 07-02 15:30 ?1811次閱讀

    卷積神經網絡的基本原理與算法

    ),是深度學習的代表算法之一。 一、基本原理 卷積運算 卷積運算是卷積神經網絡的核心,用于提取圖像中的局部特征。 定義卷積核:
    的頭像 發(fā)表于 11-15 14:47 ?1515次閱讀
    主站蜘蛛池模板: 速度与激情在线 | 免费网站看黄 | 精品乩伦视频 | 免费国产成人午夜私人影视 | 免费观看成人毛片 | 国产特级毛片aaaaaa毛片 | 国产大片黄在线看免费 | 午夜精品aaa国产福利 | 最新色视频 | 影音先锋 色天使 | 美女一级免费毛片 | 日韩草逼| 四虎影院国产精品 | 精品午夜视频 | 天天爽夜夜爽人人爽免费 | 成人www视频 | japan日韩xxxx69hd jdav视频在线观看 | 久久综合香蕉久久久久久久 | 人人干人人爱 | tube亚洲高清老少配 | 99在线热播精品免费 | 日本高清加勒比 | 一本大道高清在线视频 视频 | 五月婷婷俺也去开心 | 国产美女在线观看 | 8000av在线 | 在线免费观看一级毛片 | 日本免费视频 | 天堂免费观看 | 特级一级全黄毛片免费 | 欧美国产一区二区二区 | 天天插天天射天天操 | 国产一卡二卡3卡4卡四卡在线 | 色之综合天天综合色天天棕色 | 欧美日韩一区二区视频图片 | 免费网站黄成人影院 | 欧美人成绝费网站色www吃脚 | 黄蓉吕文德欲乱系列小说 | 久久男人的天堂色偷偷 | 天天操夜夜操免费视频 | 男女交性视频播放视频视频 |