最新的毛片基地免费,国产国语一级毛片,免费国产成人高清在线电影,中天堂国产日韩欧美,中国国产aa一级毛片,国产va欧美va在线观看,成人不卡在线

基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法

文檔序號:41946995發(fā)布日期:2025-05-16 14:04閱讀:6來源:國知局
基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法

本發(fā)明涉及自動化編譯,尤其涉及一種基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法。


背景技術(shù):

1、粗粒度可重構(gòu)陣列(coarse-grained?reconfigurable?array,cgra)是一種具有通用處理器的靈活性和專用集成電路高效性的計算架構(gòu)。cgra的一般流程主要有兩個大的步驟:一是數(shù)據(jù)流圖的抽取,二是數(shù)據(jù)流圖的映射和配置生成。cgra的編譯開始的輸入源代碼可以是通用高級語言(如c++)或者領(lǐng)域特定語言(domain-specific?language,dsl)來描述任務(wù)信息,后續(xù)根據(jù)軟件和硬件進(jìn)行代碼分離。一般來說,cgra適合執(zhí)行循環(huán)執(zhí)行的代碼,因此劃分的目標(biāo)便是將循環(huán)執(zhí)行任務(wù)的代碼作為硬件代碼,其余部分代碼作為軟件代碼,經(jīng)過編譯得到通用處理器可執(zhí)行文件,硬件代碼則需要前端處理、代碼變換及優(yōu)化,然后得到的優(yōu)化代碼再執(zhí)行存儲空間分配和時域/空域劃分。經(jīng)歷上述的一系列轉(zhuǎn)換后,得到的優(yōu)化中間表達(dá)式形式需要進(jìn)行任務(wù)調(diào)度和控制模塊生成后,需要通過最終的中間表示(intermediate?representation,ir)生成出數(shù)據(jù)流圖,得到的數(shù)據(jù)流圖需要和硬件描述信息文件共同作為映射模塊的輸入。

2、cgra的端到端編譯主要分為兩個部分,即前端代碼的劃分、變化、優(yōu)化、調(diào)度映射與后端的調(diào)度與映射。針對前端部分,粗粒度可重構(gòu)領(lǐng)域的現(xiàn)有技術(shù)方案僅僅針對特定應(yīng)用采用手動?progma標(biāo)注的方式對相應(yīng)需要加速的內(nèi)核代碼進(jìn)行標(biāo)注,前端標(biāo)注的內(nèi)核代碼經(jīng)過構(gòu)架編譯器的框架系統(tǒng)(low?level?virtual?machine,llvm)前端處理得到相應(yīng)的中間代碼,然后中間代碼會被轉(zhuǎn)換為數(shù)據(jù)流圖,輸入到相應(yīng)的cgra映射器中,映射得到相應(yīng)的配置信息。但手動progma標(biāo)注需要程序員耗費更大的精力進(jìn)行代碼編輯,并且只是針對標(biāo)注的內(nèi)核代碼生成數(shù)據(jù)流圖,而cgra調(diào)度大都是以循環(huán)作為基本單元,由于手動標(biāo)注的方式都是將每個標(biāo)注代碼作為獨立的內(nèi)核代碼進(jìn)行卸載,忽略了主機(jī)側(cè)代碼和cgra內(nèi)核側(cè)代碼的數(shù)據(jù)傳輸和鏈接。


技術(shù)實現(xiàn)思路

1、本發(fā)明提供一種基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法,用以解決現(xiàn)有技術(shù)中在cgra的端到端編譯時,手動progma標(biāo)注方式標(biāo)注需要加速的內(nèi)核代碼,不僅代碼編輯過程耗時耗力,而且忽略主機(jī)側(cè)代碼和cgra內(nèi)核側(cè)代碼的數(shù)據(jù)傳輸和鏈接,無法有效發(fā)揮cgra加速性能的問題。

2、本發(fā)明提供一種基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法,方法包括如下步驟:

3、將待編譯編程代碼轉(zhuǎn)換為mlir的優(yōu)化中間表示,并通過cgra數(shù)據(jù)流算子將所述優(yōu)化中間表示轉(zhuǎn)換為前端數(shù)據(jù)流,所述前端數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu)是多個層次化數(shù)據(jù)流的樹形結(jié)構(gòu),所述層次化數(shù)據(jù)流是根據(jù)所述待編譯編程代碼中的嵌套循環(huán)結(jié)構(gòu)生成的;

4、根據(jù)預(yù)設(shè)的卸載策略將所述前端數(shù)據(jù)流轉(zhuǎn)換為cgra的后端數(shù)據(jù)流;

5、對所述后端數(shù)據(jù)流執(zhí)行自動化的kernel內(nèi)核代碼卸載,得到目標(biāo)內(nèi)核代碼,并基于所述目標(biāo)內(nèi)核代碼生成對應(yīng)的內(nèi)核代碼數(shù)據(jù)流圖;

6、基于去掉kernel內(nèi)核代碼的主機(jī)側(cè)代碼生成主機(jī)對象文件,并根據(jù)所述內(nèi)核代碼數(shù)據(jù)流圖生成對應(yīng)的cgra映射配置信息,

7、對所述主機(jī)對象文件與所述cgra映射配置信息進(jìn)行編譯處理,得到所述待編譯編程代碼的可執(zhí)行文件。

8、在一些實施例中,所述通過cgra數(shù)據(jù)流算子將所述優(yōu)化中間表示轉(zhuǎn)換為前端數(shù)據(jù)流,包括:

9、確定所述優(yōu)化中間表示中的嵌套循環(huán)結(jié)構(gòu);

10、根據(jù)cgra數(shù)據(jù)流算子中的任務(wù)算子,將所述嵌套循環(huán)結(jié)構(gòu)復(fù)用為任務(wù)節(jié)點,其中,所述嵌套循環(huán)結(jié)構(gòu)中的每個同級循環(huán)結(jié)構(gòu)復(fù)用為一個任務(wù)節(jié)點;

11、根據(jù)所述任務(wù)節(jié)點對所述優(yōu)化中間表示進(jìn)行分層,得到對應(yīng)的層次化數(shù)據(jù)流。

12、在一些實施例中,根據(jù)預(yù)設(shè)的卸載策略將所述前端數(shù)據(jù)流轉(zhuǎn)換為cgra的后端數(shù)據(jù)流,包括:

13、對所述前端數(shù)據(jù)流進(jìn)行合法性檢查,當(dāng)所述前端數(shù)據(jù)流滿足預(yù)設(shè)的卸載策略包括的合法條件時,將所述前端數(shù)據(jù)流轉(zhuǎn)換為cgra的后端數(shù)據(jù)流;

14、其中,所述合法條件包括:

15、所述前端數(shù)據(jù)流中kernel內(nèi)核代碼的硬件參數(shù)信息滿足cgra的pe計算資源限制以及i/o端口限制;

16、所述前端數(shù)據(jù)流中kernel內(nèi)核代碼包含的算子滿足cgra的后端硬件支持;

17、所述前端數(shù)據(jù)流中kernel內(nèi)核代碼中,內(nèi)存讀寫操作數(shù)與總計算操作數(shù)的比值不大于預(yù)設(shè)的比例閾值。

18、在一些實施例中,所述cgra的后端數(shù)據(jù)流在cgra中的內(nèi)存訪問方式為雙層訪問模式,所述雙層訪問模式包括:軟件雙層訪問和硬件雙層訪問;

19、所述軟件雙層訪問包括:

20、提取cgra的后端數(shù)據(jù)流對應(yīng)的內(nèi)存子視圖,并根據(jù)所述內(nèi)存子視圖的緩存訪問模式配置cgra的l/s控制器,以將所述內(nèi)存子視圖對應(yīng)的分塊內(nèi)存?zhèn)鬏數(shù)絚gra的高速緩存區(qū)域中;

21、根據(jù)節(jié)點區(qū)域內(nèi)的l/s指令的訪存模式信息,從cgra的高速緩存區(qū)域的分塊內(nèi)存中讀取對應(yīng)數(shù)據(jù)流到cgra的i/o端口中,以進(jìn)行pe運算,其中,所述節(jié)點區(qū)域為存儲所述后端數(shù)據(jù)流中kernel內(nèi)核代碼的區(qū)域;

22、所述硬件雙層訪問包括:

23、將所述后端數(shù)據(jù)流的目標(biāo)內(nèi)存配置信息分別讀取到l/s控制器和cgra的i/o控制的內(nèi)存配置管理模塊;

24、通過cgra從所述內(nèi)存配置管理模塊中讀取所述目標(biāo)內(nèi)存配置信息,并根據(jù)所述目標(biāo)內(nèi)存配置信息配置cgra對應(yīng)的控制器單元,以對所述后端數(shù)據(jù)流進(jìn)行內(nèi)存訪問。

25、在一些實施例中,所述對所述后端數(shù)據(jù)流執(zhí)行自動化的kernel內(nèi)核代碼卸載,得到目標(biāo)內(nèi)核代碼,包括:

26、在所述后端數(shù)據(jù)流中層次化數(shù)據(jù)流的任務(wù)節(jié)點中,確定出代表嵌套循環(huán)結(jié)構(gòu)中最內(nèi)層循環(huán)體代碼的目標(biāo)節(jié)點;

27、對所述目標(biāo)節(jié)點對應(yīng)的kernel內(nèi)核代碼進(jìn)行卸載,得到目標(biāo)內(nèi)核代碼。

28、在一些實施例中,所述基于去掉kernel內(nèi)核代碼的主機(jī)側(cè)代碼生成主機(jī)對象文件,包括:

29、將去掉kernel內(nèi)核代碼的主機(jī)側(cè)代碼,通過mlir下降通道下降為mlir中間表示;

30、將所述mlir中間表示下降為llvm編譯器方言,并將所述llvm編譯器方言轉(zhuǎn)換為llvm編譯器中間表示;

31、基于llvm編譯器中間表示構(gòu)建得到主機(jī)對象文件。

32、本發(fā)明還提供一種基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯裝置,裝置包括如下模塊:

33、轉(zhuǎn)換模塊,用于將待編譯編程代碼轉(zhuǎn)換為mlir的優(yōu)化中間表示,并通過cgra數(shù)據(jù)流算子將所述優(yōu)化中間表示轉(zhuǎn)換為前端數(shù)據(jù)流,所述前端數(shù)據(jù)流的數(shù)據(jù)結(jié)構(gòu)是多個層次化數(shù)據(jù)流的樹形結(jié)構(gòu),所述層次化數(shù)據(jù)流是根據(jù)所述待編譯編程代碼中的嵌套循環(huán)結(jié)構(gòu)生成的;

34、所述轉(zhuǎn)換模塊,還用于根據(jù)預(yù)設(shè)的卸載策略將所述前端數(shù)據(jù)流轉(zhuǎn)換為cgra的后端數(shù)據(jù)流;

35、卸載模塊,用于對所述后端數(shù)據(jù)流執(zhí)行自動化的kernel內(nèi)核代碼卸載,得到目標(biāo)內(nèi)核代碼,并基于所述目標(biāo)內(nèi)核代碼生成對應(yīng)的內(nèi)核代碼數(shù)據(jù)流圖;

36、生成模塊,用于基于去掉kernel內(nèi)核代碼的主機(jī)側(cè)代碼生成主機(jī)對象文件,并根據(jù)所述內(nèi)核代碼數(shù)據(jù)流圖生成對應(yīng)的cgra映射配置信息;

37、編譯模塊,用于對所述主機(jī)對象文件與所述cgra映射配置信息進(jìn)行編譯處理,得到所述待編譯編程代碼的可執(zhí)行文件。

38、本發(fā)明還提供一種電子設(shè)備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機(jī)程序,所述處理器執(zhí)行所述計算機(jī)程序時實現(xiàn)如上述任一種所述基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法。

39、本發(fā)明還提供一種非暫態(tài)計算機(jī)可讀存儲介質(zhì),其上存儲有計算機(jī)程序,該計算機(jī)程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法。

40、本發(fā)明還提供一種計算機(jī)程序產(chǎn)品,包括計算機(jī)程序,所述計算機(jī)程序被處理器執(zhí)行時實現(xiàn)如上述任一種所述基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法。

41、本發(fā)明提供的基于層次數(shù)據(jù)流的粗粒度可重構(gòu)陣列的端到端編譯方法,在前端數(shù)據(jù)流轉(zhuǎn)換為后端數(shù)據(jù)流后,通過cgra實現(xiàn)了自動化的kernel內(nèi)核代碼卸載,并且通過基于嵌套循環(huán)結(jié)構(gòu)的層次化數(shù)據(jù)流來優(yōu)化代碼,能夠處理各種復(fù)雜的大規(guī)模應(yīng)用代碼,無需程序員對需要加速kernel內(nèi)核代碼執(zhí)行代碼編輯工作,程序員無需感知cgra的存在,省時省力。此外,將主機(jī)側(cè)代碼和kernel內(nèi)核代碼先進(jìn)行分離再鏈接編譯,最終生成可執(zhí)行文件,實現(xiàn)了主機(jī)側(cè)和cgra側(cè)的共同優(yōu)化,有效發(fā)揮cgra的優(yōu)化性能。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1