曹 杭 袁 良 黃 珊 張云泉 徐勇軍 陸鵬起 張廣婷
1(計算機體系結(jié)構(gòu)國家重點實驗室(中國科學院計算技術研究所) 北京 100190)
2(中國科學院大學 北京 100049)
Stencil計算(模板計算)是科學工程應用中一類常見的嵌套循環(huán)算法,也被稱為“結(jié)構(gòu)化網(wǎng)格計算”,是13個伯克利核心計算模式之一.在動態(tài)規(guī)劃、圖像處理等領域的很多算法中也包含相似的依賴模式.Stencil定義了一種更新結(jié)點所需鄰居結(jié)點的模式.Stencil計算在時間維度上迭代更新規(guī)則的d維網(wǎng)格(也稱為數(shù)據(jù)空間),數(shù)據(jù)空間沿著時間維度更新,產(chǎn)生的d+1維空間被稱為迭代空間.
與其他的數(shù)值算法不同,例如稠密或稀疏矩陣計算類型的多樣性主要來源于輸入數(shù)據(jù)如稠密或稀疏矩陣的數(shù)據(jù)量,Stencil的計算類型本質(zhì)上取決于問題的類型.Stencil可以從不同的角度進行分類,如格點維度(1維,2維,…),鄰居數(shù)目,即階數(shù)(3點,5點,…),形狀(盒型,星型,…),依賴類型(高斯-賽德爾,雅可比,…)和邊界條件(常量的,周期的,…)等.
Stencil計算具有計算密集度低的特征,d維Stencil的簡單實現(xiàn)由d+1個循環(huán)組成,其中最外層循環(huán)遍歷時間維度,內(nèi)層循環(huán)更新d維空間的所有格點.簡單實現(xiàn)的數(shù)據(jù)重用度較差且典型的帶寬受限.
分塊是提高多重嵌套循環(huán)的數(shù)據(jù)局部性和并行度最有效的優(yōu)化技術之一,目前有大量針對Stencil計算分塊方案的研究.空間分塊算法促進了2維至更高維度Stencil在一個時間步內(nèi)的數(shù)據(jù)重用.為了進一步增強數(shù)據(jù)重用度,往往同時考慮時間維度和空間維度,后文將詳細介紹這些技術.另一類工作采用簡單的超矩形分塊形狀[1-4]并引入冗余計算來解決塊間數(shù)據(jù)依賴.這些研究包括自動調(diào)優(yōu)框架[5-12]、編程模型[13-14]、CPU[2,15-18]、GPU[19-23]和Phi[24-25]上的手動調(diào)優(yōu)實現(xiàn).
不同的Stencil類型也衍生出不同的解決方案.Pluto系統(tǒng)[26]延伸到周期性邊界條件Stencil的處理[27].菱形分塊最初是針對1維Stencil的分塊[28],然后擴展到更高維度的Stencil[29].高速緩存參數(shù)無關(cache oblivious)方案從最初的算法[30-31],CORALS(cache oblivious parallelograms)方案[32],發(fā)展到能處理任意Stencil并達到最大并發(fā)度的Pochoir系統(tǒng)[33].
據(jù)我們所知,目前沒有針對不同Stencil形狀的解決方案,特別是盒型和星型Stencil.星型Stencil只依賴于每個坐標軸上的點,盒型Stencil在此之外還有對角線上的數(shù)據(jù)依賴.不區(qū)分盒型和星型Stencil的根本原因可能是盒型Stencil包含星型Stencil,任何適用于盒型Stencil的算法也能應用到星型Stencil.
本文首先在數(shù)據(jù)空間上提出“自然塊”的概念來確定星型和盒型Stencil之間的區(qū)別.然后針對星型Stencil提出了一個新的2層密鋪方案,在此方案中,自然塊和它的后繼塊可以密鋪整個空間,而他們沿著時間維度擴展后形成對迭代空間的密鋪.密鋪框架類似于文獻[34]中提出的方法.我們將統(tǒng)一闡述基于自然塊概念的2種方案并將已有的方案稱為盒型密鋪而將新提出的方案稱為星型密鋪.
在密鋪方案中區(qū)別盒型和星型Stencil有2個主要的優(yōu)點,分別利用不同層次上的數(shù)據(jù)局部性.首先,當給定緩存大小時,相比盒型密鋪,用星型Stencil的自然塊密鋪能得到更大的塊,這樣可以更有效地減少內(nèi)存系統(tǒng)的壓力;其次,我們針對第二后繼塊中的元素提出了一個新穎的“2次更新”技術,可對1個元素連續(xù)進行2次更新,進一步提升了核心數(shù)據(jù)的重用.
分塊技術[35-39]是探究多層嵌套循環(huán)數(shù)據(jù)局部性和并行度最有效的轉(zhuǎn)換技術之一.Wonnacott和Strout[40]對比了一些現(xiàn)有分塊方案的可擴展性,下面我們將總結(jié)一些和Stencil計算有關的技術.
1) 重疊分塊(overlapped tiling).高性能領域中經(jīng)常在手動調(diào)優(yōu)的實現(xiàn)中采用超矩形分塊[1-4].為了執(zhí)行多個時間步,往往采用冗余計算[41]來解決分塊之間的依賴,這就是重疊分塊[28,42].Philips和Fatica[22]提出了GPU上手動調(diào)優(yōu)的手寫3.5維分塊實現(xiàn)方案,在2.5維分塊方案[4]上增加了時間維度上的劃分.Demmel等人[43-44]減少了2倍的冗余計算.形狀規(guī)則的超矩形可以獲得更高的并發(fā)度和更多細粒度優(yōu)化.
2) 時間偏移(time skewing).時間偏移分塊[45-47](分塊形狀在2維上是平行四邊形,在3維上是平行六面體,在更高維上是超平行體)消除了冗余計算,但是大多數(shù)方法只用單一形狀的塊填充空間,導致流水線啟動和有限的并發(fā)度[48-49].
3) 菱形分塊(diamond tiling).Bondhugula等人[26]對1維Stencil采用菱形分塊.Bandishti等人[29,50]將此方法擴展到更高空間維度的Stencil.Grosser等人[51]對2維的菱形尖端粗粒度化形成六邊形,在3維上演化成截掉頂端的八面體.
4) 緩存無關分塊(cache oblivious tiling).緩存無關技術旨在內(nèi)存層次結(jié)構(gòu)參數(shù)未知時充分利用數(shù)據(jù)局部性.Frigo和Strumpen提出了第1個串行[30]和并行[31]緩存無關Stencil算法.緩存無關平行四邊形方法[32]同時分離時間空間維度,但是會導致波陣面并行.Pochior[33]實現(xiàn)了多維空間劃分,能夠同時劃分所有空間維度.
5) 分裂分塊(split tiling).分裂分塊方法發(fā)掘每個塊中的獨立子塊,然后將這些子塊發(fā)送給他們的后繼塊,使得剩下的區(qū)域同樣可以并發(fā)執(zhí)行[28,52-54].Grosser等人[55]提出了另一個類似于具有緩存無關范式的多維空間劃分的分裂分塊方法.嵌套分裂分塊(the nested split-tiling)[56]能在所有空間維度遞歸分裂.
6) 混合分塊(hybrid tiling).Strzodka等人[57]提出的CATS(cache accurate time skewing)算法結(jié)合了菱形分塊、平行四邊形分塊和流水線處理.Grosser等人[58]采用混合六邊形和平行四邊形的分塊算法.這些算法取某一維空間和時間維度組成平面,用六邊形分塊和菱形分塊進行劃分,在剩下的空間維度中采用時間偏移分塊,從而分解迭代空間.混合分裂分塊方法[56]結(jié)合了嵌套分裂分塊和時間偏移分塊.
7) 密鋪分塊(tessellating).密鋪方案[34]適用于包括星型和盒型等不同Stencil類型.空間被一系列分塊密鋪,分塊之間可以無冗余并行執(zhí)行.相應地,這些分塊在時間維度上擴展后得到的擴展塊可以在迭代空間中形成密鋪.簡單明了的數(shù)學特性使得這種方法可以與細粒度優(yōu)化方法相結(jié)合.
為了使核心程序達到更高的性能,核心內(nèi)的優(yōu)化技術如計算重用[59-60]、計算重組[61]、向量化[15,62-64]和數(shù)據(jù)布局轉(zhuǎn)換[65-66]等十分關鍵.但是這些方法大多沒有對不同的Stencil形狀進行區(qū)分.本文設計實現(xiàn)了一個新穎的技術來提升星型Stencil核心程序級別上的數(shù)據(jù)重用.這種技術也可以應用到其他的分塊方法上.
本節(jié)首先介紹一個新的概念,即自然塊,來區(qū)分不同的Stencil形狀特征.然后圍繞自然塊和后繼塊這2個方面,詳細描述新提出的星型Stencil密鋪方案以及已有的盒型密鋪方案[34].最后將密鋪方案應用于高階Stencil和不同的邊界條件.
Gauss-Seidel Stencil需要執(zhí)行逐點45°流水線啟動,使用分塊技術也不能使其完全并發(fā)啟動[28].因此我們僅考慮Jacobi Stencil.此外,星型Stencil只能應用到2維數(shù)據(jù)空間中,我們只討論2維Stencil.在第5節(jié)的實驗中,對于3維星型Stencil將保留1維數(shù)據(jù)空間不進行切分.
密鋪3維迭代空間對應于計算2維Stencil,我們首先將其劃分成多個相同的時間片.在一個時間片開始時所有格點處于同一時間維度,結(jié)束時所有格點都更新了t個時間步(在下面的例子中t=4).不失一般性,我們只討論第1個時間片的密鋪,即密鋪前所有格點的時間維度均為0,密鋪后所有格點的時間維度為t.
Fig. 1 Natural block B0(0)圖1 自然塊B0(0)
當所有格點在時間維度上的值相同時,更新某一格點t個時間步所需的最小鄰居點集被稱為時間步為t的自然塊,簡稱自然塊.
圖1(a)和圖1(b)分別展示了2D9P盒型Stencil和2D5P星型Stencil時間步長為4的自然塊.
最大更新方法[34]與自然塊概念相近.具體定義為:在數(shù)據(jù)空間中給定B,沿著時間維度最大更新每個格點,直到不滿足Stencil定義的依賴關系為止.形式上而言,對所有格點b∈B,滿足以下2個條件中任一個時,停止更新:
1)time[b]=t,t是給定的最大時間更新步數(shù);
2) 存在至少一個b的鄰居b′,b′的時間維度嚴格小于b(time[b′]