本發(fā)明涉及異構(gòu)多核可編程系統(tǒng)領(lǐng)域,主要涉及在單顆現(xiàn)場可編程門陣列(fpga,field-programmablegatearray)芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的設(shè)計(jì)方法、內(nèi)存分配、編程模型設(shè)計(jì)與開放運(yùn)算語言(opencl,opencomputinglanguage)支持,更具體地說,涉及一種在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)及其內(nèi)存配置方法和計(jì)算單元的編程方法。
背景技術(shù):
異構(gòu)多核可編程系統(tǒng)是將結(jié)構(gòu)、功能、功耗、運(yùn)算性能不同的多個(gè)核心處理器集成在單顆芯片上,通過任務(wù)剖析與核心調(diào)度,將不同的任務(wù)分配給相應(yīng)的核心,使每個(gè)核心物盡其用,這種組織方式實(shí)現(xiàn)了資源的最佳化配置,且能降低整體功耗。由于在fpga平臺上實(shí)現(xiàn)異構(gòu)多核系統(tǒng),其能量效率方面表現(xiàn)較高,且fpga的硬件可編程性可以使開發(fā)者方便的搭建符合自身需求的數(shù)字系統(tǒng)。目前,常見的異構(gòu)模型有同種cpu+fpga上的硬件加速模塊組成,或單個(gè)cpu+單個(gè)dsp組成異構(gòu)系統(tǒng)。前者的硬件加速模塊,由于是在系統(tǒng)設(shè)計(jì)之初就確定了功能,設(shè)計(jì)完成后不能實(shí)現(xiàn)靈活的可編程性。后者其實(shí)還是在用單個(gè)核心做串行的數(shù)據(jù)運(yùn)算和處理,未達(dá)到并行處理的要求,不能充分展現(xiàn)系統(tǒng)的高效性。
在異構(gòu)多核可編程系統(tǒng)中,內(nèi)存的分配使用是關(guān)鍵問題。如何保證多個(gè)計(jì)算單元無沖突的訪問內(nèi)存,當(dāng)前有設(shè)計(jì)是給計(jì)算單元在fpga芯片上實(shí)現(xiàn)本地?cái)?shù)據(jù)和指令存儲器。然而fpga內(nèi)部的存儲器資源非常稀缺,因而限制了各個(gè)計(jì)算單元的本地存儲器大小,導(dǎo)致數(shù)據(jù)和指令空間的不夠用,這種本地存儲的方式在多計(jì)算單元的設(shè)計(jì)中尤為矛盾。而且在主機(jī)需要結(jié)果數(shù)據(jù)時(shí),還需要從原有本地存儲中拷貝數(shù)據(jù)到主機(jī)內(nèi)存空間,數(shù)據(jù)搬移上產(chǎn)生了時(shí)間的消耗。
此外,異構(gòu)多核可編程系統(tǒng)的編程較復(fù)雜,有研究者提出“統(tǒng)一編程,分開編譯”的編程模型,對于此種模型,需要為從核的變量和函數(shù)都添加特定的標(biāo)記,然后再設(shè)計(jì)相應(yīng)的分離解析程序。此種方式其實(shí)加大了編程的復(fù)雜性,并不能保證分離解析程序的準(zhǔn)確性、可靠性。
opencl是一個(gè)為異構(gòu)平臺編寫程序的框架,此異構(gòu)平臺可由cpu,gpu或其他類型的處理器組成?,F(xiàn)在已成為行業(yè)規(guī)范。amd和nvidia都發(fā)布了支持opencl的圖形處理器及軟件開發(fā)工具包(sdk,softwaredevelopmentkit)。美國fpga廠商英特爾和賽靈思公司,也推出了使支持opencl的開發(fā)板卡,用以實(shí)現(xiàn)cpu+fpga的異構(gòu)并行計(jì)算。微軟在數(shù)據(jù)中心使用fpga加速計(jì)算任務(wù)。但是這只能針對于特定的板卡,開發(fā)者對在fpga內(nèi)部的系統(tǒng)不可見也無法修改。
針對現(xiàn)有技術(shù)存在的上述問題,業(yè)內(nèi)需要開發(fā)一種具有大容量內(nèi)存的異構(gòu)多核可編程系統(tǒng),以及與之配套的內(nèi)存優(yōu)化配置方法和計(jì)算單元的編程方法。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明要解決的技術(shù)問題在于,針對現(xiàn)有異構(gòu)多核可編程系統(tǒng)存在系統(tǒng)效率低、存儲空間小的缺陷,提供一種具有大容量存儲空間的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)及其內(nèi)存配置方法。
本發(fā)明要解決另一技術(shù)問題在于,針對現(xiàn)有異構(gòu)多核可編程系統(tǒng)存在的系統(tǒng)編程復(fù)雜的缺陷,提供一種在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中計(jì)算單元的編程方法。
本發(fā)明解決其技術(shù)問題所采用的技術(shù)方案是:構(gòu)造一種在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng),包括一個(gè)主機(jī)和多個(gè)計(jì)算單元,還包括,
作為系統(tǒng)內(nèi)存配置給所述多個(gè)計(jì)算單元共享的外部ddr存儲器,其中為每個(gè)計(jì)算單元分配有一塊存儲空間,每個(gè)所述存儲空間用于存儲相應(yīng)計(jì)算單元的數(shù)據(jù)和指令。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中,
每個(gè)所述計(jì)算單元在外部ddr存儲器所分配的所述存儲空間的起始地址和空間大小是可動態(tài)配置的。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中,
為每個(gè)計(jì)算單元分配的所述存儲空間劃分為相互對稱的第一區(qū)域和第二區(qū)域,使得能夠交替使用和配置所述第一區(qū)域和第二區(qū)域,以節(jié)省等待配置時(shí)間。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中,
包括直接內(nèi)存訪問(dma,directmemoryaccess)模塊,用于進(jìn)行主機(jī)存儲器與各計(jì)算單元的存儲空間的數(shù)據(jù)相互搬移。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中,
所述主機(jī)包括采用microblaze軟核的片上可編程系統(tǒng),所述計(jì)算單元包括or1200軟核;且所述主機(jī)通過axi4lite互聯(lián)模塊與所述直接內(nèi)存訪問模塊及各計(jì)算單元通信。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中,
所述系統(tǒng)包括ddr控制器,其通過axi4interconnect總線互聯(lián)模塊與所述主機(jī)、直接內(nèi)存訪問模塊及各計(jì)算單元通信連接;
計(jì)算單元包括協(xié)議轉(zhuǎn)換模塊(wb2axi模塊),以實(shí)現(xiàn)wishbone協(xié)議到axi協(xié)議的轉(zhuǎn)換;且
計(jì)算單元設(shè)置有讀指令、讀數(shù)據(jù)、寫數(shù)據(jù)接口,計(jì)算單元的訪存axi總線,連接到所述axi4interconnect總線互聯(lián)模塊,由所述ddr控制器負(fù)責(zé)訪存。
本發(fā)明解決其技術(shù)問題所采用的另一技術(shù)方案是:提供一種如上所述在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)的內(nèi)存配置方法,其特征在于,所述方法包括:
主機(jī)為各個(gè)計(jì)算單元配置計(jì)算任務(wù);
根據(jù)所配置的計(jì)算任務(wù)在外部ddr存儲器中為各計(jì)算單元分配相應(yīng)的存儲空間,其包括為計(jì)算單元所分配的外部存儲器的起始地址和空間大小,并為各計(jì)算單元及其相應(yīng)的區(qū)域設(shè)置編號。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的內(nèi)存配置方法中,包括:
輸入要配置的計(jì)算單元及其相應(yīng)的區(qū)域的編號,以確定將要配置的目標(biāo)區(qū)域的地址;
判斷所確定的目標(biāo)區(qū)域是否處于空閑狀態(tài)和非配置狀態(tài);
當(dāng)所述目標(biāo)區(qū)域處于空閑及非配置狀態(tài)下,設(shè)置直接內(nèi)存訪問模塊,以啟動主機(jī)與該計(jì)算單元之間的數(shù)據(jù)傳輸。
在本發(fā)明所述的在單顆fpga芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的內(nèi)存配置方法中,包括在計(jì)算單元的存儲空間的第一區(qū)域和第二區(qū)域進(jìn)行切換的方法,其中包括:
輸入要切換區(qū)域的計(jì)算單元及其相應(yīng)的區(qū)域的編號,以確定將要切換的目標(biāo)區(qū)域地址;
檢查所述計(jì)算單元當(dāng)前是否處于空閑狀態(tài),
當(dāng)所述計(jì)算單元是空閑的狀態(tài)下,確定目標(biāo)區(qū)域的配置狀態(tài);
當(dāng)所述目標(biāo)區(qū)域?yàn)榉桥渲脿顟B(tài)時(shí),設(shè)置區(qū)域切換。
本發(fā)明解決其技術(shù)問題所采用的又一技術(shù)方案是:提供一種如上所述在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中計(jì)算單元的編程方法,其特征在于,所述方法包括:
為每個(gè)計(jì)算單元?jiǎng)?chuàng)建其自己的工程目錄,以使多個(gè)計(jì)算單元的程序開發(fā)彼此獨(dú)立;且所述多個(gè)計(jì)算單元共用同一鏈接腳本,用makefile文件直接調(diào)用其編譯工具鏈。
實(shí)施本發(fā)明,具有以下有益效果:
相比于在fpga芯片上實(shí)現(xiàn)本地?cái)?shù)據(jù)和指令存儲器的方法,本發(fā)明提出更靈活、高效、可靠的內(nèi)存分配方式。在外部ddr存儲器中,為每個(gè)計(jì)算單元分配一塊存儲空間,用于數(shù)據(jù)和指令的存儲。首先,將計(jì)算單元的指令和數(shù)據(jù)存儲器都分配在外部的ddr存儲器上,不會出現(xiàn)因芯片內(nèi)部存儲資源稀缺,而導(dǎo)致指令和數(shù)據(jù)存儲容量不夠的情況。
其次,每個(gè)計(jì)算單元的存儲地址可靈活配置,其大小也可根據(jù)實(shí)際所需,進(jìn)行差異化配置。不同于固定大小和固定地址的分配方式,通常為保證最大情況的內(nèi)存所需,會配置一塊較大的空間,然而并不是每個(gè)計(jì)算單元都需要。特別是在當(dāng)每個(gè)計(jì)算單元的性能、執(zhí)行任務(wù)差異較大的設(shè)計(jì)中,靈活配置的方法可節(jié)省不必要的空間浪費(fèi)。
計(jì)算單元的數(shù)據(jù)和指令都存儲在外部ddr存儲器,這也方便了主機(jī)對各個(gè)計(jì)算單元的配置。為優(yōu)化主機(jī)的內(nèi)存配置,提高系統(tǒng)吞吐率,本發(fā)明技術(shù)方案中引入直接內(nèi)存訪問(dma,directmemoryaccess)功能模塊,主機(jī)在內(nèi)存配置期間可執(zhí)行其他任務(wù)。另外,當(dāng)計(jì)算任務(wù)完成時(shí),主機(jī)可直接從相應(yīng)內(nèi)存空間讀取處理數(shù)據(jù)。而對于在芯片內(nèi)實(shí)現(xiàn)存儲的設(shè)計(jì),主機(jī)對計(jì)算單元配置和讀取數(shù)據(jù)時(shí),都需要經(jīng)過主機(jī)存儲器與芯片內(nèi)部存儲的搬移操作。
每個(gè)計(jì)算單元的運(yùn)行指令可由主機(jī)配置,為提高配置效率和可靠性,將每個(gè)計(jì)算單元的存儲器分成對稱的兩個(gè)區(qū)。在效率方面,當(dāng)計(jì)算單元正使用存儲器某一區(qū)運(yùn)行時(shí),主機(jī)可配置存儲器的另一區(qū)。兩個(gè)區(qū)交替工作,對比于只有一個(gè)存儲區(qū)域的設(shè)計(jì),本處理方式能節(jié)省等待配置時(shí)間。在可靠性方面,另一個(gè)區(qū)還可作為配置的備份。對稱區(qū)域的設(shè)計(jì),對于動態(tài)更新計(jì)算單元的程序也更為快捷。
在編程模型設(shè)計(jì)與opencl支持方面,針對多核cpu平臺的編程、編譯復(fù)雜性,結(jié)合上述的內(nèi)存優(yōu)化模型,編寫腳本提高編程效率,自動化編譯流程。本發(fā)明提出一種能簡化分開編程、編譯的模型,保證程序的可移植性。設(shè)計(jì)用腳本直接調(diào)用其編譯工具鏈,確保了編譯準(zhǔn)確,同時(shí)方便對每個(gè)計(jì)算單元的任務(wù)進(jìn)行調(diào)試分析。
綜合上述,本發(fā)明提供了一種在單顆fpga芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的內(nèi)存優(yōu)化方法、編程模型設(shè)計(jì)與opencl支持,能優(yōu)化內(nèi)存分配,提高系統(tǒng)吞吐率,加快開發(fā)驗(yàn)證速度,使軟硬件設(shè)計(jì)更加靈活。
附圖說明
下面將結(jié)合附圖及實(shí)施例對本發(fā)明作進(jìn)一步說明,附圖中:
圖1是根據(jù)本發(fā)明一實(shí)施例的異構(gòu)多核可編程系統(tǒng)的結(jié)構(gòu)框圖;
圖2是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的多個(gè)計(jì)算單元(圖1中cu,computingunit)從ddr分配存儲空間的方式的示意圖;
圖3是根據(jù)本發(fā)明實(shí)施例的計(jì)算單元訪問外部ddr時(shí)的訪問地址產(chǎn)生方式的示意圖;
圖4是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的各個(gè)計(jì)算單元存儲空間內(nèi)部區(qū)域分布的示意圖;
圖5是根據(jù)本發(fā)明實(shí)施例的計(jì)算單元的內(nèi)存區(qū)域配置的流程圖;
圖6是根據(jù)本發(fā)明實(shí)施例的在計(jì)算單元的對稱內(nèi)存區(qū)域切換的流程圖;
圖7是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的自動創(chuàng)建工作空間腳本生成的文件示意圖。
具體實(shí)施方式
本發(fā)明構(gòu)思一種在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng),其采用兩種不同架構(gòu)的cpu來實(shí)現(xiàn)一個(gè)主機(jī)和多個(gè)計(jì)算單元。主機(jī)負(fù)責(zé)任務(wù)分配和結(jié)果處理,多個(gè)計(jì)算單元負(fù)責(zé)并行化處理任務(wù)。使得計(jì)算單元的任務(wù)是在線可配置的,可實(shí)現(xiàn)單指令多數(shù)據(jù)或多指令多數(shù)據(jù)的任務(wù)。
本發(fā)明中,采用計(jì)算單元的內(nèi)部數(shù)據(jù)和指令緩存器+外部ddr存儲器實(shí)現(xiàn)動態(tài)可配置的本地?cái)?shù)據(jù)和指令存儲器。這既提供了每個(gè)計(jì)算單元夠用的數(shù)據(jù)和指令存儲空間,又不會降低訪問存儲的速度。
在本發(fā)明自主提出的編程、編譯模型基礎(chǔ)上,通過實(shí)現(xiàn)軟件開發(fā)工具包,使在fpga芯片上設(shè)計(jì)的本異構(gòu)多核可編程系統(tǒng)能支持opencl規(guī)范。
圖1是根據(jù)本發(fā)明一實(shí)施例的異構(gòu)多核可編程系統(tǒng)的結(jié)構(gòu)框圖。
如圖1所示,本發(fā)明在單顆fpga芯片10內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)包括:
一個(gè)主機(jī)11,用于任務(wù)分配和結(jié)果處理;
多個(gè)計(jì)算單元121、122……12n(n為正整數(shù),代表計(jì)算單元的個(gè)數(shù),n的最大值取決于axi互聯(lián)模塊所能容納的計(jì)算單元總個(gè)數(shù)),用于并行化處理任務(wù);
外部ddr存儲器20,用于作為系統(tǒng)內(nèi)存配置給多個(gè)計(jì)算單元121、122……12n共享,其中為每個(gè)計(jì)算單元分配有一塊存儲空間(如圖2所示),每個(gè)存儲空間用于存儲相應(yīng)計(jì)算單元的數(shù)據(jù)和指令;這種將計(jì)算單元的指令和數(shù)據(jù)存儲器都分配在外部的ddr存儲器上的技術(shù)方案,不會出現(xiàn)因芯片內(nèi)部存儲資源稀缺,而導(dǎo)致指令和數(shù)據(jù)存儲容量不夠的情況;
直接內(nèi)存訪問(dma,directmemoryaccess)模塊13,用于進(jìn)行主機(jī)存儲器與各計(jì)算單元的存儲空間的數(shù)據(jù)相互搬移;
axi4lite互聯(lián)模塊14,用于主機(jī)與直接內(nèi)存訪問模塊、各個(gè)計(jì)算單元之間的通信信道;
axi4interconnect總線互聯(lián)模塊15,用于主機(jī)、直接內(nèi)存訪問模塊及各計(jì)算單元與ddr控制器16之間的通信信道;以及
ddr控制器16,其通過axi4interconnect總線互聯(lián)模塊15與主機(jī)、直接內(nèi)存訪問模塊及各計(jì)算單元通信連接,用于負(fù)責(zé)對外部ddr存儲器20的訪存。
在一些實(shí)施例中,主機(jī)11包括以microblaze軟核為核心模塊加上其他子模塊所組成的片上可編程系統(tǒng),計(jì)算單元包括or1200軟核和協(xié)議轉(zhuǎn)換模塊(wb2axi模塊);且主機(jī)11通過axi4lite互聯(lián)模塊14與直接內(nèi)存訪問模塊13及各計(jì)算單元121、122……12n通信。其中,協(xié)議轉(zhuǎn)換模塊(wb2axi模塊)用以實(shí)現(xiàn)wishbone協(xié)議到axi協(xié)議的轉(zhuǎn)換。計(jì)算單元設(shè)置有讀指令、讀數(shù)據(jù)、寫數(shù)據(jù)接口,計(jì)算單元的訪存axi總線,連接到axi4interconnect總線互聯(lián)模塊15,由ddr控制器負(fù)責(zé)訪存。
在圖1所示的實(shí)施例中,主機(jī)11采用microblaze軟核組成的片上可編程系統(tǒng),設(shè)計(jì)16個(gè)從機(jī)做計(jì)算單元,計(jì)算單元包括or1200軟核和協(xié)議轉(zhuǎn)換模塊(wb2axi模塊)。在該實(shí)施例中,計(jì)算單元是由or1200為核心組成的系統(tǒng),or1200的指令和數(shù)據(jù)總線均為wishbone協(xié)議,要讓or1200直接訪問外部ddr,需要實(shí)現(xiàn)wishbone協(xié)議到axi協(xié)議的轉(zhuǎn)換,如圖1中計(jì)算單元(cu)部分的wb2axi模塊,實(shí)現(xiàn)通信協(xié)議的轉(zhuǎn)換。具體實(shí)施方案中,為實(shí)現(xiàn)axi總線協(xié)議訪問外部ddr,分別給每個(gè)計(jì)算單元設(shè)置了讀指令、讀數(shù)據(jù)、寫數(shù)據(jù)接口,計(jì)算單元的訪存axi總線,連接到axi4interconnect總線互聯(lián)模塊15,由ddr控制器16負(fù)責(zé)訪存。
由于主機(jī)要配置各計(jì)算單元的計(jì)算任務(wù),讀取結(jié)果,故主機(jī)會多次訪問外部ddr存儲器,且多為大量連續(xù)的存儲區(qū)域。為提高系統(tǒng)吞吐率,本發(fā)明的技術(shù)方案中,加入直接內(nèi)存訪問模塊13。主機(jī)設(shè)置好直接內(nèi)存訪問模塊后,該模塊會完成主機(jī)存儲器空間與各計(jì)算單元存儲器空間的數(shù)據(jù)相互搬移,而不需主機(jī)參與數(shù)據(jù)的讀寫操作。
圖2是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的多個(gè)計(jì)算單元從ddr分配存儲空間的方式的示意圖。
如圖2所示,為計(jì)算單元所分配的外部存儲器的起始地址和空間大小,都可由主機(jī)通過axi4lite模塊配置。例如:有一個(gè)容量為1gb的外部ddr存儲器,其地址范圍為0x00000000~0x3fffffff。配置計(jì)算單元(cu0)121的起始地址為cu0_addr_str,空間大小為cu0_addr_size,則計(jì)算單元121訪存的地址范圍為cu0_addr_str~cu0_addr_str+cu0_addr_size-1。其他計(jì)算單元以此類推。
圖3是根據(jù)本發(fā)明實(shí)施例的計(jì)算單元訪問外部ddr時(shí)的訪問地址產(chǎn)生方式的示意圖。
如圖3,計(jì)算單元(cu)的指令和數(shù)據(jù)總線均是wishbone協(xié)議,wishbone總線地址由從機(jī)(本發(fā)明中指cu)地址(指示訪問的從機(jī)設(shè)備地址)和訪問地址(指示該從機(jī)設(shè)備的內(nèi)部地址)組成。計(jì)算單元實(shí)際訪問的ddr地址是由基地址+偏移地址組成:由主機(jī)所配置的起始地址做基地址,or1200的指令或數(shù)據(jù)總線的wishbone地址的訪問地址段做偏移地址。
在本發(fā)明的一些實(shí)施例中,每個(gè)計(jì)算單元121、122……12n在外部ddr存儲器20所分配的存儲空間的起始地址和空間大小是可動態(tài)配置的。
具體地說,每個(gè)計(jì)算單元的存儲地址可靈活配置,其大小也可根據(jù)實(shí)際所需,進(jìn)行差異化配置。不同于固定大小和固定地址的分配方式,通常為保證最大情況的內(nèi)存所需,會配置一塊較大的空間,然而并不是每個(gè)計(jì)算單元都需要。特別是在當(dāng)每個(gè)計(jì)算單元的性能、執(zhí)行任務(wù)差異較大的設(shè)計(jì)中,靈活配置的方法可節(jié)省不必要的空間浪費(fèi)。
圖4是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的各個(gè)計(jì)算單元存儲空間內(nèi)部區(qū)域分布的示意圖。在一些實(shí)施例中,本發(fā)明為每個(gè)計(jì)算單元分配的存儲空間劃分為相互對稱的第一區(qū)域和第二區(qū)域,使得能夠交替使用和配置所述第一區(qū)域和第二區(qū)域,以節(jié)省等待配置時(shí)間。
如圖4,本實(shí)施例中的指令和數(shù)據(jù)均為統(tǒng)一編址。這是一種將計(jì)算單元的存儲空間配置為16mb的實(shí)例,將其分成等分對稱的兩個(gè)區(qū),兩個(gè)區(qū)本質(zhì)是一樣的。設(shè)計(jì)中使程序段的排列、用作數(shù)據(jù)存儲的區(qū)域劃分均相同,在計(jì)算單元的程序編譯中也是使用的同一鏈接腳本。在訪問一區(qū)時(shí),基地址為所配置的計(jì)算單元的起始地址;在訪問二區(qū)時(shí),基地址為所配置的計(jì)算單元的起始地址+0x800000。每個(gè)區(qū)域的劃分是前4mb空間用來做程序的運(yùn)行空間,接下來的1mb空間留做備用,最后的3mb空間,程序中可通過指針訪問,用于結(jié)果數(shù)據(jù)的存儲。對稱區(qū)域的設(shè)計(jì),對于動態(tài)更新計(jì)算單元的程序也更為方便。例如:當(dāng)一區(qū)的任務(wù)執(zhí)行完畢,主機(jī)直接切換該計(jì)算單元的基地址到二區(qū),計(jì)算單元即可繼續(xù)執(zhí)行重新分配的計(jì)算任務(wù),而且不會污染一區(qū)任務(wù)的結(jié)果數(shù)據(jù)。
本發(fā)明在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)的內(nèi)存配置方法如下:首先,主機(jī)為各個(gè)計(jì)算單元配置計(jì)算任務(wù)。然后,主機(jī)根據(jù)所配置的計(jì)算任務(wù)在外部ddr存儲器中為各計(jì)算單元分配相應(yīng)的存儲空間,其包括為計(jì)算單元所分配的外部存儲器的起始地址和空間大小,并為各計(jì)算單元及其相應(yīng)的區(qū)域設(shè)置編號。
圖5是根據(jù)本發(fā)明實(shí)施例的計(jì)算單元的內(nèi)存區(qū)域配置的流程圖,是在計(jì)算單元的存儲空間為對稱內(nèi)存區(qū)域的實(shí)施例中,實(shí)現(xiàn)內(nèi)存配置的基本流程。輸入要配置的計(jì)算單元以及區(qū)域編號,便可確定要配置的地址。在該區(qū)域空閑的狀態(tài)下,通過設(shè)置直接內(nèi)存訪問模塊,啟動數(shù)據(jù)傳輸。
如圖5所示,在單顆fpga芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的內(nèi)存配置方法,包括:
開始配置,在步驟510,輸入要配置的計(jì)算單元及其相應(yīng)的區(qū)域的編號;
在步驟520,確定將要配置的目標(biāo)區(qū)域的地址;
在步驟530,判斷所確定的目標(biāo)區(qū)域是否在運(yùn)行(即非空閑狀態(tài)),
如果處于運(yùn)行狀態(tài),則執(zhí)行步驟535,返回正在運(yùn)行狀態(tài);
如果處于空閑狀態(tài);則執(zhí)行步驟540,判斷是否處于配置狀態(tài);
如果處于配置狀態(tài),則執(zhí)行步驟560,返回正在進(jìn)行的配置狀態(tài);
如果未在配置狀態(tài),則執(zhí)行步驟550,標(biāo)記當(dāng)前為配置狀態(tài),并設(shè)置直接內(nèi)存訪問模塊,以啟動主機(jī)與該計(jì)算單元之間的數(shù)據(jù)傳輸。
圖6是根據(jù)本發(fā)明實(shí)施例的在計(jì)算單元的對稱內(nèi)存區(qū)域切換的流程圖。在區(qū)域切換前,需要檢查計(jì)算單元當(dāng)前的運(yùn)行狀態(tài),執(zhí)行任務(wù)是否完成,并確定目標(biāo)區(qū)域的配置狀態(tài)。
如圖6所示,在計(jì)算單元的存儲空間的第一區(qū)域和第二區(qū)域進(jìn)行切換的方法包括:
開始切換,在步驟610,輸入要切換區(qū)域的計(jì)算單元及其相應(yīng)的區(qū)域的編號,以確定將要切換的目標(biāo)區(qū)域地址;
在步驟620,檢查該計(jì)算單元當(dāng)前是否處于運(yùn)行狀態(tài);
如果處于運(yùn)行狀態(tài),則執(zhí)行步驟625,返回正在運(yùn)行狀態(tài);
如果處于空閑狀態(tài);則執(zhí)行步驟630,判斷是否處于配置狀態(tài);
如果處于配置狀態(tài),則執(zhí)行步驟635,返回正在進(jìn)行的配置狀態(tài);
如果未在配置狀態(tài),則執(zhí)行步驟640,標(biāo)記當(dāng)前為運(yùn)行且非配置狀態(tài);
之后,執(zhí)行步驟650,設(shè)置區(qū)域切換。
在步驟660,切換成功后返回切換成功,結(jié)束切換。
圖7是根據(jù)本發(fā)明實(shí)施例的異構(gòu)多核可編程系統(tǒng)的自動創(chuàng)建工作空間腳本生成的文件示意圖。
如圖7,這是一種在每個(gè)計(jì)算單元分配相同空間大小時(shí)的工作空間目錄結(jié)構(gòu)。針對此情況,多個(gè)計(jì)算單元可以共用同一鏈接腳本(即如下所列的自動化編譯腳本中的ram.ld文件)。每個(gè)計(jì)算單元有自己的工程目錄,這使得多計(jì)算單元的程序開發(fā)彼此獨(dú)立,避免相互干擾。在獨(dú)立程序開發(fā)的前提下,通過設(shè)計(jì)一套符合opencl規(guī)范的軟件開發(fā)工具包,使之支持并行計(jì)算編程模型。
本發(fā)明一些實(shí)施例中,在單顆fpga芯片內(nèi)實(shí)現(xiàn)的異構(gòu)多核可編程系統(tǒng)中計(jì)算單元的編程方法包括:為每個(gè)計(jì)算單元?jiǎng)?chuàng)建其自己的工程目錄,以使多個(gè)計(jì)算單元的程序開發(fā)彼此獨(dú)立;且所述多個(gè)計(jì)算單元共用同一鏈接腳本,用makefile文件直接調(diào)用其編譯工具鏈,從而為其編譯自己的工程目錄。
其中,makefile配置文件(makefilemkconfig)用于1)控制對哪幾個(gè)計(jì)算單元(cu)進(jìn)行編譯;2)調(diào)用各自的編譯工作鏈;3)涉及多makefile文件的情況下,即主機(jī)配置文件(host_makefile)、第n+1計(jì)算單元配置文件(cu_n_makefile),由總的makefile來控制。
在一實(shí)施例中,本發(fā)明在單顆fpga芯片內(nèi)實(shí)現(xiàn)異構(gòu)多核可編程系統(tǒng)的自動化編譯腳本如下:
本發(fā)明的技術(shù)關(guān)鍵點(diǎn)包括其采用的內(nèi)存優(yōu)化方法,其中包括將多個(gè)計(jì)算單元的數(shù)據(jù)和指令存儲器分配到外部ddr存儲器上,多個(gè)計(jì)算單元共享一個(gè)外部存儲器,每個(gè)計(jì)算單元在外部存儲器分配的起始地址和空間大小可實(shí)現(xiàn)動態(tài)配置的方法。如圖3中所示,由主機(jī)軟件來配置訪問ddr的基地址(即為該起始地址),和可以訪問的空間大小(即可訪問的地址范圍)。
另外,針對各個(gè)計(jì)算單元存儲器內(nèi)部的具體分布情況,本發(fā)明采用對稱的兩個(gè)區(qū),包括區(qū)域的交替使用和配置,以及為提升可靠性方面的備份策略,動態(tài)更新計(jì)算單元對稱區(qū)域的計(jì)算任務(wù)均為本發(fā)明的技術(shù)關(guān)鍵點(diǎn)。
以上實(shí)施例只為說明本發(fā)明的技術(shù)構(gòu)思及特點(diǎn),其目的在于讓熟悉此項(xiàng)技術(shù)的人士能夠了解本發(fā)明的內(nèi)容并據(jù)此實(shí)施,并不能限制本發(fā)明的保護(hù)范圍。凡跟本發(fā)明權(quán)利要求范圍所做的均等變化與修飾,均應(yīng)屬于本發(fā)明權(quán)利要求的涵蓋范圍。