本發(fā)明涉及一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法,使用FPGA進(jìn)行科學(xué)運(yùn)算和圖像處理領(lǐng)域,特別是涉及一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核并行算法的方法。
背景技術(shù):
目前,F(xiàn)PGA和GPGPU已經(jīng)成為科學(xué)運(yùn)算和圖像處理的一個重要組成部分,兩者均能夠提供高度的并行運(yùn)算性能。在設(shè)計和開發(fā)流程上,F(xiàn)PGA開發(fā)和GPGPU開發(fā)有著本質(zhì)的區(qū)別,F(xiàn)PGA開發(fā)使用HDL語言VHDL或者Verilog;GPGPU使用Nvidia公司的CUDA語言,且這兩種語言無法交替使用。
使用Nvidia公司的CUDA編程模型,可實(shí)現(xiàn)高度并行任務(wù)的處理,尤其在科學(xué)運(yùn)算和圖像分析領(lǐng)域,CUDA編程模型提供了一套通用的科學(xué)運(yùn)算和圖像處理的應(yīng)用程序接口(API)供用戶直接調(diào)用,使得程序員在應(yīng)用中輕易完成細(xì)粒度和粗粒度并行算法。
HDL語言則是另一種不同與CUDA的計算機(jī)語言,HDL語言要求用戶對底層數(shù)字電路有很強(qiáng)的理論基礎(chǔ)和專業(yè)知識,編寫算法需要熟練的編程基礎(chǔ)和數(shù)字信號處理基礎(chǔ),開發(fā)周期和難度遠(yuǎn)遠(yuǎn)大于CUDA編程模型。
最后,GPGPU能效比較低,GPGPU一般少則上百瓦,多則數(shù)百瓦,可以達(dá)到數(shù)TGFlops的浮點(diǎn)能力,而FPAG只需要十幾瓦,即可達(dá)到與GPGPU相當(dāng)?shù)母↑c(diǎn)能力。在對與功率要求小,且處理能力強(qiáng)的應(yīng)用場合,如無人系統(tǒng)和便攜式工作站,F(xiàn)PGA的優(yōu)勢則會得到很大的體現(xiàn)。
為此,在使用者層面,希望能用簡單的方法實(shí)現(xiàn)復(fù)雜的功能,這里提及一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法,從而達(dá)到在FPGA上運(yùn)行具有高度并行運(yùn)算能力的CUDA內(nèi)核。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的為解決背景技術(shù)所描述的問題,提供[一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法]。
其硬件平臺連接為:將安裝有Vivado設(shè)計開發(fā)環(huán)境的計算機(jī),通過FPGA仿真器,與FPGA硬件平臺相連;本發(fā)明選用的FPGA仿真器為Xilinx DLC9G USB 仿真器,其具備Xilinx全系FPGA在線仿真及執(zhí)行文件下載功能。將該仿真器一端接計算機(jī)USB端口,另一端接FPGA JTAG端口。FPGA硬件開發(fā)平臺選用Xilinx VC707開發(fā)平臺,F(xiàn)PGA型號為Virtex-7 XC7VX485T。
在上述硬件開發(fā)平臺之上,開發(fā)步驟如下:
(1)在安裝有CUDA編程模型的計算機(jī)中,找到所需要的并行算法,并提取CUDA開發(fā)環(huán)境中C/C++并行算法工程文件.cpp以及支持庫文件.h。(2)將算法工程文件以及庫文件導(dǎo)入至Vivado HDL設(shè)計開發(fā)環(huán)境中(3)根據(jù)實(shí)際需求,修改和調(diào)試算法函數(shù)。(4)將調(diào)試好的函數(shù)以及算法工程文件進(jìn)行編譯和綜合,生成RTL文件。(5)將RTL文件導(dǎo)入至頂層Verilog/VHDL設(shè)計,進(jìn)行邏輯綜合、生成FPGA可執(zhí)行文件.bin。(6)通過下載線將可執(zhí)行文件下載至FPGA運(yùn)行,完成從CUDA C/C++并行算法到FPGA的移植工作。
其中,對于更具實(shí)際需求,修改和調(diào)試算法函數(shù)包括以下步驟:
(1)根據(jù)實(shí)際需求,修改CUDA算法接口函數(shù),使其與應(yīng)用相匹配。(2)將修改后的算法通過仿真命令,在Vivado HDL中進(jìn)行仿真運(yùn)行,檢查輸入值與輸出值是否與應(yīng)用相匹配。(3)將調(diào)試后的算法,進(jìn)行編譯和綜合。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例,下面將對實(shí)施例中所需要使用的附圖做簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明提供的一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法的流程圖;
圖中100.CUDAC/C++并行算法代碼,圖中200.FCUDA編譯器,圖中300.Vivado HLS 工具,圖中400.生成RTL描述語言,圖中500.與頂層語言相結(jié)合進(jìn)行綜合,生成FPGA可執(zhí)行文件。
圖2為本發(fā)明中硬件連接框圖;
圖中將仿真器2一端接計算機(jī)1 USB端口,另一端接FPGA JTAG 4端口。FPGA硬件開發(fā)平臺3選用Xilinx VC707開發(fā)平臺,F(xiàn)PGA型號為Virtex-7 XC7VX485T。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下,所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)范圍。
本發(fā)明的核心是提供一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法及系統(tǒng)。
為了使本技術(shù)領(lǐng)域的人員更好地理解本發(fā)明方案,下面結(jié)合附圖和具體實(shí)施方式對本發(fā)明作進(jìn)一步的詳細(xì)說明。
實(shí)施例1
圖1為本發(fā)明提供的一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法的流程圖。如圖1所示,包括:在FPGA開發(fā)流程中,使用了Xilinx公司的HLS工具Vivado HDL,并且將CUDA內(nèi)核的并行算法映射到FPGA,從而來加速FPGA的并行運(yùn)算能力。
本發(fā)明的一種在FPGA上實(shí)現(xiàn)的CUDA內(nèi)核的方法,其特征在于,所述的方法依次包括如下步驟:
1)安裝有Vivado HLS工具的計算機(jī)通過仿真器與FPGA相連。仿真器一端接計算機(jī)USB端口,另一端接FPGA JTAG端口;
2)運(yùn)行Vivado HLS工具并新建工程;
3)將CUDA內(nèi)核的C/C++并行算法導(dǎo)入至Vivado HLS;
4)調(diào)試仿真并通過交叉編譯和邏輯綜合;
5)生成FPGA RTL文件;
6)頂層Verilog/VHDL設(shè)計、編譯生成FPGA可執(zhí)行文件。
步驟3),依次包括以下內(nèi)容:
1)CUDA內(nèi)核的并行算法為C語言或者C++語言,提取安裝有CUDA軟件開發(fā)環(huán)境的對應(yīng)并行算法;
2)在Vivado HLS工具中導(dǎo)入該并行算法:C/C++工程文件(.cpp)以及庫文件(.h)。
步驟4)依次包括以下內(nèi)容:
1)根據(jù)實(shí)際算法需求,調(diào)試導(dǎo)入的C/C++工程中對應(yīng)函數(shù);
2)在Vivado HLS環(huán)境中編譯以及綜合該算法。
在圖1中,CUDA代碼100.輸入至FCUDA編譯器200.,由FCUDA編譯器200.進(jìn)行轉(zhuǎn)換和編譯,生成Vivado HLS 工具適用的C代碼,再由Vivado HLS 工具將C代碼進(jìn)行綜合300,生成FPGA RTL描述400,最后,通過頂層設(shè)計和綜合編譯,生成FPGA可執(zhí)行文件500。