一種可重構編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法
【技術領域】
[0001] 本發(fā)明屬于可重構編譯器優(yōu)化領域,尤其涉及高層次綜合過程中的,一種可重構 編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法。
【背景技術】
[0002] 面向CPU-FPGA異構加速平臺的可重構自動化編譯工具已經(jīng)成為了可重構計算領 域研究的熱點。相對于多核處理器的高功耗及并行粒度過低、ASIC芯片成本過于昂貴,基 于CPU-FPGA的異構加速系統(tǒng)更加適應嵌入式系統(tǒng)中對性能、功耗、成本均比較苛刻的計算 密集型應用,例如圖像壓縮、模式識別、數(shù)字信號處理等應用,兼顧了通用計算的靈活性和 定制計算的高效性,計算密集型應用中85%左右的程序執(zhí)行時間都集中在其中多層循環(huán)部 分。如何實現(xiàn)循環(huán)流水迭代間啟動間距的自動優(yōu)化技術是可重構編譯器研究的難點是可重 構編譯器研究的難點。
[0003] 正是基于以上問題,本發(fā)明提出了一種可重構編譯器中循環(huán)流水迭代間啟動間距 優(yōu)化方法,并在基于ARM-FPGA異構加速平臺的細粒度可重構編譯器ASCRA上展開相關設計 與驗證。
【發(fā)明內容】
[0004] 本發(fā)明的目的是提供一種能夠有效改善可重構編譯器對可重構計算應用的部署 效率的,可重構編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法
[0005] -種可重構編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法,包括以下步驟,
[0006] 步驟一:對計數(shù)類循環(huán)進行RAW數(shù)據(jù)依賴關系分析,得到RAW_DDA模型:RAW_DDA =(statement, I, [Array], [NEXT]),其中RAW_DDA表示循環(huán)流水迭代間數(shù)據(jù)依賴關系分析 結果,statement表示多層循環(huán)程序中的一個循環(huán)體_〃(石)的聲明;I表示循環(huán)體索 弓丨變量U 1彡r彡m ; [Array]是與索引變量U目關的RAW數(shù)據(jù)依賴關系涉及到的數(shù)組集 合;[NEXT]表示statement聲明中所有迭代間RAW數(shù)據(jù)依賴關系集合;
[0007] 步驟二:遍歷RAW_DDA模型中的[NEXT]集合,對依賴關系next中的Load指令按 照ALAP調度算法進行流水段延后;
[0008] 步驟三:遍歷RAW_DDA模型中的[NEXT]集合,對依賴關系next中的Store指令按 照ASAP調度算法進行流水段提前;
[0009] 步驟四:實現(xiàn)啟動間距優(yōu)化。
[0010] 本發(fā)明一種可重構編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法,還可以包括:
[0011] 計數(shù)類循環(huán)描述為:索引變量向量其中m為多層循環(huán)的最 大深度;L〇〇p(r)表示索引變量為L的循環(huán),其中1彡r彡m,循環(huán)體用表示, ?,·={ΙνΙτΙ3,一?:>,表示循環(huán)體由索引向量石控制,索引變量I r= (Pr, qr, Θ r),其中,pjp qr 分別表示索引變量L的初值和終值,且是(I u 12, . . .,L i)的整值函數(shù),Θ ^表示循環(huán)變量 乙的增量且Θ1^為常數(shù)。
[0012] 有益效果:
[0013] 在現(xiàn)有細粒度可重構編譯器中,例如:Vivado HLS、ROCCC、ImpulseC等,尚不具備 針對啟動間距的自動優(yōu)化技術,往往需要使用人工輸入指導語句方法控制循環(huán)并行流水硬 件結構自動映射所需啟動間距信息的生成,因此不能充分發(fā)揮并行流水硬件結構的性能, 同時編譯效率以及質量都不甚理想。本發(fā)明是針對細粒度可重構編譯器ASCRA而開發(fā)的一 種循環(huán)流水啟動間距的自動優(yōu)化算法,可以有效改善可重構編譯器對可重構計算應用的部 署效率,還能有效提高循環(huán)流水硬件結構的性能。
[0014] 本發(fā)明所提出的一種可重構編譯器中循環(huán)流水迭代間啟動間距優(yōu)化方法,在面 向ARM-FPGA異構加速平臺的可重構編譯器ASCRA上進行了部署實施,并且針對測試集 PolyBench-3. 2中的經(jīng)典循環(huán)程序進行了實驗和分析,對比本發(fā)明所提出的循環(huán)流水迭代 間啟動間距優(yōu)化方法與現(xiàn)有HLS工具采用的制導語句控制方式,測試循環(huán)程序在FPGA硬件 中流水執(zhí)行時消耗的時鐘節(jié)拍數(shù),并分析隨著循環(huán)程序迭代空間的變大,本發(fā)明方法對循 環(huán)程序性能加速效果的變化。
[0015] 本發(fā)明采用jacobi-lD、jacobi_2D、Seidel_2D三個經(jīng)典循環(huán)程序進行測試。其 中,jacobi-lD是一個單層循環(huán),索引變量I 1= (0,N,1),jacobi_2D和Seidel_2D是一個 兩層循環(huán),循環(huán)索引變量向量均為心電,這三個測試程序的共同特征是不同 深度循環(huán)的索引變量迭代次數(shù)均是常量。與采用制導語句控制方式的現(xiàn)有HLS工具相比, 本發(fā)明方法能夠有效減少循環(huán)流水執(zhí)行時的時鐘節(jié)拍數(shù)。實驗結果如表1所示,N表示循 環(huán)索引變量迭代次數(shù),表1中的測試程序不同深度循環(huán)的索引變量迭代次數(shù)均為N,clock cycles表示循環(huán)流水執(zhí)行時消耗的時鐘節(jié)拍數(shù)。根據(jù)如圖7中實驗結果,可以得知,隨著 迭代空間的增大,采用本發(fā)明提出的循環(huán)流水迭代間啟動間距優(yōu)化方法,能夠有效提高具 有常量迭代次數(shù)索引變量的循環(huán)程序的性能,并且能夠保持穩(wěn)定的性能加速比。與采用制 導語句方式的現(xiàn)有HLS工具相比,采用循環(huán)流水跌代間啟動間距優(yōu)化方法的可重構編譯器 ASCRA分別獲得了 20 %、33. 3 %、42. 86 %的穩(wěn)定加速比。
【附圖說明】
[0016] 圖1為啟動間距優(yōu)化實例;圖I (a)為間距向量為(0, 1,4, 1,4, · · ·);圖I (b) 為間距向量為(0, 1,3, 1,3,· · ·);
[0017] 圖2為計數(shù)類多層循環(huán)偽代碼描述;
[0018] 圖3為計數(shù)類循環(huán)偽代碼遞歸描述;
[0019] 圖4為計數(shù)類多層循環(huán)示例代碼;
[0020] 圖5為示例代碼的SCoPs結構;
[0021] 圖6為ASCRA系統(tǒng)架構圖;
[0022] 圖7為索引變量邊界值為常量時實驗結果表;
[0023] 圖8為多層循環(huán)啟動間距優(yōu)化算法。
【具體實施方式】
[0024] 下面將結合附圖對本發(fā)明做進一步詳細說明。
[0025] 在進行多層循環(huán)流水執(zhí)行迭代間啟動間距自動優(yōu)化方法研究的時候,發(fā)現(xiàn)最內層 循環(huán)的執(zhí)行時間對整個循環(huán)性能影響最大,因此本發(fā)明從降低最內層循環(huán)循環(huán)體迭代間啟 動間距向量值方法入手,提出了一種采用流水線調度技術進行啟動間距優(yōu)化的方法,為了 能更加直觀地展示本發(fā)明針對上述問題的改進之處,本部分采用一個多層嵌套循環(huán)的實例 描述問題所在。
[0026] 如附圖1所示,附圖I (a)和附圖I (b)中的RAW數(shù)據(jù)依賴關系均為NEXTa= {A[i+2] - A[i+4],δ = 2},而迭代間流水段延時Aa= 4, Δ b= 3,所得到的迭代間流水 啟動間距向量,?ζ*,(1.1Λ1Λ1Λ .)。通過降低數(shù)組A產(chǎn)生的RAW數(shù)據(jù)依賴關系在 循環(huán)體中所跨過的流水延時,能夠降低循環(huán)流水迭代間啟動間距,有效的提高循環(huán)程序的 數(shù)據(jù)吞吐率。
[0027] 針對這一實例所描述的問題所在,本發(fā)明建立了一套支持對循環(huán)流水迭代間啟動 間距自動優(yōu)化的描述模型。該循環(huán)流水迭代間啟動間距自動優(yōu)化描述模型由四部分組成:
[0028] 1)計數(shù)類多層循環(huán)
[0029] 定義:索引變量向量…,其中m為多層循環(huán)的最大深度;Loop (r)表示索 引變量為L的循環(huán),其中K r < m,循環(huán)體用·病:)表示,…O表示循環(huán)體由索引向 量?控制,索引變量I1= (Ρ? l·,Θ J,其中,P,qj別表示索引變量I』勺初值和終值,且 是(I1, 12, . . .,L D的整值函數(shù),Θ ^表示循環(huán)變量L的增量且Θ ^為常數(shù)。
[0030] 為了建立循環(huán)流水啟動間距信息模型,需要將附圖2所描述的多層循環(huán)Loop抽象 成如附圖3所示多個單層循環(huán)遞歸表示的形式。其中Loop (m)表示最內層循環(huán)。
[0031] 在細粒度可重構編譯器ASCRA中是對中間代碼IR進行數(shù)據(jù)依賴關系分析,將附圖 2所示的高級語言描述形式轉換成LLVM能夠進行分析的數(shù)據(jù)結構,通過LLVM PASS將多層 循環(huán)描述成一種抽象語法樹(Abstract Syntax tree, AST),篩選符合定義1)中所描述限制 條件的計數(shù)類多層循環(huán),實現(xiàn)附圖2到附圖3循環(huán)表示形式的抽象表示。
[0032] 2) SCoPs
[0033] 在本發(fā)明中用SCoPs (Static Control Parts)描述計數(shù)類多層循環(huán)模型中AST數(shù) 據(jù)結構,其定義如下:
[0034] SCoPs 由 context 和一系列聲明 statement 構成一個二元組〈Context, [Statemen t] >。其中context是SCoP約束參數(shù)的集合;每個聲明statement都是一個四元組 〈Name, Domain, Schedule, [Access] >,Statement 的單位是多層循環(huán) Loop 中循環(huán)體,_》了>,其 中l(wèi)<r<m,其中Name表示聲明statement的名稱,是聲明的唯一標識符;Domain是聲明 的迭代域,表示一個statement在多層循環(huán)中的多維迭代空間域,限制了 statement的迭代 范圍;Schedule是多維空間中迭代向量的整型映射,表示迭代空間中statement的迭代向 量;[Access]是聲明中對數(shù)組元素的訪存操作集合,主要包括讀、寫、讀寫三種。
[0035] 本發(fā)明提出的SCoPs數(shù)據(jù)結構基于LLVM開發(fā)的多面體模型分析程序開源軟件 Polly進行設計,由于其能夠準確的對不同深度循環(huán)體中數(shù)組元素訪存操作進行描述,有利 于對計數(shù)類多層循環(huán)迭代間的數(shù)據(jù)依賴關系進行精確分析。例如,附圖4中所示的多層循 環(huán)可以用附圖5所示SCoPs表示,其中,循環(huán)Loop(i)中的循環(huán)體stmt(i) =Loop(j),所以 Statement 只描述了*的聲明,。
[0036] 利用得到的SCoPs數(shù)據(jù)結構可以進行循環(huán)體迭代間數(shù)據(jù)