摘要:可重構(gòu)計(jì)算的研究使用高度靈活的計(jì)算結(jié)構(gòu)進(jìn)行高性能計(jì)算。近年來(lái)采用FPGA器件來(lái)創(chuàng)建可重計(jì)算平臺(tái)的研究大量出現(xiàn)?;诟呒?jí)語(yǔ)言的FPGA編程技術(shù)可以讓軟件工程師擺脫硬件的干擾,致力于算法的實(shí)現(xiàn)。Impulse C語(yǔ)言工具集就是一種對(duì)軟硬件劃分和軟硬件過(guò)程協(xié)同設(shè)計(jì)的相對(duì)簡(jiǎn)單的、基于C語(yǔ)言的方法,它與高效的基于FPGA的硬件編譯器相結(jié)合,形成了一種完整的混合處理器和FPGA實(shí)現(xiàn)的方法。這些工具極大地簡(jiǎn)化了可重構(gòu)部件的設(shè)計(jì)過(guò)程,但是在高效性和電路優(yōu)化等方面跟手工設(shè)計(jì)仍有差距。
關(guān)鍵詞:可重構(gòu);Impulse C;FPGA;高性能計(jì)算
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):1009-3044(2009)04-0991-03
The Research on Reconfigurable Computing Programming Technology Based on Impulse C
MAO Xing-quan
(Jiangnan Institute of Computing Technology, Wuxi 214083,China)
Abstract: The research on reconfigurable computing takes up with highly flexible architecture for high performance computing. Reconfigurable platforms with FPGA instruments appear largely in recently years. The high-level programming technology of FPGA let the software engineers break away from the trouble of hardware and concentrate on the algorithmic functionality. The Impulse C development kit is a relatively simple and C-based approach which is used for hardware/software co-development. Combining with the hardware compilers, these tools form a whole processor/FPGA mixed means, and greatly simplify the design process of the reconfigurable component. But still, there is some gaps about efficiency and optimization need to fill.
Key words: reconfigurable; impulse C; FPGA; High performance computing
1 可重構(gòu)計(jì)算技術(shù)
1.1 基于FPGA的可重構(gòu)計(jì)算
隨著電子、通信、科學(xué)計(jì)算等應(yīng)用領(lǐng)域的不斷發(fā)展,對(duì)高性能信息處理系統(tǒng)的需求日益增加。傳統(tǒng)的基于通用處理器通過(guò)軟件編程實(shí)現(xiàn)基本算法的方法和基于硬件的方法都無(wú)法完全滿足這些需求。而可重構(gòu)計(jì)算技術(shù)結(jié)合了通用微處理器的靈活性和專用ASIC的高效性,為滿足各領(lǐng)域?qū)Ω咝阅苡?jì)算的需求提供了一條可能的途徑。
可重構(gòu)計(jì)算(Reconfigurable Computing)是指,在軟件的控制下,利用系統(tǒng)中的可重用資源,根據(jù)應(yīng)用的需要重新構(gòu)造一個(gè)新的計(jì)算平臺(tái),達(dá)到接近專用硬件設(shè)計(jì)的高性能??[1]。而具有可重新配置電路功能特性的FPGA(Field-Programmable Gate Array)的出現(xiàn),正好滿足了可重構(gòu)計(jì)算系統(tǒng)的需求。目前的可重構(gòu)計(jì)算系統(tǒng)主要是基于FPGA的,以便針對(duì)不同的計(jì)算需求構(gòu)造不同的硬件結(jié)構(gòu),實(shí)現(xiàn)高效的并行計(jì)算,提高電子信息系統(tǒng)的實(shí)時(shí)處理能力、自適應(yīng)能力、可靠性、降低硬件系統(tǒng)的規(guī)模和功耗等等。
1.2 可重構(gòu)系統(tǒng)的體系結(jié)構(gòu)
為了取得上述性能上的優(yōu)勢(shì),并且支持廣泛的應(yīng)用,可重構(gòu)系統(tǒng)一般由通用微處理器和可重構(gòu)部件聯(lián)合組成。通用處理器控制可重構(gòu)部件的運(yùn)行并執(zhí)行不能有效加速的代碼,計(jì)算密集的核心代碼被映射到可重構(gòu)部件上執(zhí)行,可重構(gòu)部件擔(dān)當(dāng)通用微處理器的協(xié)處理器的角色[2]。
一個(gè)典型的可重構(gòu)系統(tǒng)的結(jié)構(gòu)是:通用處理器初始化可重構(gòu)的硬件,為其送入必要的數(shù)據(jù)或者提供數(shù)據(jù)在存儲(chǔ)器中的位置信息??芍貥?gòu)的計(jì)算單元獨(dú)立于主處理器執(zhí)行實(shí)際的計(jì)算任務(wù),計(jì)算完成后返回結(jié)果。如圖1所示。這種形式的耦合允許可重構(gòu)部件在不受主處理器干擾的情況下運(yùn)行大量的操作,并保持與主處理器同步。
1.3 FPGA的編程技術(shù)
使用FPGA作為可重構(gòu)計(jì)算平臺(tái)也存在著挑戰(zhàn)。傳統(tǒng)上,低層次的硬件描述必須采用VHDL或Verilog語(yǔ)言編寫,這些語(yǔ)言通常不是軟件編程人員的專長(zhǎng)。
然而基于C語(yǔ)言的FPGA設(shè)計(jì)工具的出現(xiàn),支持了比硬件描述語(yǔ)言更高級(jí)的編程抽象,使采用軟件設(shè)計(jì)工具和標(biāo)準(zhǔn)C語(yǔ)言來(lái)實(shí)現(xiàn)絕大部分應(yīng)用成為可能,特別是計(jì)算密集型的設(shè)計(jì)。
這些新的硬件編譯工具允許對(duì)C語(yǔ)言應(yīng)用程序進(jìn)程處理和優(yōu)化,生成FPGA網(wǎng)表格式的硬件設(shè)計(jì),同時(shí)也包括對(duì)C語(yǔ)言做必要的擴(kuò)展,以便于描述高并行、多進(jìn)程的應(yīng)用[4]。
有效使用這些工具和軟硬件協(xié)同設(shè)計(jì)方法的關(guān)鍵在于對(duì)應(yīng)用在軟硬件之間進(jìn)行劃分,確立一個(gè)適合于高并行應(yīng)用的編程模型,以及確立一個(gè)應(yīng)用的結(jié)果,從而最大限度利用硬件并行優(yōu)勢(shì)[5]。
2 Impulse C開發(fā)平臺(tái)
2.1 Impulse C編程模型
Impulse C就是一種基于C的硬件設(shè)計(jì)和軟硬件混合設(shè)計(jì)語(yǔ)言,他能夠抽象掉硬件和軟件之間通信的許多細(xì)節(jié),使得開發(fā)人員能夠更加專注于應(yīng)用的劃分而不用擔(dān)心硬件的底層細(xì)節(jié)。
Impulse C的編程模型是一個(gè)面向流的、軟硬件混合式應(yīng)用程序的通信順序進(jìn)程模型[3]。通過(guò)使用一些C兼容的擴(kuò)展,一個(gè)應(yīng)用程序被描述為一組通過(guò)流、信號(hào)、和共享存儲(chǔ)器進(jìn)行通信的進(jìn)程。這些進(jìn)程持續(xù)接收數(shù)據(jù)、進(jìn)行計(jì)算、產(chǎn)生輸出來(lái)完成應(yīng)用程序的工作。
Impulse C編程模型的核心是進(jìn)程和流。Impulse C致力于從算法到混合FPGA/處理器系統(tǒng)的映射,目的在于建立硬件進(jìn)程在FPGA上的硬件實(shí)現(xiàn),軟件進(jìn)程存在于微處理器中。硬件進(jìn)程通過(guò)流、信號(hào)和存儲(chǔ)器與軟件進(jìn)程相聯(lián)系。如圖2所示。對(duì)于被映射到硬件的進(jìn)程,C語(yǔ)言被約束在它的一個(gè)子集里,而軟件進(jìn)程只受主機(jī)或目標(biāo)C編譯器的限制。
Impulse C編譯器為硬件進(jìn)程生成可綜合HDL,以及實(shí)現(xiàn)特定的流、信號(hào)、存儲(chǔ)器所必須的硬件之間的接口和硬件到軟件的接口。該編譯器可以執(zhí)行指令調(diào)度、循環(huán)流水、和循環(huán)展開。它包含多種編譯指令(在C中用語(yǔ)句#pragma來(lái)表達(dá)),這些編譯指令能夠調(diào)整優(yōu)化結(jié)果,使其滿足通常的面積/性能需求。
2.2 Impulse C的開發(fā)環(huán)境
Impulse Accelerated Technologies公司專門為加速超級(jí)計(jì)算應(yīng)用而提供可編程FPGA的開發(fā)工具,他們推出的CoDeveloper開發(fā)工具為基于FPGA的可重構(gòu)計(jì)算提供了一個(gè)軟/硬件協(xié)同開發(fā)環(huán)境。CoDeveloper使用Impulse C庫(kù)來(lái)支持多重并行處理,將基于C語(yǔ)言的設(shè)計(jì)在編譯后以FPGA網(wǎng)表的形式建立硬件。
CoDeveloper開發(fā)環(huán)境包括:實(shí)現(xiàn)從C到RTL級(jí)HDL轉(zhuǎn)換的CoBuilder,針對(duì)具體平臺(tái)的自動(dòng)生成軟硬件接口的平臺(tái)支持包(Platform Support Package,PSP),以及軟硬件協(xié)同設(shè)計(jì)調(diào)試工具Application Manager和Application Monitor。
CoDeveloper使用Impulse C語(yǔ)言提供了對(duì)FPGA系統(tǒng)級(jí)的設(shè)計(jì),對(duì)軟/硬件劃分,同時(shí)允許使用標(biāo)準(zhǔn)C構(gòu)造編寫和自動(dòng)優(yōu)化獨(dú)立進(jìn)程,具有最小的軟件編程復(fù)雜度。同時(shí)具有在標(biāo)準(zhǔn)C開發(fā)環(huán)境下編譯和調(diào)試的能力。
2.3 Impulse C的開發(fā)流程
Impulse C編譯器能夠?qū)mpulse C進(jìn)程轉(zhuǎn)換成相應(yīng)的硬件和軟件二進(jìn)制文件。在這個(gè)處理的過(guò)程中,需要執(zhí)行一系列的步驟,其中一部分依賴于你所選擇的平臺(tái)對(duì)象。如圖3所示。
對(duì)于軟件進(jìn)程,使用標(biāo)準(zhǔn)的交叉編譯器和Impulse C提供的特定平臺(tái)運(yùn)行是庫(kù)即可。硬件進(jìn)程需要通過(guò)RTL生成器的分析,并通過(guò)幾遍編譯進(jìn)行優(yōu)化。在這個(gè)流程中,設(shè)計(jì)輸入、初始的桌面仿真和調(diào)試是利用通常的C開發(fā)工具來(lái)完成的。在仿真的過(guò)程中,CoDeveloper會(huì)通過(guò)Application Monitor等調(diào)試工具監(jiān)視Impulse C應(yīng)用程序,指出其中的異常或設(shè)計(jì)缺陷。
3 在加速3-DES算法中的應(yīng)用
3-DES算法是常用的加/解密算法,網(wǎng)絡(luò)上可以找到它的公開源代碼。其核心算法是對(duì)64位的數(shù)據(jù)塊進(jìn)行加密或解密,對(duì)于大量的數(shù)據(jù),只要將該算法重復(fù)應(yīng)用在這些64位塊數(shù)據(jù)上就可以了。
數(shù)據(jù)流模型對(duì)該算法是非常適合的,因此我們用Impusle C庫(kù)函數(shù)中的流接口來(lái)讀取數(shù)據(jù)和輸出數(shù)據(jù)。我們?cè)陧攲觿?chuàng)建生產(chǎn)者和消費(fèi)者進(jìn)程,這樣就可以向在FPGA上運(yùn)行的硬件進(jìn)程輸入一些隨機(jī)文本,并接受輸出的加密解密算的結(jié)果。還要?jiǎng)?chuàng)建一個(gè)代表加密算法的進(jìn)程和一個(gè)代表解密算法的進(jìn)程。加密算法進(jìn)程從生產(chǎn)者進(jìn)程中接收配置數(shù)據(jù)和文本數(shù)據(jù),然后把加密結(jié)果按照一次一個(gè)字符的方式寫到輸出流中。如圖4所示。解密進(jìn)程和加密進(jìn)程實(shí)質(zhì)是一樣的,除了編譯時(shí)參數(shù)不同以外。
算法是用標(biāo)準(zhǔn)C加上Impulse C的庫(kù)來(lái)描述的,因此可以用標(biāo)準(zhǔn)桌面的調(diào)試工具和CoDeveloper Application Monitor進(jìn)行設(shè)置和運(yùn)行,并可觀察數(shù)據(jù)流在系統(tǒng)各個(gè)不同的進(jìn)程之間的流動(dòng),算法的結(jié)果可以在編譯到FPGA平臺(tái)之前進(jìn)行驗(yàn)證。
用標(biāo)準(zhǔn)桌面開發(fā)工具仿真它的功能后,用Altera公司的DE2目標(biāo)板,在混合FPGA/處理器硬件平臺(tái)上實(shí)現(xiàn)了該應(yīng)用。這個(gè)平臺(tái)的開發(fā)套件包括了所用編譯和綜合到FPGA的開發(fā)工具。這個(gè)開發(fā)套件結(jié)合Impulse C編譯器,包含了編譯C源程序和執(zhí)行應(yīng)用所需要的所有工具。
在把加密程序編譯成目標(biāo)硬件的過(guò)程中,首先必須設(shè)計(jì)支持DE2平臺(tái)的Platform Support Package文件,接著利用利用這個(gè)平臺(tái)支持包處理相關(guān)的Impulse C源文件,產(chǎn)生相應(yīng)的硬件和軟件的接口文件。
然后用Altera的Quartus工具建立新的項(xiàng)目,CoDeveloper輸出生成的硬件和軟件文件給Quartus,整個(gè)系統(tǒng)用Quartus工具綜合,并用SOPC Builder的工具生成bit文件,通過(guò)USB電纜下載到FPGA上運(yùn)行驗(yàn)證。
在這個(gè)實(shí)驗(yàn)中,通過(guò)運(yùn)行在通用處理器上的軟件進(jìn)程來(lái)獲取測(cè)試時(shí)間,并與在通用處理器上運(yùn)行的純軟件方式的加密算法所用時(shí)間作為對(duì)比。對(duì)同一塊數(shù)據(jù)進(jìn)行加密,混合平臺(tái)上運(yùn)行的時(shí)間約為0.014秒,通用處理器上的軟件實(shí)現(xiàn)約為0.12秒,硬件實(shí)現(xiàn)比純軟件實(shí)現(xiàn)速度提高了8.6倍,這主要是由于硬件實(shí)現(xiàn)發(fā)揮了算法內(nèi)層循環(huán)中的底層并行性的能力。
4 結(jié)論
本文介紹了基于FPGA的可重構(gòu)計(jì)算平臺(tái)的體系結(jié)構(gòu),以及在C語(yǔ)言的環(huán)境中對(duì)FPGA的編程技術(shù),還對(duì)基于Impulse C庫(kù)的CoDeveloper工具進(jìn)行了詳細(xì)的論述。在此基礎(chǔ)上,通過(guò)3-DES加密算法的實(shí)例,對(duì)在CoDeveloper和Altera設(shè)計(jì)工具的環(huán)境下基于Impulse C的軟硬件協(xié)同開發(fā)技術(shù)進(jìn)行了深入的研究。
可重構(gòu)計(jì)算是未來(lái)高性能計(jì)算的一個(gè)發(fā)展方向。采用高級(jí)語(yǔ)言對(duì)FPGA的進(jìn)行編程,可以使開發(fā)人員把注意力集中在算法的描述上,并讓軟件設(shè)計(jì)師也能完成底層硬件的的設(shè)計(jì)工作。當(dāng)然這些需要強(qiáng)大的可重構(gòu)編譯器的支持。未來(lái),面向可重構(gòu)計(jì)算的編程模型、編程語(yǔ)言及相關(guān)的編譯器的設(shè)計(jì)還有待進(jìn)一步研究。
參考文獻(xiàn):
[1] 羅金平,杜貴然,周興銘.計(jì)算機(jī)體系結(jié)構(gòu)的新發(fā)展:通用重構(gòu)計(jì)算技術(shù)[J].計(jì)算機(jī)工程,1999(9):1.
[2] 王昭順,王沁,曲英杰.可重構(gòu)計(jì)算機(jī)體系結(jié)構(gòu)[J].北京科技大學(xué)學(xué)報(bào).2001,23(4):387-389.
[3] Katherine Cpmpton,Scott Hauck.Reconfiguralbe Computing:A Survey of Systems and Software.ACM Computing Surveys,2002,34(2):171-210.
[4] S. M. Loo, B. Earl Wells, N. Freije, J. Kulick. Handel-C for Rapid Prototyping of VLSI Coprocessors for Real Time Systems.IEEE 2002, 0-7803-7339-1.
毛興權(quán)(1983-), 男,碩士研究生。研究方向:計(jì)算機(jī)編譯技術(shù)。