基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)的并行擴(kuò)展方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及軟件領(lǐng)域,尤其涉及一種基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)的并行擴(kuò)展方法。
【背景技術(shù)】
[0002]典型的可重構(gòu)處理器架構(gòu)中包含了一個(gè)通用處理器和一個(gè)或多個(gè)可重構(gòu)處理單元(Reconfigurable Processing Unit, RPU)??芍貥?gòu)處理器可以說(shuō)填補(bǔ)了通用處理器與ASIC之間的空白,兼具了通用處理器的靈活性和ASIC (Applicat1n Specific IntegratedCircuit)的高效性。粗粒度可重構(gòu)架構(gòu)中可重構(gòu)處理單元的數(shù)據(jù)通路寬度大于8位,相對(duì)于細(xì)粒度可重構(gòu)架構(gòu)而言,其有編程方便、編譯速度快等特點(diǎn)。雖然粗粒度可重構(gòu)處理器有如此好的特性,但由于其結(jié)構(gòu)的特殊性,如果沒(méi)有高級(jí)語(yǔ)言與編譯器的支持,對(duì)其編程將會(huì)是一種挑戰(zhàn)。因?yàn)榫幊陶卟粌H要知道通用處理器的編程語(yǔ)言,也要掌握硬件編程語(yǔ)言(如Verilog, VHDL),同時(shí)還要對(duì)底層的硬件有很好的理解。因此,對(duì)粗粒度可重構(gòu)處理器編程比較困難,這將極大地阻礙可重構(gòu)計(jì)算的發(fā)展。
[0003]為了解決對(duì)粗粒度可重構(gòu)處理器編程困難的問(wèn)題,現(xiàn)有技術(shù)中很多面向粗粒度可重構(gòu)處理器的高級(jí)語(yǔ)言已經(jīng)被研宄者提出。這些高級(jí)語(yǔ)言的設(shè)計(jì)方法主要有兩類:
[0004]第一類方法是像SA-C全新地設(shè)計(jì)一套語(yǔ)言,這種方法的缺陷是對(duì)原有代碼的兼容性差、對(duì)程序員的要求高(重新學(xué)習(xí)一門新的語(yǔ)言)、相應(yīng)編譯器的設(shè)計(jì)難度高。
[0005]第二類方法是對(duì)原有高級(jí)語(yǔ)言進(jìn)行并行性擴(kuò)展。該類方法又存在兩種并行性擴(kuò)展方式。第一種方式是像OpenACC和OpenMP那樣,通過(guò)編譯器的預(yù)處理命令來(lái)進(jìn)行高級(jí)語(yǔ)言的擴(kuò)展。這種并行性擴(kuò)展方式的缺點(diǎn)是需要程序員對(duì)預(yù)處理命令有深入理解,而且程序的可讀性差,開(kāi)發(fā)難度大,除此之外,該種擴(kuò)展方式很難實(shí)現(xiàn)復(fù)雜的并行模式。第二種方式是像OpenCL和CUDA那樣在原語(yǔ)言級(jí)基礎(chǔ)上進(jìn)行并行性擴(kuò)展,該種擴(kuò)展方式向下兼容性好,可讀性強(qiáng),對(duì)程序員要求低,編程靈活能實(shí)現(xiàn)更多的并行模式。然而,采用這種方式擴(kuò)展的語(yǔ)言的缺點(diǎn)是只能適用于兩層異構(gòu)結(jié)構(gòu)的計(jì)算架構(gòu),對(duì)于特殊的三層或多層次異構(gòu)結(jié)構(gòu)不再適用。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的技術(shù)問(wèn)題是提出一種基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)的并行擴(kuò)展方法,能夠在三層或多層次異構(gòu)結(jié)構(gòu)的原語(yǔ)言級(jí)基礎(chǔ)上進(jìn)行并行性擴(kuò)展?;诖?,本發(fā)明提供一種基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)的并行擴(kuò)展方法,其中,所述基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)包括用于可重構(gòu)計(jì)算的處理單元陣列、用于控制所述處理單元陣列的協(xié)控制器,以及用于調(diào)度、啟動(dòng)與運(yùn)行所述協(xié)控制器的主控制器,并行擴(kuò)展方法包括
[0007]分別定義運(yùn)行于所述主控制器上的普通函數(shù)、運(yùn)行于所述協(xié)控制器上的任務(wù)函數(shù)以及運(yùn)行于所述處理單元陣列上的子任務(wù)函數(shù),其中所述任務(wù)函數(shù)由所述普通函數(shù)調(diào)用,所述子任務(wù)函數(shù)由所述協(xié)控制器調(diào)用。
[0008]可選的,所述擴(kuò)展方法是在ANSI C語(yǔ)言的基礎(chǔ)上進(jìn)行原語(yǔ)言級(jí)的擴(kuò)展。
[0009]可選的,所述函數(shù)的定義方法通過(guò)添加關(guān)鍵字的形式來(lái)實(shí)現(xiàn)。
[0010]可選的,任務(wù)函數(shù)的調(diào)用在程序執(zhí)行過(guò)程中包括資源申請(qǐng)、實(shí)參傳遞、可執(zhí)行文件傳遞以及協(xié)控制器啟動(dòng)控制等步驟。
[0011]可選的,子任務(wù)函數(shù)的調(diào)用在程序執(zhí)行過(guò)程中包括資源申請(qǐng)、實(shí)參傳遞、配置信息傳遞以及處理單元啟動(dòng)控制等步驟。
[0012]可選的,所述主控制器、協(xié)控制器以及處理單元陣列的內(nèi)存互相獨(dú)立。
[0013]可選的,所述任務(wù)函數(shù)和子任務(wù)函數(shù)的實(shí)參傳遞為隱式傳遞。
[0014]可選的,所述主存儲(chǔ)器與所述共享存儲(chǔ)器之間實(shí)際操作數(shù)據(jù)與計(jì)算結(jié)果的傳遞為顯式傳遞。
[0015]可選的,所述任務(wù)函數(shù)與所述子任務(wù)函數(shù)的調(diào)用為異步調(diào)用。
[0016]可選的,所述普通函數(shù)與所述任務(wù)函數(shù)中均包含同步函數(shù),分別用于同步所述協(xié)控制器與所述處理單元陣列進(jìn)行的異步操作。
[0017]本發(fā)明提供的基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)的并行擴(kuò)展方法中,所述基于多層次異構(gòu)結(jié)構(gòu)的可重構(gòu)架構(gòu)包括用于可重構(gòu)計(jì)算的處理單元陣列、用于控制所述處理單元陣列的協(xié)控制器,以及用于調(diào)度、啟動(dòng)與運(yùn)行所述協(xié)控制器的主控制器,面向上述可重構(gòu)架構(gòu),本發(fā)明的擴(kuò)展方法將ANSI C基礎(chǔ)上擴(kuò)展并定義三類函數(shù):普通函數(shù)、任務(wù)函數(shù)與子任務(wù)函數(shù),相互之間能實(shí)現(xiàn)靈活調(diào)用,因此能充分實(shí)現(xiàn)復(fù)雜的并行模式,有效挖掘多層次異構(gòu)結(jié)構(gòu)可重構(gòu)架構(gòu)的并行計(jì)算能力。
【附圖說(shuō)明】
[0018]圖1為本發(fā)明一實(shí)施例所述可重構(gòu)架構(gòu)的結(jié)構(gòu)示意圖;
[0019]圖2為本發(fā)明一實(shí)施例的主控制器、協(xié)控制器以及處理單元陣列中的程序示意圖;
[0020]圖3為本發(fā)明一實(shí)施例所述的程序計(jì)算流程示意圖。
【具體實(shí)施方式】
[0021]以下結(jié)合附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。根據(jù)下面說(shuō)明和權(quán)利要求書(shū),本發(fā)明的優(yōu)點(diǎn)和特征將更清楚。需說(shuō)明的是,附圖均采用非常簡(jiǎn)化的形式且均使用非精準(zhǔn)的比率,僅用以方便、明晰地輔助說(shuō)明本發(fā)明實(shí)施例的目的。
[0022]本發(fā)明所述的可重構(gòu)架構(gòu)(處理器計(jì)算模型圖)如圖1所示,該可重構(gòu)處理器架構(gòu)主要包括了一個(gè)主控制器、多個(gè)可重構(gòu)處理單元(Reconfigurable Process Unit, RPU)、主存儲(chǔ)器、直接存儲(chǔ)訪問(wèn)單元(Direct Memory Access, DMA)和系統(tǒng)總線構(gòu)成。其中主控制器主要用于執(zhí)行程序中不適合RPU處理的串行代碼并負(fù)責(zé)兩個(gè)RPU的調(diào)度、啟動(dòng)與運(yùn)行,RI3U則負(fù)責(zé)計(jì)算程序中一些計(jì)算密集的可并行代碼。RI3U主要由I個(gè)負(fù)責(zé)可重構(gòu)處理單元陣列(Processing Element Array, PEA)控制的協(xié)控制器、4個(gè)負(fù)責(zé)可重構(gòu)計(jì)算的PEA和4個(gè)用于數(shù)據(jù)存儲(chǔ)的共享存儲(chǔ)器(Shared Memory, SM)所組成,如圖1中的擴(kuò)展圖所示。協(xié)控制器主要是用來(lái)負(fù)責(zé)搬運(yùn)4個(gè)PEA計(jì)算所需的數(shù)據(jù)與配置信息,控制PEA的啟動(dòng)、運(yùn)行與終止。
[0023]這種特殊的異構(gòu)粗粒度可重構(gòu)架構(gòu)中包括了三部分計(jì)算模塊,分別是主控制器、協(xié)控制器和PEA,三者的內(nèi)存空間都是獨(dú)立的,不能直接進(jìn)行相互訪問(wèn)。其中,所述主存儲(chǔ)器作為主控制器的內(nèi)存,SM作為協(xié)控制器的內(nèi)存。主控制器與協(xié)控制器之間、主控制器與PEA之間以及協(xié)控制器與PEA之間的數(shù)據(jù)傳遞都是通過(guò)DMA來(lái)完成的。這三部分計(jì)算模塊共同組成了一個(gè)三層次的可重構(gòu)異構(gòu)架構(gòu)。
[0024]原有的可重構(gòu)處理器并行計(jì)算語(yǔ)言不適用該種特定的三層次異構(gòu)可重構(gòu)架構(gòu)。本發(fā)明面向這種粗粒度可重構(gòu)器提出了一種并行標(biāo)記方法。這種并行標(biāo)記方法是在ANSI C語(yǔ)言的基礎(chǔ)上進(jìn)行的原語(yǔ)言級(jí)的擴(kuò)展,其包括了函數(shù)標(biāo)記、函數(shù)調(diào)用、內(nèi)存操作擴(kuò)展與同步擴(kuò)展。其中所有并行標(biāo)記擴(kuò)展都會(huì)以“―gr_XXXX”的形式出現(xiàn)。
[0025]I)函數(shù)標(biāo)記:對(duì)應(yīng)計(jì)算模型中包括了三部分的計(jì)算模塊,本發(fā)明將ANSI C的函數(shù)分為三類。第一類函數(shù)為普通函數(shù),其代碼將會(huì)在主控制器上運(yùn)行;第二類函數(shù)為任務(wù)函數(shù),其代碼將會(huì)在協(xié)控制器上運(yùn)行;第三類函數(shù)為子任務(wù)函數(shù),其代碼將會(huì)映射到PEA上運(yùn)行。本發(fā)明將會(huì)以關(guān)鍵字的形式來(lái)區(qū)分這三類函數(shù)。為了保持與原有ANSI C的兼容性,這些關(guān)鍵字嵌入到ANSI C文法中非終結(jié)符“funct1n-specifier”的產(chǎn)生式內(nèi),如公式(I)所示。任務(wù)函數(shù)的定義由函數(shù)說(shuō)明符“—gr_task”來(lái)標(biāo)記,子任務(wù)函數(shù)的定義由函數(shù)說(shuō)明符“―gr_SubtaSk”來(lái)標(biāo)記。同時(shí)對(duì)于任務(wù)函數(shù)與子任務(wù)函數(shù)定義時(shí)有一定約束,其函數(shù)不能有返回值,即函數(shù)返回類型為“void”。
[0026]funct1n-specifier:
[0027]inline
[0028]I _gr_task
[0029]I—gr_subtask (I)
[0030]2)函數(shù)調(diào)用:本發(fā)明所定義的三類函數(shù)將分別在三種計(jì)算模塊中運(yùn)行,普通函數(shù)在主控制器上運(yùn)行,任務(wù)函數(shù)在協(xié)控制器上運(yùn)行,而子任務(wù)函數(shù)則映射到PEA上運(yùn)行。由于RPU由主控制器調(diào)用,PEA由協(xié)控制器調(diào)用,因此對(duì)應(yīng)到函數(shù)調(diào)用上便有任務(wù)函數(shù)由普通函數(shù)調(diào)用,子任務(wù)函數(shù)由協(xié)控制器調(diào)用。任務(wù)函數(shù)與子任務(wù)函數(shù)的調(diào)用語(yǔ)法分別如公式(2)與公式(3)所示:
[0031]TaskFunc (Args) (2)
[0032]SubTaskFunciPEA_NOi(Args) (3)
[0033]TaskFunc與SubTaskFunc分別表示在協(xié)控制器上運(yùn)行的任務(wù)函數(shù)名與在PEA上運(yùn)行的子任務(wù)函數(shù)名;PEA_N0表示所調(diào)用PEA的標(biāo)記號(hào)(0-3),Args表示函數(shù)實(shí)參。任務(wù)函數(shù)與子任務(wù)函數(shù)的調(diào)用形式都是異步調(diào)用,即普通函數(shù)調(diào)用了任務(wù)函數(shù)后,不需要等待任務(wù)函數(shù)執(zhí)行完便可繼續(xù)執(zhí)行別的操作;任務(wù)函數(shù)調(diào)用了子任務(wù)函數(shù)后,也不需要等待子任務(wù)函數(shù)執(zhí)行完便可繼續(xù)執(zhí)行別的操作。
[0034]3)內(nèi)存操作擴(kuò)展:本發(fā)明面向的可重構(gòu)架構(gòu)中三部分內(nèi)存空間相互獨(dú)立,相互間的數(shù)據(jù)傳遞都是通過(guò)DMA來(lái)完成,但考慮到對(duì)用戶的友好性,本發(fā)明讓這種數(shù)據(jù)傳輸盡可能以隱式傳遞的形式呈現(xiàn)。主存儲(chǔ)器與協(xié)控制器內(nèi)存空間之間的數(shù)據(jù)傳遞是隱式的數(shù)據(jù)傳遞,其傳遞是通過(guò)任務(wù)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的,傳遞的是任務(wù)函數(shù)的實(shí)參;同樣協(xié)控制器內(nèi)存與PEA共享內(nèi)存之間的數(shù)據(jù)傳遞也是隱式的,其傳遞是通過(guò)子任務(wù)函數(shù)調(diào)用來(lái)實(shí)現(xiàn)的,傳遞的是子任務(wù)函數(shù)的實(shí)參。而一個(gè)例外是,PEA實(shí)際操作數(shù)據(jù)及計(jì)算結(jié)果在主存儲(chǔ)器與共享內(nèi)存之間的傳遞是通過(guò)任務(wù)函數(shù)顯式調(diào)用內(nèi)存操作函數(shù)來(lái)實(shí)現(xiàn)的,其調(diào)用語(yǔ)法如公式(4)和公式(5)所示,其中公式(4)是將數(shù)據(jù)從主存儲(chǔ)器拷貝至標(biāo)記號(hào)為SMId的共享內(nèi)存,公式
(5)是將數(shù)據(jù)從標(biāo)記號(hào)為SMId的共享內(nèi)存拷貝至主存儲(chǔ)器:
[0035]void__gr_MemcpyGtoS (int SMId, unsigned