999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

新型超字級并行改進算法

2017-04-20 03:38:32張素平丁麗麗王鵬翔
計算機應用 2017年2期
關鍵詞:指令

張素平,韓 林,丁麗麗,王鵬翔

(數學工程與先進計算國家重點實驗室(信息工程大學),鄭州 450001)

(*通信作者電子郵箱892841546@qq.com)

新型超字級并行改進算法

張素平*,韓 林,丁麗麗,王鵬翔

(數學工程與先進計算國家重點實驗室(信息工程大學),鄭州 450001)

(*通信作者電子郵箱892841546@qq.com)

對于超字級并行(SLP)算法不能有效地處理大型程序中并行代碼率較小,且可向量化的代碼中可能存在對向量化不利的代碼的問題,提出了一種新型的SLP改進算法NSLPO。首先,將程序中不能向量化的非同構語句進行同構化處理,定位SLP丟失的向量化機會;然后,通過冗余節點添加構建最大通用子圖,通過冗余刪除等優化過程得到同構化之后的補充SLP圖,提高程序中代碼的并行性;最后,運用節流法將對向量化有害的代碼摒除在向量化之外,僅對它們進行標量處理,通過只向量化處理那些向量化有收益的代碼以盡可能地提升程序效率。在一組廣泛使用的內核測試集中進行實驗,結果顯示,與SLP算法相比,NSLPO算法性能更優,其執行時間比SLP平均減少9.1%。

同構;節流法;向量化;超字級并行;補充圖

0 引言

高性能計算的迅猛發展使得能耗、訪存和通信等技術面臨發展瓶頸,自動并行化軟件的發展是當下解決此問題的關鍵所在。1996年,Intel在其Pentium處理器上集成了MMX(Multi-Media Extension)之后,大多數處理器都開始集成單指令多數據(Single Instruction Multiple Data, SIMD)擴展部件[1],以充分發掘處理器的計算和圖形處理能力。SIMD不僅可以提升特定應用程序的性能,還可以提高大多數程序的效率。當前向量化的方法一般分為兩種:一種是人為地將串行代碼改為單指令多數據的向量化代碼的手工向量化;另一種是運用編譯器對代碼進行自動向量化處理,即分析編譯器,在編譯器中增加代碼自動向量化的模塊,使其可以自動地實現向量化的功能。第一種方法要求程序員對應用程序的結構和數據布局有深刻認識,而且還要掌握目標平臺所支持的擴展體系結構和指令集的特點,才能夠正確地修改程序結構和數據布局使之適合利用SIMD來提取并行性。這個過程較為復雜且容易出錯,效果并不完美。在這個轉換的過程中有很多數據訪問模式不易被轉換,而且要想完美地實現代碼轉換,必須要對數據依賴和數據重用模型有很深入的理解。所以,現在比較通用且流行的方法是自動向量化。目前自動向量化的方法主要有借鑒向量機上的傳統向量化和面向基本塊的超字級并行(Superword Level Parallelism, SLP)向量化。傳統的向量化方法主要是發掘最內層循環中語句級別的并行性,一般情況下,最內層循環向量化易實現,代價小,但當最內層循環存在依賴環、歸約或者數組引用相對于最內層循環索引不連續時,內層向量化代價較大甚至無法向量化。

Larsen等[2]在2000年提出了SLP的概念,此算法是從直線型標量代碼開始進行自動向量化,而且在大多數編譯器如GCC、LLVM、icc等主流編譯器中均已實現。其基本過程主要是從store指令開始沿著數據依賴圖向上直到達到load指令或者不能向量化的指令才停止,運用貪婪算法的方式將標量指令打包成向量指令。但對于大型應用來說,這個過程存在兩個問題:1)利用SLP進行向量化的前提是語句同構,因為現存的SLP算法只能夠打包同構的語句,對于結構相異的語句則只能跳過,不予處理。然而,大型應用程序中并行化代碼即同構的語句所占比例相對于程序龐大的代碼來說非常小,這樣就可能大大地降低向量化的效率。2)程序中可以進行向量化處理的代碼中可能存在對向量化有害的代碼,即對這部分代碼進行向量化處理有可能損害整體代碼的效率,這些代碼可能需要將代碼從標量寄存器移進向量寄存器中而增加代價,從而損失向量化收益。因為SLP處理針對的是整體代碼,不能單獨處理局部,即使有些代碼對向量化有害,仍舊會對其進行向量化從而可能極大地損害整體的效率。為了解決這兩個問題,本文提出一種改進的SLP算法——NSLPO(New Superword Level Parallel Optimization)。首先,對于結構相似的語句進行同構化處理,增加其向量化的可能性;然后運用節流法,一步步判斷每一組包形成時的向量化收益,尋找向量化最優子圖,在向量化還有收益時盡早停止向量化,阻止那些不利于向量化的代碼進行向量化處理,最大可能地保持整個代碼的收益。實驗結果顯示,在一組廣泛使用的內核測試集中,NSLPO比SLP的執行時間平均減少9.1%。

1 直線型SLP及相關研究

1.1 直線型SLP

SIMD擴展是當下主要的并行化處理技術之一,先前的多媒體擴展只能夠支持數據長度較短的數據類型,目前新的擴展可以支持128位甚至Intel的AVX可以支持256位,AVX2可以支持512位的超字操作。為滿足實際需要,2000年Larsen等[2]首先提出了面向基本塊的SLP向量化方法,用以處理較寬數據類型的數據并行。

SLP算法的過程如下:首先利用相鄰的內存訪問作為打包的種子,然后通過定義-使用鏈和使用-定義鏈啟發式的擴展包,最后利用依賴關系調度包。

1.2 相關研究

SLP向量化經常需要用到打包、解包操作。在使用SLP時,為了滿足SIMD操作超字的要求,超字語句中的操作需要以特定的順序放入向量寄存器中。如果超字中的原操作在向量寄存器中不可用,就需要使用昂貴的訪存指令和額外的向量寄存器重排序指令來從內存中引入數據并按照要求在向量寄存器中對它們進行重新組織,這個過程叫作超字打包。同樣地,為了滿足后續的使用,將超字中的操作分散開來時仍然會有額外的開銷,這個過程叫作超字解包。先前的研究顯示由于超字打包/解包的開銷太高以至于可能超出SLP所帶來的性能優化。因此,在應用SLP時盡可能地減少打包/解包的開銷相當重要。打包沖突圖提供了更多包重用的機會,在包調度時決定包的執行順序和包內語句的順序,以減少拆包的次數[3]。采用多元決策圖可以有效地表示包內的數據,減少拆包的次數[4]。SLP算法只能處理同構語句,所以,代碼中含有足夠的同構語句對代碼效率的提高相當重要。對于循環來說,為了得到足夠多的地址連續的同構語句,在SLP打包前先作循環展開。對外層作循環展開和壓緊、對內層作循環展開的包轉置,可以解決內層循環攜帶依賴、外層循環可以向量化但是數組引用相對于外層循環索引不連續的問題[5]。將標量打包為向量需要將數據從標量寄存器轉入或者轉出向量寄存器,在這個過程中,較好的處理向量寄存器可以盡可能地減少開銷,Shin等[6-7]開發了一種策略來管理向量寄存器文件,使之作為編譯控制緩存,以提高對本地數據的管理效力;不僅如此,他們還在文獻[8-9]的研究中使用控制流指令斷言時派生出了一種識別更多的超字級并行的大型基本塊。Nuzman等在文獻[10]中給出了一種支持插入數據的高效向量化編譯技術,在文獻[11]中則提出了短SIMD框架的外層循環向量化技術。Barik等[12]提出在接近機器層的底層IR上進行自動向量化,能在動態編譯時獲得更高的編譯效率。侯永生等[13]針對不能正規化的循環提出了一種展開壓緊算法,并用超字級并行向量化方法發掘展開壓緊從而提高程序的效率。徐金龍等[14]提出了一種分段約束的SLP發掘路徑優化算法,采用段間的SLP發掘來約束循環展開所帶來的過多的發掘路徑。魏帥等[15]提出了一種面向SLP的多重循環向量化方法。索維毅等[16]對SLP自動向量化中的指令分析和冗余優化算法進行了添加和改進,解決了由于依賴關系或者數據非對齊而使向量化效率不高的問題。每一種算法都從不同的角度對SLP算法進行改進以提升不同應用程序的效率。本文主要是針對大型應用中并行代碼的占有率較低,且向量化代碼中可能含有對向量化不利的代碼的問題進行改進,首先盡可能地同結構化非同構語句,增強代碼的并行性,然后通過節流的方法盡可能地保證程序的收益。

2 NSLPO算法

NSLPO算法首先對需要向量化的循環作一些通用的預處理,如循環展開,然后將結構相似但非同構的語句進行冗余節點添加,使得其結構相同[17];接著用節流法[18]迭代地對每組可以向量化處理的指令包進行收益分析,對于每一組包,如果向量化處理其收益為正,則證明該包對向量化有利,否則有害。為保證整體代碼的效率,對于那些向量化有害的代碼就停止向量化,進行標量計算。

算法具體思路如下:

1)對標量代碼中需要的循環進行循環展開等預處理,盡可能地增加程序的并行性。

2)對那些結構相似但非同構的語句進行同結構化處理[17]。

3)用SLP算法尋找向量化種子指令,構建SLP圖。

4)用節流法計算所有的有效節流點[18]。

5)根據有效節流點對SLP圖進行處理,生成優化節流子圖。

6)運用精確的代價模型計算并保存各個節流子圖的收益。

7)對所有節流點進行上述4)~6)處理,找出最優節流子圖,并按照最優節流子圖所示用向量代碼代替標量代碼。

3 非同構語句同結構化

SLP算法處理的都是同構指令,所以其前提是需要語句同構,但是大型應用程序中同構語句的比例有限,所以為了盡可能地提高程序的并行性,增加向量化的可能性,提高程序效率,可以先將非同構語句進行同結構化處理[17],處理步驟如下:

2)通過添加盡可能少的冗余節點構建SLP的補充依賴圖。

3.1 定位SLP可能丟失的向量化機會

因為在代碼進行SLP處理之前已經經歷過很多優化,如冗余節點刪除等,很可能將本來可以同構的依賴圖變成異構的依賴圖,從而在SLP算法處理同構語句時被SLP排除在外,使得其丟失了這些本來可以向量化的機會。所以,首先要構建語句依賴圖,嘗試擬組建超字語句組,盡可能地定位這些丟失的向量化機會。

3.2 構建SLP補充依賴圖

定位到SLP丟失的向量化機會后,通過在依賴圖中添加盡可能少的冗余節點同結構化非同構語句,構建SLP補充依賴圖。一般需要如下步驟:

1)構建最大通用子圖。尋找兩個圖的最大通用子圖一般被認為是一個NP問題,由于現實中圖都較小,文獻[19]中提出用接近于最優算法的快速backtracking算法來解決這個問題。

2)構建最小通用超圖。比較最大通用子圖與原圖的差異,可以得到最小通用超圖。例如,如果g1和g2是原圖,MCS是g1和g2的最大通用子圖,那么最小通用超圖MinS=MCS+dif1+dif2,其中:dif1=g1-MCS,dif2=g2-MCS。

3)經過插入節點選擇、冗余刪除等步驟得到SLP補充依賴圖。

北辰教堂不僅在教牧人員內部組織對十九大精神、黨的宗教方針政策、《宗教事務條例》等法律法規的學習,更通過“北辰教堂宣傳文化走廊”、一年一次的“愛國愛教、遵紀守法”宣傳周等活動,對廣大信眾進行宣傳教育,教導廣大信眾,做愛國愛教、知法守法的好公民。

針對如下所示源碼,先構建其數據依賴圖如圖1(a)所示。如果按照SLP算法,則圖1(b)為其SLP依賴圖,從數據依賴圖中可得其可向量化處理的指令組有2組。因為SLP算法是從store指令開始,自底向上地搜索同類型的指令組,如果遇到load指令或者不能向量化的指令(如圖1(c)中兩指令類型不同)時就停止,最終只得到2個SLP指令組。而運用同結構化算法可得圖1(d)的SLP補充圖,此算法通過給依賴圖添加盡可能小的冗余節點來實現語句非同構語句同結構化處理,最終將圖1(a)的異構依賴圖補充為圖1(d)的同結構化數據依賴圖,由此補充依賴圖可以得到5組SLP指令組如圖1(e)所示。由此可以看出,在進行SLP處理之前,先將非同構語句進行同結構化處理可以大大地提高程序的并行性,從而達到提高程序效率的目的。

Float B[N]; Float C[N]; ? C[i]=B[i]*3.0+2.0; C[i+1]=B[i+1]+1.0; ?

4 節流優化

當要處理的語句已進行同構化處理后,即基本上很多語句都可以進行向量化處理了,但是,由于SLP算法向量化處理代碼是以代碼的整體來計算收益的,不能分別計算每個語句中的操作組的收益,所以,代碼中可能含有對向量化有害的部分不能被它發掘出來,從而可能降低向量化的收益。本文采用節流優化處理,即對每一個打包指令集分別計算其向量化收益,如果向量化處理該指令集收益為正,則進行向量化處理,否則按照標量處理。

圖1 同構化異構語句

4.1 節流處理過程

節流優化處理過程如下,它前面的處理跟SLP算法相同,只是在后面計算指令代價時進行不同處理。

1)按照SLP算法的思路向量化種子指令集。這些指令一般包括:非依賴的內存指令,訪問相鄰內存地址;歸約指令;無依賴的簡單指令。由于相鄰內存訪問指令是最有優勢的種子指令,所以大多數編譯器都首選此類指令作為種子指令。

2)從種子指令開始根據數據依賴圖構建最初的向量化指令組。一般都是從Store指令開始沿著數據依賴圖自底向上直到load指令或者不能向量化的指令為止。每一組首先要指出可以被向量化的標量指令,以及它的相關輔助數據,如該組的代價。

3)當數據依賴圖構建完畢時,SLP會運用特定平臺的代價模型靜態評估代碼性能,評估每條指令的向量代價Vcost和標量代價Scost,代價差異用Dfcost表示,如式(1)所示。

Dfcost=Vcost-Scost

(1)

4)如果Dfcost為負數,則表明該指令向量化對這個組來說是有收益的,否則為有害的。為了得到一個精確的代價,算法會將標量與向量之間的數據轉換所需要的額外指令(收集和擴散指令)計算在內,用SGcost表示(一般用一個收集或者擴散指令,其值就加1)。然后計算出總的代價Tlcost,它包括所有組的代價以及額外代價,如式(2)所示。

(2)

如果Tlcost<0,則說明向量化是有收益的,否則沒有。只有當向量化形式的代價比標量形式代價小時,向量化才是有收益的。

5)根據節流法計算每個節流子圖所有指令的總的代價差異,選擇代價差異最小圖的來作為最優節流子圖,然后用SLP向量化最優節流子圖,其余部分則標量處理,盡可能地保證向量化的收益。

SLP算法對實現程序完整向量化效用良好,但是它忽略了另一種收益形式,即代碼中部分代碼向量化有收益,其他部分則沒有收益的情況。SLP算法將代碼依賴圖當作一個獨立的不可分割的區域,它只能對其整體作向量化性能評估,從而確定對該代碼向量化是否有性能提升。但是如果代碼中部分向量化有收益,另一部分則對性能有損害,從而可能造成整體向量化性能為無收益的結果,就表示該代碼不能進行向量化處理或者最終的向量化結果非最優狀態。圖2針對下述代碼展示了一個新型SLP改進算法的實現過程。

FloatA[N],B[N],C[N],D[N],E[N]; ?E[i]=(A[i]+(B[2*i]*(C[2*i]+ (D[2*i]*B[2*i]))))*3.0+1.0;

E[i+1]=(A[i+1]+(B[3*i]*(C[3*i]+ (D[3*i]*B[3*i]))))+2.0;

?

圖2(a)是上述代碼的數據依賴圖。數組E[]存儲數組A[]、B[]、C[]和D[]的計算結果。其中,E[i]和E[i+1]是連續的內存地址,與A[i]和A[i+1]中的load相同,但是來自于另外幾個數組的load則是非連續的(由數組的索引2*i和3*i可知)。圖中單獨的圓形load為非連續的load,大多向量化方法都不能實現這些非連續load的向量化處理。現在對這些代碼進行SLP處理:因為圖2(a)所示兩個數據依賴圖不是同構的,所以應用異構語句同構化方法[17]對其作同構化處理得到圖2(b)。接著用SLP算法對其進行向量化處理:首先定位種子指令,即相鄰內存訪問指令,圖中E[i]和E[i+1]中的stores,它們形成一個個打包組g1(即圖2(c)中SLP圖的根);然后算法根據依賴圖自底向上,嘗試把相同類型的指令構成更多的指令組;其他的乘指令、加指令以及來自A[]的指令也分別構成不同的指令組(從g2到g11),而來自于非連續內存地址訪問的load(數組B[]、C[]和D[]的loads)則保持標量執行。每一個標量節點的數據如果被向量組使用則需要一個額外的插入指令將標量數據插入向量寄存器中,其代價會變大,因為每一個標量load的向量化代價都加1,所以如圖2(c)所示每一個圓形的load上該節點的代價差異都有一個+1的標識。一旦數據被插入向量寄存器中,它就可以在任何需要的時候從向量化寄存器中被讀出從而被重用,如圖2(c)中的g9和g11都可以重用數組B[]的數據。

圖2 新型SLP改進算法實現過程

算法向量化處理的性能由編譯器的代價模型來評估,代價模型可以評估出每條指令的代價。在我們使用的目標編譯器GCC代價模型中,每條指令代價顯示為1。圖2(c)中依賴圖節點都標有代價差異,組g1的差異代價Dfcost為-1,表示如果兩個stores指令向量化處理,其代價為1;但如果依然按標量處理,其代價為2,保持標量處理的指令代價差異為0。任何用來支持向量化處理的額外的指令,如插入指令,還有同構化處理時的選擇指令,都有一個正數的代價差異,因為如果保持標量狀態的開銷就不會使用它們。然后計算整體代價Tlcost,圖2(c)的整體代價為1,意味著向量化處理這段代碼沒有收益(只有當整體代價為負時,才表示向量化有收益)。

圖2(c)向量化處理之所以沒有收益主要是因為以g10為根的子圖對向量化來說是有害的(它的總代價為正4)。因為SLP算法將代碼看作一個整體,所以它不能識別出這些問題。為了改進這個狀況,在此處運用節流法將那些向量化處理時損害大于收益的代碼子區域分割出來,單獨計算其代價,如圖2(c)所示,在組g10處將其分割,以g10為根的子圖進行標量處理,而下面的部分則向量化處理,此時總代價Tlcost為-3,說明向量化是有收益的。

而Vanilla提出的SLP[2]只評估一次數據依賴圖的代價,而且評估的是它的整體代價,它不會以任何方式來改變圖,其缺點之一就是它不會移除圖中的任何一部分,即使這些部分向量化處理時對整體向量化性能有所損害。

4.2 計算有效節流點

要得到最優節流子圖,首先需要計算出有效節流點。針對圖2以每個節點為根的子圖如圖3所示,根據每個子圖中的指令代價計算出其總代價,找出代價最小的子圖,即最優子圖。根據圖2(c)中所標示的差異代價計算其代價得到表1數據。表1中:RootNode表示節點;SubTlcost表示以該節點為根的子圖向量化的總代價;Tlcost表示對子圖標量處理,對剩余圖進行向量化處理的總代價。由表1可以看出g4和g10為最優節流點,由于后續處理的原因,需要盡可能多地向量化代碼,所以在同樣代價時,選擇g10作為節流點,在向量化處理時,對g10子圖作標量處理,對剩下的部分進行向量化處理。

表1 節流點子圖代價

圖3 節流子圖

5 算法偽代碼

構建節流SLP子圖集的偽代碼如下:

1)

輸入:SLP依賴圖

2)

輸出:SLP依賴圖的節流子圖集

3)

if(st==samestruct);

//判斷SLP圖是否同構

4)

Cutsubgraph();

//若返回true,直接調用節流函數;

5)

else

6)

{

7)

Samestruct(g1,g2)

//若返回false,則表示非同構,調用同結構化函數

8)

{

9)

insertMinNodes();

//根據需要計算插入最小冗余節點

10)

creatMaxS();

//構建最大通用子圖

11)

deletenodes();

//進行冗余刪除等處理

12)

returng3;

//返回同構化數據依賴圖g3;

13)

}

14)

}

15)

Cutsubgraph()

//對g3進行節流處理

16)

{

17)

Firstcut_subgraphs(g3)

//首先進行首處理函數,初始化依賴圖

18)

{

19)

root=g3.getroot();

20)

init_g();

21)

init_g.addnode(root);

22)

Latercut_subgraphs();

23)

}

24)

Latercut_subgraphs(sg)

//遞歸調用后處理函數

25)

{

26)

if(sgingset)

//sg在節流子圖集gset

27)

return;

28)

gset.insert(sg);

//將子圖插入節流子圖集中

29)

for(子圖的鄰近節點neighbor)

30)

{

31)

if(neighbor在sg中)

32)

Continue;

33)

sg_cp=copysg(sg);

//復制子圖

34)

sg_cp.addnode(neighbor);

35)

Latercut_subgraphs(sg_cp)

//遞歸調用后處理函數

36)

}

37)

}

38)

}

算法給出了生成有效節流子圖集的核心函數的輸入是依賴圖,輸出是節流子圖集(gset),即包含根節點的相關子圖。算法包含兩個主函數:同結構化函數Samestruct()和節流函數Cutsubgraph()。同結構化函數包含插入最小冗余節點insertMinNodes()、構建最大通用子圖creatMaxS()以及冗余刪除deletenodes()等內容。節流函數則主要包含兩個函數,首處理函數Firstcut_subgraph()和后處理函數Latercut_subgraphs()。這兩個函數分別可以遞歸的調用本身,首處理函數創造一個初始化圖init_g,它只包含初始化根節點,然后把它作為參數調用遞歸函數,遞歸函數是算法的計算核心,即將輸入子圖保留,然后每次增加一個相鄰節點并遞歸處理來擴展它,如果該圖已在有效節流子圖集中,則退出計算,否則將子圖插入到子圖集中。下面函數迭代地遍歷子圖中所有相鄰節點并逐一將它們插入子圖中,如果該節點已存在于子圖中,則跳過它;否則,創建一個包含鄰近節點的子圖副本(sg_cp),然后將結果子圖作為一個遞歸的參數繼續調用后處理函數,直到所有的節點都遍歷完畢,得到所有的節流子圖。

得到子圖后,必須知道子圖中的代碼應該被向量化還是串行執行。為了得到更好的性能提升,算法需要一個精確的代價模型,該模型能夠評估每種情況下的反應時間。GCC中的代價模型計算的代價等于所有單個指令代價的總和,每個指令的代價等于其花費在目標機器(比如x86/AVX2)上的執行時間,但是如果存在流入或流出向量代碼的標量數據流,或者流入或流出標量代碼的向量數據流,則還需要把執行數據移動的指令花費的時間添加到總的代價中。這些代價均和目標相關,并能夠通過代價模型計算出來。該代價模型簡單易懂,對目標流水的指令調度也能夠作精準的計算,特別是簡單有序的結構。

6 實驗評估

6.1 實驗環境

實驗平臺CPU主頻為2.10GHz,內存為2GB,L1數據cache為32KB,L2數據cache為256KB,基本頁面為8KB的E5- 2620v2型處理器,有6個處理器核。 操作系統內核為Linux2.6.18,版本為RedhatEnterpriseAS5.0,目前可以支持256位的向量計算。

6.2 實驗結果及分析

在GCC5.1.0編譯器上進行了實驗,用本文算法對現存的SLP算法作了一個擴展處理,用SPEC2006(StandardPerformanceEvaluationCorporation2006)[20]和NPB(NASparallelbenchmarksuite)[21]的以及MediaBenchII[22]和Polybench[23]的一些標準對本文算法進行了實驗評估,表2中給出了所用數據的詳細信息。

表2 實驗所用數據信息

在GCC中,-O3選項可以默認將向量化打開,所以在測試時最基本的選項就是-O3,然后在此基礎上再添加其他優化選項,如循環展開、循環分布等,因為在預處理時可能用到循環展開,所以在測試時,把-O3、-funroll-loops(循環展開)等作為基礎的編譯選項,對基礎選項、以及基礎選項加SLP優化、基礎選項加本文算法優化三組數據作對比,結果如圖4所示。在實驗中,將只加基礎選項的組叫作基礎優化,在圖中用Base來表示;加SLP優化的稱為SLP優化,在圖中用SLP表示;而本文算法優化稱作新型SLP優化,在圖中用NSLPO表示。實驗結果顯示,本文算法的執行時間比基礎優化減少了17.6%,比SLP減少了9.1%。

圖4顯示了在X86平臺上GCC編譯器中在基礎選項、SLP優化以及新型SLP優化三種優化的性能對比,為了方便處理,computerhs、multsu3matvecsum4dir、ewaldLRcorrection、computertrianglebbox、lbmhandlelnOutFlow、su3-adjoint、jdct-ifast、floyd-warshall程序分別用數字1~8代表。由圖中可以看出,對大多數程序來說,新型SLP優化性能都優于SLP以及基礎優化。新型SLP優化最高能優于基礎優化49%(如jdct-ifast),速度超出SLP優化15%(computetrianglebbox)。computerhs和multsu3matvecsum4dir在新型SLP改進算法下有收益,但是在SLP算法下則沒有,這是因為SLP依賴圖中含有對向量化有害的代碼,所以代價模型評估時會得出這些代碼的向量化代價大于標量執行代價;而SLP改進算法則可以將這些對向量化有害的代碼從整體中移除,只向量化那些向量化處理后有收益的代碼,對于有害的代碼則保持標量執行,從而可以很大程度上提高向量化代碼的比率,提高程序的執行效率。

ewald-LRcorrection和computetriangle-bbox無論是在SLP優化下還是SLP改進算法優化下性能都優于基礎優化,在這兩個程序中,由GCC代價模型評估出的向量化的代價都小于標量執行的代價,所以,它們對程序來說有性能提升。從圖4可以看出,SLP改進算法性能優于SLP算法。

圖4 基礎優化、SLP優化、NSLPO性能對比

核心jdct-ifast包含兩個不同類型的代碼,它們均在NSLPO中有收益。jdct-ifast源碼中包含同構計算,這些同構計算在經過高級優化時變成了非同構的計算,如圖5所示,它的優點是實現了歸約。jdct-ifast源碼實現了一系列的數組常量的乘計算,有些值在數組中是平方數,這些特定值的乘指令歸約主要歸功于邏輯左移,因此打破了同構,所以,SLP算法不能對其實現向量化處理,然而本文的NSLPO算法由于包含同結構化異構語句這一模塊,所以可以實現它的向量化,從而能提高程序的處理效率。

圖5 由高級優化引發的非同構(jdct-ifast)

盡管以上整體性能測試結果已經能很好地說明NSLPO效果良好,但是,靜態測試結果也相當重要,因為靜態結果可以很好地展示在沒有其他干擾的情況下,一個精確的代價模型對該算法的性能評估,靜態結果是基于每一個向量化圖的整體代價,顯示了在一個特定代價模型下SLP和NSLPO的結果比較。NSLPO經??梢宰钚』粋€圖的代價,而SLP則只能用整體圖的代價來決定是否對代碼實行向量化處理。

圖6顯示了標量、SLP優化、NSLPO優化的整體靜態代價,應用GCC的代價模型,為了得到一個更加有意義的測試,這個代價是每一個工作的標量代價總和的形式化圖,由圖可以看出,就算不考慮真正的性能提升,NSLPO也成功地降低了向量化的代價。平均看來,NSLPO降低了約23%的代價,SLP也降低了約12%的代價。

所以,不論從整體性能還是靜態代價分析來看,本文的改進算法NSLPO性能都優于SLP算法;而且本文方法應用了多種通用測試集中的程序進行了實驗,其結果顯示了應用有普遍性和可適用性。

7 結語

本文提出了一種SLP算法的改進算法NSLPO,該算法首先通過將非同構的語句進行同結構化處理,增加并行化代碼的比率;然后運用節流法對同構圖中的指令進行處理,消除那些能夠被向量化但是阻礙程序性能提升的代碼。該算法從原始SLP圖中生成各種子圖集合,并通過代價模型找出向量化性能最好的子圖,最后只向量化子圖中的語句,其他對向量化不利的語句則進行串行執行的方式。SLP算法只能整體處理代碼,如果部分代碼向量化有收益,另一部分向量化有損害,也可能導致整體代碼向量化有損害,經過SLP的代價分析,該代碼最后則不能進行向量化處理;而本文提出的算法可以很好地解決這個問題,不僅可以增加代碼向量化的效率,也可以提升程序的性能。從實驗結果來看,本文算法的性能良好,再加上它的適用性較為廣泛,雖然它的實現還需要較為精確的代價模型來配合,但是像GCC和LLVM這些通用的大型編譯器本身都具有一個較為好的代價模型,所以該算法具有一定通用性。

)

[1] 高偉,趙榮彩,韓林,等.SIMD自動向量化編譯優化概述[J].軟件學報,2015,26(6):1265-1284.(GAOW,ZHAORC,HANL.ResearchonSIMDauto-vectorizationcompilingoptimization[J].JournalofSoftware, 2015, 26(6): 1265-1284.)

[2]LARSENS,AMARASINGHES.Exploitingsuperwordlevelparallelismwithmultimediainstructionsets[J].ACMSIGPLANNotices, 2000, 35(5): 145-156.

[3]TOUMAVITISG,WANGZ,FRANKEB,etal.Towardsaholisticapproachtoauto-parallelization:integratingprofile-drivenparallelismdetectionandmachine-learningbasedmapping[J].ACMSIGPLANNotices, 2009, 44(6): 177-187.

[4]HIROAKIT,AKEUCHIY,SAKANUSHIK,etal.Packinstructiongenerationformediaprocessorsusingmulti-valueddecisiondiagram[C]//Proceedingsofthe4thInternationalConferenceonHardware/SoftwareCodesignandSystemSynthesis.NewYork:ACM, 2006: 154-159.

[5]TENLLADOC,PIUELL,PRIETOM,etal.Improvingsuperwordlevelparallelismsupportinmoderncompilers[C]//CODES+ISSS’05:Proceedingsofthe3rdIEEE/ACM/IFIPInternationalConferenceonHardware/softwareCodesignandSystemSynthesis.Piscataway,NJ:IEEE, 2005: 303-308.

[6]SHINJ,CHAMEJ,HALLMW.Compiler-controlledcachinginsuperwordregisterfilesformultimediaextensionarchitectures[C]//PACT’02:Proceedingsofthe2002InternationalConferenceonParallelArchitectures&CompilationTechniques.Piscataway,NJ:IEEE, 2002: 45-55.

[7]SHINJ,CHAMEJ,HALLM.Exploitingsuperword-levellocalityinmultimediaextensionarchitectures[J].JournalofInstruction-LevelParallelism, 2003, 5: 1-28.

[8]SHINJ.Compileroptimizationsforarchitecturessupportingsuperword-levelparallelism[D].LosAngeles,CA:UniversityofSouthernCalifornia, 2005.

[9]SHINJ,HALLM,CHAMEJ.Superword-levelparallelisminthepresenceofcontrolflow[C]//CGO’05:Proceedingsofthe2005InternationalSymposiumonCodeGenerationandOptimization.Washington,DC:IEEEComputerSociety, 2005: 165-175.

[10]NUZMAND,ROSENI,ZAKSA.Auto-vectorizationofinterleaveddataforSIMD[J].ACMSIGPLANNotices, 2010, 41(6): 132-143.

[11]NUZMAND,ZAKSA.Outer-loopvectorization:revisitedforshortSIMDarchitectures[C]//PACT’08:Proceedingsofthe2008InternationalConferenceonParallelArchitecturesandCompilationTechniques.NewYork:ACM, 2008: 2-11.

[12]BARIKR,ZHAOJ,SARKARV.EfficientselectionofvectorInstructionsusingdynamicprogramming[C]//MICRO’43:Proceedingsofthe2010IEEE/ACMInternationalSymposiumonMicroarchitecture.Washington,DC:IEEEComputerSociety, 2010: 201-212.

[13] 侯永生, 趙榮彩, 高偉.非正規化循環的單指令多數據向量化[J].計算機應用,2013,33(11):3149-3154.(HOUYS,ZHAORC,GAOW.Singleinstructionmultipledatavectorizationofnon-normalizedloops[J].JournalofComputerApplications, 2013, 33(11): 3149-3154.)

[14] 徐金龍,趙榮彩,韓林.分段約束的超字并行向量發掘路徑優化算法[J].計算機應用,2015,35(4):950-955.(XUJL,ZHAORC,HANL.Vectorexploringpathoptimizationalgorithmofsuperworldlevelparallelismwithsubsectionconstraints[J].JournalofComputerApplications,2015, 35(4): 950-955)

[15] 魏帥,趙榮彩,姚遠.面向SLP的多重循環向量化[J].軟件學報,2012,23(7):1717-1728.(WEIS,ZHAORC,YAOY.Loop-nestauto-vectorizationbasedonSLP[J].JournalofSoftware, 2012, 23(7): 1717-1728.)

[16] 索維毅,趙榮彩,姚遠,等.面向DSP的超字并行指令分析和冗余優化算法[J].計算機應用,2012,32(12):3303-3307.(SUOWY,ZHAORC,YAOY,etal.SuperwordlevelparallelisminstructionanalysisandredundancyoptimizationalgorithmonDSP[J].JournalofComputerApplications, 2012, 32(12): 3303-3307.)

[17]PORPODASV,MAGNIA,JONESTM.PSLP:paddedSLPautomaticvectorization[C]//CGO’15:Proceedingsofthe13thIEEE/ACMInternationalSymposiumonCodeGenerationandOptimization.Washington,DC:IEEEComputerSociety, 2015: 190-201.

[18] PORPODAS V, JONES T M.Throttling automatic vectorization: when less is more [C]// Proceedings of the 2015 International Conference on Parallel Architecture & Compilation.Piscataway, NJ: IEEE, 2015: 432-444.

[19] WOLFE J M.High Performance Compilers for Parallel Computing[M].Boston, MA: Addison-Wesley, 1995: 225-231.

[20] Spec cpu2006 [EB/OL].[2016- 04- 06].http://www.spec.org/cpu2006/.

[21] NAS parallel benchmark suite [EB/OL].[2016- 04- 06].http://www.nas.nasa.gov/ Resources/Software/npb.html

[22] FRITTS J E, STEILING F W, TUCEK J A, et al.MediaBench Ⅱ video: expediting the next generation of video systems research [J].Microprocessors & Microsystems, 2005, 33(4): 301-318.

[23] POUCHET L N.PolyBench: the polyhedral benchmark suite [EB/OL].[2016- 04- 06].http://www.cs.ucla.edu/?pouchet/software/polybench/, 2012.

This work is partially supported by the National High Technology Research and Development Program (HeGaoJi Program) of China (2009ZX01036- 001- 001- 2).

ZHANG Suping, born in 1991, M.S.candidate.Her research interests include HPC, advanced compiler technology.

HAN Lin, born in 1978, Ph.D, associate professor.His research interests include HPC, advanced compiler technology.

DING Lili, born in 1992, M.S.candidate.Her research interests include HPC, advanced compiler technology.

WANG Pengxiang, born in 1988, M.S.candidate.His research interests include HPC, advanced compiler technology.

New improved algorithm for superword level parallelism

ZHANG Suping*, HAN Lin, DING Lili, WANG Pengxiang

(StateKeyLaboratoryofMathematicalEngineeringandAdvancedComputing(InformationEngineeringUniversity),ZhengzhouHenan450001,China)

For SLP (Superword Level Parallelism) algorithm cannot effectively process the large-scale applications covered with few parallel codes, and the codes which can be vectorized may be adverse to vectorization.A new improved algorithm for SLP was proposed, namely NSLPO.First of all, the non-isomorphic statements which cannot be vectorized were transformed to isomorphic statements as far as possible, thus locating the opportunities of vectorization which SLP has lost.Secondly, the Max Common Subgraph (MCS) was built by adding redundant nodes, and the supplement diagram of SLP was got by using some optimization such as redundancy deleting, which can greatly increase the parallelism of program.At last, the codes which are harmful to vectorization were exclued out of vectorization by using cutting method and executed in serial, only the valuable codes for vectorization were vectorized to improve the efficiency of programs as far as possible.Experiments were conducted on widely used kernel test sets.The experimental results show that compared with the SLP algorithm, the proposed NSLPO algorithm has better performance and its running time was reduced by 9.1%.

isomorphism; cutting method; vectorization; Superword Level Parallelism (SLP); supplement diagram

2016- 07- 31;

2016- 10- 24。 基金項目:“核高基”國家科技重大專項(2009ZX01036- 001- 001- 2)。

張素平(1991-),女,河南禹州人,碩士研究生,主要研究方向:高性能計算、先進編譯技術; 韓林(1978-),男,山東臨沂人,副教授,博士,主要研究方向:高性能計算、先進編譯技術; 丁麗麗(1992-),女,河南商丘人,碩士研究生, 主要研究方向:高性能計算、先進編譯技術; 王鵬翔(1988-),男,河南安陽人,碩士研究生, 主要研究方向:高性能計算。

1001- 9081(2017)02- 0450- 07

10.11772/j.issn.1001- 9081.2017.02.0450

TP314

A

猜你喜歡
指令
聽我指令:大催眠術
ARINC661顯控指令快速驗證方法
測控技術(2018年5期)2018-12-09 09:04:26
LED照明產品歐盟ErP指令要求解讀
電子測試(2018年18期)2018-11-14 02:30:34
殺毒軟件中指令虛擬機的脆弱性分析
電信科學(2016年10期)2016-11-23 05:11:56
巧用G10指令實現橢圓輪廓零件倒圓角
時代農機(2015年3期)2015-11-14 01:14:29
中斷與跳轉操作對指令串的影響
科技傳播(2015年20期)2015-03-25 08:20:30
基于匯編指令分布的惡意代碼檢測算法研究
一種基于滑窗的余度指令判別算法
歐盟修訂電氣及電子設備等產品安全規定
家電科技(2014年5期)2014-04-16 03:11:28
MAC指令推動制冷劑行業發展
汽車零部件(2014年2期)2014-03-11 17:46:27
主站蜘蛛池模板: 亚洲视频免| 国产成人免费手机在线观看视频| 日韩色图在线观看| 四虎影院国产| 直接黄91麻豆网站| 九色视频最新网址| 免费欧美一级| 久久久久无码国产精品不卡| 亚洲欧美一区在线| 欧美亚洲欧美| 男女猛烈无遮挡午夜视频| 久久久久亚洲精品无码网站| 亚洲精品日产AⅤ| 2019年国产精品自拍不卡| 亚洲国产欧洲精品路线久久| 波多野结衣爽到高潮漏水大喷| 国产av一码二码三码无码| 亚洲第一成年网| 性欧美在线| 国产高清不卡| 亚洲不卡网| 亚洲成人高清无码| 蜜芽一区二区国产精品| 亚洲日韩久久综合中文字幕| 88av在线| 欧美国产综合色视频| 亚洲人网站| 成人福利在线免费观看| 国内精品九九久久久精品| 国产91丝袜| 亚洲人成影院午夜网站| 久久婷婷五月综合97色| 久久久四虎成人永久免费网站| 欧美激情一区二区三区成人| 丁香五月激情图片| 日韩在线欧美在线| 国产 在线视频无码| 国产在线视频自拍| 色有码无码视频| 久久免费观看视频| 热99精品视频| 国产精品美女自慰喷水| www.99精品视频在线播放| 亚洲第一福利视频导航| 国产美女自慰在线观看| 欧美日本在线播放| 国产地址二永久伊甸园| 日韩欧美综合在线制服| 91精品综合| 国产区福利小视频在线观看尤物| 四虎在线观看视频高清无码| 亚洲精品视频免费| 国产精品福利尤物youwu| 国产欧美日韩专区发布| 欧美一级高清免费a| 91原创视频在线| 国产免费a级片| 国产精品一区在线观看你懂的| 国产精品九九视频| 午夜影院a级片| 亚洲国产日韩视频观看| 在线99视频| 国产高清在线观看91精品| 欧美色综合久久| 欧美日韩专区| 成人免费午夜视频| 18禁黄无遮挡网站| 精品视频第一页| 国产成人亚洲精品色欲AV| 国产精品成人一区二区| 色老头综合网| 美女被操91视频| 欧美精品一区在线看| 99久久精品国产综合婷婷| a毛片基地免费大全| 在线观看免费国产| 成人在线欧美| 亚洲精品日产AⅤ| A级毛片无码久久精品免费| 亚洲,国产,日韩,综合一区| 亚洲日本中文字幕天堂网| 69av在线|