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