沈鎮(zhèn),柴志雷,柴鎮(zhèn)
(江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,無(wú)錫214122)
一種適于應(yīng)用程序員設(shè)計(jì)FPGA異構(gòu)系統(tǒng)的框架※
沈鎮(zhèn),柴志雷,柴鎮(zhèn)
(江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,無(wú)錫214122)
本文提供一種適于應(yīng)用程序員方便使用FPGA平臺(tái)的框架。它讓用戶從硬件和系統(tǒng)結(jié)構(gòu)中抽離出來(lái),更關(guān)注算法和應(yīng)用程序。這個(gè)框架綜合了Xilinx ISE和Vivado,可以立即使用。在本文的框架上,一個(gè)軟件人員實(shí)現(xiàn)了一個(gè)廣泛使用的特征提取算法,表明本文的框架的確適用于只有少量硬件知識(shí)的應(yīng)用程序員。
FPGA;嵌入式系統(tǒng);特征提取;應(yīng)用程序
眾所周知,在最近的十年,生產(chǎn)商已經(jīng)放棄試圖通過(guò)提高單核頻率來(lái)提升性能,大多數(shù)主流通用處理器性能增長(zhǎng)都借助增加處理器核的數(shù)量。有很多關(guān)于多核的研究調(diào)查[1-2],然而,正如參考文獻(xiàn)[2]中介紹的那樣,現(xiàn)行的并行架構(gòu)在常規(guī)項(xiàng)目(如稠密矩陣計(jì)算)上有好的加速效果,但是大多數(shù)在非常規(guī)項(xiàng)目(如計(jì)算機(jī)視覺(jué))上的表現(xiàn)則差強(qiáng)人意。
FPGA作為一種可編程邏輯設(shè)備,支持不同類型的細(xì)粒度并行,也擅長(zhǎng)處理非常規(guī)項(xiàng)目。它的性能和功耗的優(yōu)勢(shì)經(jīng)常被得到證明[3-4]。但是,當(dāng)前在純FPGA上實(shí)現(xiàn)應(yīng)用依然是一個(gè)困難的工程,即使是對(duì)一個(gè)熟練的工程師而言,因?yàn)樗枰讓覸HDL/Verilog硬件語(yǔ)言和硬件細(xì)節(jié)的知識(shí),而且在實(shí)現(xiàn)應(yīng)用之前,還需要解決設(shè)備驅(qū)動(dòng)的問(wèn)題。
最近出現(xiàn)了很多針對(duì)于FPGA的異構(gòu)SoC,例如Xilinx Zynq-7000[5]和Altera SoC FPGA。異構(gòu)FPGA的一個(gè)優(yōu)勢(shì)就是通用處理器部分可以使FPGA使用者從復(fù)雜的驅(qū)動(dòng)程序里面解脫出來(lái)。另一個(gè)優(yōu)勢(shì)是異構(gòu)FPGA通過(guò)結(jié)合傳統(tǒng)與非傳統(tǒng)的處理器,有潛力達(dá)到更好的能效,這已經(jīng)從理論[7]和實(shí)踐上[8]進(jìn)行了研究。另一方面,HLS (High-Level-Synthesis)[6]技術(shù)到今天已經(jīng)足夠成熟,能夠支持C/C++對(duì)FPGA的設(shè)計(jì)更抽象。例如,Xilinx的Vivado HLS[9]支持程序員使用高級(jí)語(yǔ)言C/C++基于Xilinx FPGA設(shè)計(jì)系統(tǒng)。Zynq SoC加上HLS是當(dāng)前一個(gè)明顯的發(fā)展選擇。然而,盡管異構(gòu)SoC加上HLS提高了系統(tǒng)設(shè)計(jì)的抽象度,并且將用戶從FPGA驅(qū)動(dòng)問(wèn)題中解放出來(lái),但它還是更適合系統(tǒng)程序員。這是因?yàn)槌绦騿T必須掌握算法、架構(gòu)、接口、物理地址分配、軟件驅(qū)動(dòng)的實(shí)現(xiàn)和應(yīng)用軟件的實(shí)現(xiàn)等相關(guān)知識(shí)。這種設(shè)計(jì)流程的缺點(diǎn)是系統(tǒng)程序員一般有更多硬件架構(gòu)和軟件知識(shí),但是對(duì)算法和應(yīng)用了解較少,反之亦然。
HLS對(duì)于FPGA的設(shè)計(jì),可被視為通用計(jì)算機(jī)系統(tǒng)的編譯器。顯然,盡管使用了高級(jí)語(yǔ)言,HLS用戶還是需要直面FPGA。因此,類似于通用處理器的操作系統(tǒng),FPGA中也需要一個(gè)虛擬層通過(guò)屏蔽硬件細(xì)節(jié)進(jìn)一步提高用戶的開(kāi)發(fā)效率。從這個(gè)角度看一些工作已經(jīng)展開(kāi)了。LEAP[11]是一個(gè)FPGA操作系統(tǒng),解決高延遲、抽象交互、多片F(xiàn)PGA的內(nèi)存模型和混合算法。RAMP[1]項(xiàng)目為處理器加速。CoRAM[12]項(xiàng)目側(cè)重在應(yīng)用程序到多級(jí)內(nèi)存的接口和可重構(gòu)邏輯的內(nèi)存模型。更多的相關(guān)工作在參考文獻(xiàn)[10]、[13]、[14]中可見(jiàn)。
本文提出了一個(gè)方便應(yīng)用程序員使用FPGA異構(gòu)平臺(tái)的框架,這個(gè)框架專為嵌入式系統(tǒng)下計(jì)算機(jī)視覺(jué)應(yīng)用做了優(yōu)化。它使用Xilinx Vivado,因此可以立即使用,而不是重新實(shí)現(xiàn)一套開(kāi)發(fā)工具。用本文框架開(kāi)發(fā)應(yīng)用,在CPU和FPGA上都使用C/C++。程序的主入口在CPU端,FPGA在執(zhí)行期間重新配置和調(diào)用。它讓用戶不用處理硬件和結(jié)構(gòu)細(xì)節(jié),讓他們更關(guān)注算法和應(yīng)用程序。通過(guò)實(shí)現(xiàn)一個(gè)常用的計(jì)算機(jī)視覺(jué)特征檢測(cè)算法——SURF (Speeded-Up Robust Features)[15],從一個(gè)應(yīng)用程序員的角度驗(yàn)證了該框架,顯示了這個(gè)框架適用于應(yīng)用程序員使用FPGA異構(gòu)平臺(tái)。
如圖1所示,在FPGA端和CPU端,框架支持應(yīng)用程序員使用C/C++。在FPGA端,算法或者模塊使用C/C++設(shè)計(jì),接著由硬件并行加速,同時(shí)設(shè)計(jì)一個(gè)接口,其包含AMBA和AXI,然后用HLS工具翻譯,綜合生成IP核。這些包含AXI的IP核可以掛載到合適的位置,來(lái)構(gòu)造整個(gè)FPGA部分。用戶的IP核是應(yīng)用程序員面向應(yīng)用開(kāi)發(fā)的,其他模塊(如FPGA驅(qū)動(dòng)I/O和內(nèi)存)都是本文框架提供的一部分。因此,應(yīng)用程序員可以集中關(guān)注如何更好地實(shí)現(xiàn)指定應(yīng)用的算法和模塊。由于在Vivado HLS中提供了C/C++語(yǔ)言支持和優(yōu)化方案,所以算法或者模塊可以由軟件程序員實(shí)現(xiàn)。通過(guò)提前分配固定地址,用戶可以避免在不同的應(yīng)用中每次都要手動(dòng)掛載IP核,這進(jìn)一步使得C/C++程序員不需要太多的架構(gòu)知識(shí)就能夠?yàn)镕PGA開(kāi)發(fā)算法。在CPU端,算法或者模塊也是使用C/C++開(kāi)發(fā),然后在CPU上執(zhí)行。它們編譯和鏈接生成可執(zhí)行文件,在CPU上執(zhí)行的模塊可以通過(guò)帶AXI協(xié)議的接口與FPGA部分進(jìn)行通信。
圖1 框架體系結(jié)構(gòu)
1.1 FPGA端系統(tǒng)設(shè)計(jì)
FPGA端架構(gòu)略——編者注,在當(dāng)前版本的框架中, AXI用作IP核、I/O、FPGA內(nèi)存和處理器之間的互連協(xié)議,AXI4、AXI stream和AXI-lite在FPGA內(nèi)實(shí)現(xiàn)。通過(guò)實(shí)現(xiàn)這個(gè)架構(gòu)和提前分配用戶IP核地址,使IP核、FPGA部分的I/O和內(nèi)存對(duì)處理器是可見(jiàn)的,并且可以像資源一樣管理。分配的IP核地址空間可以映射到虛擬地址,由CPU上的操作系統(tǒng)進(jìn)行管理,使得CPU用戶不用開(kāi)發(fā)設(shè)備驅(qū)動(dòng)來(lái)實(shí)現(xiàn)與IP核的通信,因此,應(yīng)用程序員可以更好地在CPU端開(kāi)發(fā)算法。為了實(shí)現(xiàn)擴(kuò)展性,框架設(shè)計(jì)成可以包含多個(gè)IP核和I/O接口。
1.2 CPU端系統(tǒng)設(shè)計(jì)
為了方便CPU應(yīng)用程序員調(diào)用FPGA上實(shí)現(xiàn)的功能,本文的框架提供了一系列的API,方便他們使用FPGA模塊而不需要實(shí)現(xiàn)一些特定的驅(qū)動(dòng)程序,包括用特定的功能模塊配置FPGA、設(shè)置FPGA模塊參數(shù)與FPGA通信等。
Config(lib_name,bin_file,algorithm_info);用指定的比特流配置FPGA和保存算法信息中FPGA資源相關(guān)的信息,以方便后續(xù)CPU的管理
Algorithm_set(point IPcore,parameter_name,parameter_value);在運(yùn)行之前為FPGA模塊配置算法參數(shù)
FPGA_mem_request(point point_name,data_size); FPGA_mem_release(point point name);請(qǐng)求和釋放一塊FPGA內(nèi)存
ARM_tx(point ARM_source,point FPGA_destination,intncols,intnrows);ARM_rx(point ARM_destination,point FPGA_source,intncols,intnrows);實(shí)現(xiàn)CPU和FPGA之間的內(nèi)存拷貝
Start(point IPcore);參數(shù)配置好之后,啟動(dòng)FPGA模塊
reset(point IPcore);重置FPGA模塊
圖2是一個(gè)C/C++程序員實(shí)現(xiàn)FPGA異構(gòu)系統(tǒng)的設(shè)計(jì)流程圖。使用了本文的框架后,只有虛線以上的部分是需要應(yīng)用者完成的,具體的將在后面介紹。
2.1 FPGA端用C/C++設(shè)計(jì)算法/模塊
為了方便用戶設(shè)計(jì)帶有AXI的算法或者模塊,在本文的框架中提供了一個(gè)模板。用戶可以在該模板中嵌入他們的設(shè)計(jì),然后使用#pragma構(gòu)造帶AXI的接口。算法優(yōu)化需要利用更多的并行性,Vivado HLS提供了一些優(yōu)化方案,如果用戶有一些系統(tǒng)架構(gòu)方面的知識(shí),也可以手動(dòng)進(jìn)行優(yōu)化。需要說(shuō)明的是,Vivado HLS中仿真階段的調(diào)試是不在這里討論的。
圖2 實(shí)現(xiàn)FPGA異構(gòu)系統(tǒng)設(shè)計(jì)流程圖
2.2 算法設(shè)計(jì)后生成IP核
用C/C++實(shí)現(xiàn)的算法/模塊可以由Vivado生成一個(gè)IP核,它在后面可以作為一個(gè)組件,然后,這個(gè)IP核可以通過(guò)AXI掛載在一個(gè)合適的位置。因?yàn)榉峙涞墓潭ǖ刂妨斜砗涂偩€互連的體系結(jié)構(gòu)是提前實(shí)現(xiàn)的,用戶可以在無(wú)需了解太多架構(gòu)知識(shí)前提下,將他們的IP核掛載在指定的位置。
2.3 CPU端用C/C++設(shè)計(jì)算法/模塊
算法或者模塊適合在CPU上執(zhí)行,主程序可以使用C/C++在傳統(tǒng)的軟件開(kāi)發(fā)環(huán)境中實(shí)現(xiàn)。正如第1.2節(jié)介紹的那樣,框架提供的API可以讓用戶配置FPGA、設(shè)置參數(shù)和使用FPGA模塊,因此通過(guò)使用這些API,程序員能夠操作FPGA模塊和解析數(shù)據(jù)。用戶設(shè)計(jì)一個(gè)新的FPGA模塊就需要設(shè)計(jì)一個(gè)API,以方便上層用戶以純軟件的方式調(diào)用FPGA功能。
2.4 為CPU生成可執(zhí)行文件
第二部分的項(xiàng)目由Linux GCC編譯和鏈接生成可執(zhí)行文件,它在執(zhí)行時(shí)可以重新配置FPGA和調(diào)用FPGA模塊。
本文框架的用戶可以分為3類:①同時(shí)在FPGA和CPU上實(shí)現(xiàn)算法;②只在FPGA上實(shí)現(xiàn)算法;③只在CPU上實(shí)現(xiàn)算法。對(duì)于第一種用戶,需要用到上面描述的整個(gè)設(shè)計(jì)流程;對(duì)于第二種用戶,除了實(shí)現(xiàn)IP核,還需要為上層用戶提供軟件API,它具有特定的功能,可以根據(jù)需要配置和操作相應(yīng)的IP核;對(duì)于第三種用戶,如同常規(guī)的軟件程序員,他們?cè)贑PU上使用由第二種用戶提供的API,甚至不知道已經(jīng)用到FPGA模塊。當(dāng)更多的IP核被不同的程序員實(shí)現(xiàn)時(shí),大量的應(yīng)用就能夠通過(guò)傳統(tǒng)的軟件開(kāi)發(fā)程序員在CPU上開(kāi)發(fā)。
正如圖2所示,用本文的框架開(kāi)發(fā)FPGA異構(gòu)平臺(tái)系統(tǒng),可以省略兩個(gè)步驟:構(gòu)造FPGA系統(tǒng)和開(kāi)發(fā)設(shè)備驅(qū)動(dòng)。這兩步都是系統(tǒng)層面上的,需要用戶擁有更多的計(jì)算機(jī)體系結(jié)構(gòu)和操作系統(tǒng)的知識(shí)。此外,FPGA的重構(gòu)是本文框架提供的一個(gè)內(nèi)置函數(shù),對(duì)于一個(gè)應(yīng)用程序員來(lái)說(shuō),它的實(shí)現(xiàn)是極難的。
為了驗(yàn)證本文框架對(duì)于C/C++應(yīng)用程序員的可用性,在本節(jié)中,將展示使用本文框架的SURF特征提取的實(shí)現(xiàn)結(jié)果。
實(shí)驗(yàn)平臺(tái)是一塊用于視覺(jué)計(jì)算的開(kāi)發(fā)板,其他使用SoC的異構(gòu)平臺(tái)也可以使用本文的框架。如圖3所示,開(kāi)發(fā)板包含Xilinx Spartan-6 XC6S LX150T FPGA和三星Cortex-A8 S5PV210 1 GHz的處理器。FPGA和ARM通過(guò)16位的數(shù)據(jù)總線和16位的地址總線連接,地址總線通過(guò)片選信號(hào)可以切換到兩個(gè)不同的地址空間。4個(gè)GPIO用作控制信號(hào),4位SPI和7位GPIO用于處理器配置FPGA,有4個(gè)16位的DDR3與FPGA連接,為視覺(jué)算法計(jì)算提供了高帶寬內(nèi)存訪問(wèn),CMOS和Camera Link兩個(gè)接口提供視頻輸入。
圖3 用于視覺(jué)計(jì)算的ARM--FPGA異構(gòu)開(kāi)發(fā)板
3.1 SURF算法簡(jiǎn)介
SURF[15]是一個(gè)常用的算法,用于局部特征檢測(cè)和描述,它對(duì)圖像縮放、旋轉(zhuǎn)和光照等變化不敏感。SURF主要分為3個(gè)步驟:初始化、特征提取和特征描述。
初始化:這一步主要是做一些準(zhǔn)備工作,例如加載圖片,得到圖像像素點(diǎn)的大小和積分圖。
特征提取:這一步檢測(cè)圖像或者視頻幀里面的特征點(diǎn)。通過(guò)對(duì)圖片進(jìn)行多尺度的縮放,構(gòu)建一個(gè)基于尺度空間的Hessian金字塔,然后對(duì)它進(jìn)行分析。因此,特征點(diǎn)是從不同尺度上得到的,保證了算法對(duì)尺度變化的魯棒性。尺度空間分析后,用非最大抑制在一個(gè)3×3×3的模板里求出最穩(wěn)定點(diǎn),也就是說(shuō),如果某點(diǎn)的值大于模板內(nèi)其他26個(gè)點(diǎn)的值,它就被認(rèn)為是特征點(diǎn)。
特征描述:在這一步,每一個(gè)特征點(diǎn)都求得一個(gè)特征向量用于描述這個(gè)點(diǎn)。首先計(jì)算特征方向以保證算法旋轉(zhuǎn)不變,然后根據(jù)特征方向來(lái)計(jì)算特征向量,接著每一個(gè)特征點(diǎn)都由一個(gè)64維的特征向量表示,最后對(duì)它進(jìn)行歸一化來(lái)保證光照不變性。
3.2 在框架上實(shí)現(xiàn)SURF特征檢測(cè)算法
因?yàn)槌跏蓟蜋z測(cè)階段具有明顯的并行性[16],它們更容易被軟件程序員優(yōu)化。因此,在本文,只在FPGA上實(shí)現(xiàn)了初始化和特征檢測(cè)兩個(gè)步驟。根據(jù)第3部分的設(shè)計(jì)流程圖,用本文的方法實(shí)現(xiàn)SURF的過(guò)程如下:
①用C/C++設(shè)計(jì)SURF檢測(cè)代碼。首先在Xilinx Vivado上建立一個(gè)HLS工程,然后定義SURF檢測(cè)的實(shí)體:
在本文的框架中提供了實(shí)體模板,方便程序員使用。其中hls int32為32位的整型,inout_pix為輸入和輸出緩存的首地址,byte_rdoffset為讀的偏移量,而byte_wroffset為寫的偏移量,rows和cols為圖片的行和列。最后,用C/C++編寫的SURF檢測(cè)模塊就完成了。
②在SURF檢測(cè)模塊中添加AXI4。檢測(cè)模板包含AXI4的接口,可以利用Vivado HLS提供的定義。
下面定義了AXI4-Lite的返回寄存器:
③優(yōu)化SURF檢測(cè)代碼,實(shí)現(xiàn)更好的并行度。軟件人員可以利用Vivado HLS提供的方法優(yōu)化他們的C/C++代碼,而更進(jìn)一步的優(yōu)化則需要手動(dòng)進(jìn)行。
④SURF檢測(cè)模塊生成Pcore,由Vivado中的EDK將SURF代碼生成Pcore。
⑤將Pcore掛載在框架的FPGA端。將上述產(chǎn)生的Pcore掛載到本文框架的FPGA上。由于使用的是Spartan-6的FPGA開(kāi)發(fā)板,所以采用的是Xilinx ISE。本文的框架在FPGA上是一個(gè)已經(jīng)設(shè)計(jì)好的工程,SURF算法的Pcore只需要選擇作為一個(gè)IP模塊,就可以很容易地連接到框架的一個(gè)固定接口上。
⑥生成配置FPGA的比特流,并且為上層用戶設(shè)計(jì)API。當(dāng)將用戶的Pcore連接到FPGA的框架上后,整個(gè)系統(tǒng)可以合成一個(gè)比特流文件,用來(lái)配置FPGA。然后,按照第3部分來(lái)設(shè)計(jì)API,供上層用戶使用。
⑦最后一步在CPU上設(shè)計(jì)模塊,基于API在異構(gòu)平臺(tái)之上構(gòu)建整個(gè)應(yīng)用程序。
3.3 實(shí)驗(yàn)結(jié)果
首先對(duì)SURF在帶有本文框架的FPGA異構(gòu)平臺(tái)、ARM嵌入式平臺(tái)和PC三個(gè)平臺(tái)上的執(zhí)行時(shí)間進(jìn)行了比較,然后比較了SURF算法在帶和不帶有本文框架時(shí),在FPGA上的資源消耗情況,最后驗(yàn)證了圖片的檢測(cè)結(jié)果和帶框架的檢測(cè)結(jié)果的準(zhǔn)確性。除了之前介紹的開(kāi)發(fā)板信息,在實(shí)驗(yàn)中,SURF檢測(cè)算法的工作頻率為62.5 MHz,PC的CPU為3.1 GHz AMD Athlon(tm)II X4 645,DDR3的頻率為1.6 GHz。SURF檢測(cè)算法的相關(guān)參數(shù)如表1所列。需要說(shuō)明的是,在CPU中使用的是浮點(diǎn)型,而在FPGA中使用的是定點(diǎn)型。
表1 配置參數(shù)
3.3.1 運(yùn)算時(shí)間
為了比較不同平臺(tái)上SURF算法的執(zhí)行時(shí)間,實(shí)驗(yàn)用的是同一組圖片。圖4(a)所示是不同平臺(tái)和不同分辨率時(shí)的執(zhí)行時(shí)間,圖4(b)是放大后FPGA和PC的運(yùn)算時(shí)間。從圖中可以看出,FPGA的運(yùn)算速度最快,同時(shí)隨著圖片容量的增大,加速的效果越明顯,主要是因?yàn)椴⑿杏?jì)算時(shí)間的增加是線性的,這也反映了軟件人員使用FPGA的重要性。
SURF檢測(cè)算法在FPGA異構(gòu)平臺(tái)上的總運(yùn)行時(shí)間圖略——編者注,包括圖片從ARM到FPGA的傳輸時(shí)間、計(jì)算時(shí)間和最后把結(jié)果從FPGA傳回ARM的時(shí)間。從圖中可以看到,把圖片從ARM傳到FPGA是最耗時(shí)的。即使認(rèn)為計(jì)算時(shí)間包含這3個(gè)部分,它的時(shí)間也是遠(yuǎn)遠(yuǎn)低于ARM的,如果在FPGA上直接加攝像頭捕捉圖片就可以減去從ARM到FPGA傳輸圖片的耗時(shí)。此外,要避免頻繁地重配FPGA,因?yàn)镾partan-6 XC6SLX150T的重配時(shí)間需要2 s左右。
圖4 不同平臺(tái)上SURF檢測(cè)執(zhí)行時(shí)間
3.3.2 資源消耗
帶本文框架和不帶本文框架時(shí),SURF檢測(cè)算法的資源消耗情況圖略——編者注。從圖中可以看出,框架只占用了非常少的一部分資源,隨著FPGA集成度不斷增大,系統(tǒng)框架所帶來(lái)的資源消耗是可以容忍并且愿意使用的,因?yàn)榭蚣芸梢詷O大方便程序員使用FPGA異構(gòu)平臺(tái)。
3.3.3 檢測(cè)結(jié)果
圖5所示是帶框架的FPGA異構(gòu)平臺(tái)的SURF檢測(cè)算法的檢測(cè)結(jié)果,顯示了帶框架后計(jì)算結(jié)果的準(zhǔn)確性。雖然使用定點(diǎn)計(jì)算會(huì)導(dǎo)致計(jì)算結(jié)果與準(zhǔn)確結(jié)果有一定偏差,但是通過(guò)調(diào)整閾值可以提高結(jié)果的準(zhǔn)確性。
傳統(tǒng)的FPGA的開(kāi)發(fā)方法,對(duì)于軟件程序員來(lái)說(shuō)是非常困難的,尤其是當(dāng)應(yīng)用程序員對(duì)系統(tǒng)結(jié)構(gòu)知識(shí)了解不多的時(shí)候。但是,應(yīng)用程序員又最了解市場(chǎng)和用戶的需求,通用處理器領(lǐng)域,多層結(jié)構(gòu)使應(yīng)用程序員遠(yuǎn)離了底層細(xì)節(jié),提高了生產(chǎn)力,縮短了研發(fā)到投放市場(chǎng)的時(shí)間。隨著集成度越來(lái)越高,FPGA可以容忍來(lái)自系統(tǒng)虛擬化的資源消耗,同時(shí),FPGA也需要虛擬化技術(shù)來(lái)提高資源管理和生產(chǎn)力。本文設(shè)計(jì)的框架可以使得C/C++應(yīng)用程序員更關(guān)注在FPGA和CPU上實(shí)現(xiàn)特定的功能。同時(shí),框架集成到了商業(yè)工具鏈(如Xilinx Vivado)中,可以立即使用。一個(gè)軟件人員在包含此框架的基于FPGA的異構(gòu)平臺(tái)上成功實(shí)現(xiàn)了一個(gè)常用的特征檢測(cè)算法,表明此框架是可用的。下一步,適合軟件人員的調(diào)試方案也將集成到此框架中,此外,其他虛擬化技術(shù)(如虛擬內(nèi)存、多片F(xiàn)PGA的分區(qū)),在LEAP和CoRAM中研究的一些內(nèi)容也會(huì)集成到這個(gè)框架中。
圖5 FPGA加速異構(gòu)平臺(tái)的SURF檢測(cè)結(jié)果
編者注:本文為期刊縮略版,全文見(jiàn)本刊網(wǎng)站www. mesnet.com.cn。
[1]J Wawrzynek M,Oskin C,Kozyrakis D,et al.RAMP:A Research Acceleratorfor Multiple Processors[C]//Technical Report,2006.
[2]U Vishkin.Is Multicore Hardware for General-purpose Parallel Process-ing Broken[J].Communications of ACM,2014, 57(4):35-39.
[3]C Pascoe,A Lawande,H Lam,et al.Recon gurable Supercomputing with Scalable Systolic Arrays and In Stream Control for Wavefront Genomics Processing[C]//Proceedings of International Conference on Engineering of Recon gurable Systems and Algorithms,2010.
[4]X Tian,K Benkrid.High-Performance Quasi-Monte Carlo Financial Simulation:FPGA vs.GPP vs.GPU,ACM Trans. Recong.Techn.Syst.3,4,Article 26(November 2010), 22 pages.
[5]Xilinx.Zynq-7000 SoC[EB/OL].[2016-05].http://www.xilinx.com/products/silicon-devices/soc/zynq-7000/index.htm.
[6]G Martin,G Smith.High-Level Synthesis:Past,Present,and Future[J].IEEE Design and Test of Computers,2009:18-24.
[7]E S Chung,P A Milder,J C Hoe,et al.Single-Chip Heterogeneous Computing:Does the Future Include Custom Logic, FPGAs and GPGPUs[C]//Proceedings of IEEE/ACM International Symposium on Microarchitecture,2010:225-236.
[8]E S Chungy,J D Davisy,J Lee.LINQits:Big Data on Little Clients[C]//Proceedings of ACM/IEEE International Symposium on Computer Architecture,ISCA 2013.
[9]Xilinx.Vivado Design Suite[EB/OL].[2016-05].http:// www.xilinx.com/products/designtools/vivado/.
[10]Altera.Altera SDK for OpenCL Programming Guide[EB/ OL].[2016-05].http://http://www.altera.com/literature/hb/opencl-sdk/.
[11]A Parashar,M Adler,K E Fleming,et al.LEAP:A Virtual Platform Architecture for FPGAs[EB/OL].[2016-05].http://asim.csail.mit.edu/redmine/attachments/76/.
[12]S T Yamazaki,J C Hoe.PyCoRAM:Yet Another Implementation of CoRAM Memory Architecture for Modern FPGA-based Computing[C]//3rd Workshop on the Intersections of Computer Architecture and Recon gurable Logic,2013.
[13]H K H So,R Brodersen.A Uni?ed Hardware/Software Runtime Environment for FPGA-Based Recon?gurable Computers using BORPH[J].ACM Transactions on Embedded Computing Systems(TECS),2008,7(2).
[14]R Kirchgessner,A D George,H Lam.Recon gurable Computing Middleware for Application Portability and Productivity[C]//Proceedings of IEEE International Conference on Application-speci c Systems,Architectures and Processors, 2013:211-218.
[15]H Bay,T Tuytelaars,L V Gool.Surf:Speeded up robust features[C]//Proceedings of European Conference on Computer Vision.
[16]Z Fang,D Yang,W Zhang,et al.A Comprehensive Analysis and Parallelization of an Image Retrieval Algorithm[C]// Proceedings of IEEE International Symposium on Performance Analysis of Systems and Software,2011.
沈鎮(zhèn)(碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng)、圖像處理;柴志雷(副教授),主要研究方向?yàn)榍度胧较到y(tǒng)設(shè)計(jì)技術(shù)、機(jī)器視覺(jué)、FPGA操作系統(tǒng)等;柴鎮(zhèn)(碩士研究生),主要研究方向?yàn)榍度胧较到y(tǒng)、可重構(gòu)計(jì)算。
A Framework for Application Programmers to Design FPGA-based Systems※
Shen Zhen,Chai Zhilei,Chai Zhen
(School of Internet of Things,Jiangnan University,Wuxi 214122,China)
In the paper,the Open HEC(Open Framework for High-Effciency Computing)framework is proposed to provide a design framework for application-level software programmers to use FPGA-based platform.It frees users from hardware and architectural details to let them focus more on algorithms/applications.This framework is integrated with the commercial Xilinx ISE/Vivado to make it to be used immediately.After implementing a widely-used feature detection algorithm on Open HEC from the perspective of software programmers,it shows that this framework is applicable for application programmers with little hardware knowledge.
FPGA;embedded system;feature detection;application program
TP368
:A
薛士然
2016-05-24)