摘要:可重構(gòu)計算的研究使用高度靈活的計算結(jié)構(gòu)進行高性能計算。近年來采用FPGA器件來創(chuàng)建可重計算平臺的研究大量出現(xiàn)?;诟呒壵Z言的FPGA編程技術(shù)可以讓軟件工程師擺脫硬件的干擾,致力于算法的實現(xiàn)。Impulse C語言工具集就是一種對軟硬件劃分和軟硬件過程協(xié)同設(shè)計的相對簡單的、基于C語言的方法,它與高效的基于FPGA的硬件編譯器相結(jié)合,形成了一種完整的混合處理器和FPGA實現(xiàn)的方法。這些工具極大地簡化了可重構(gòu)部件的設(shè)計過程,但是在高效性和電路優(yōu)化等方面跟手工設(shè)計仍有差距。
關(guān)鍵詞:可重構(gòu);Impulse C;FPGA;高性能計算
中圖分類號:TP311文獻標(biāo)識碼:A 文章編號: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)計算技術(shù)
1.1 基于FPGA的可重構(gòu)計算
隨著電子、通信、科學(xué)計算等應(yīng)用領(lǐng)域的不斷發(fā)展,對高性能信息處理系統(tǒng)的需求日益增加。傳統(tǒng)的基于通用處理器通過軟件編程實現(xiàn)基本算法的方法和基于硬件的方法都無法完全滿足這些需求。而可重構(gòu)計算技術(shù)結(jié)合了通用微處理器的靈活性和專用ASIC的高效性,為滿足各領(lǐng)域?qū)Ω咝阅苡嬎愕男枨筇峁┝艘粭l可能的途徑。
可重構(gòu)計算(Reconfigurable Computing)是指,在軟件的控制下,利用系統(tǒng)中的可重用資源,根據(jù)應(yīng)用的需要重新構(gòu)造一個新的計算平臺,達到接近專用硬件設(shè)計的高性能??[1]。而具有可重新配置電路功能特性的FPGA(Field-Programmable Gate Array)的出現(xiàn),正好滿足了可重構(gòu)計算系統(tǒng)的需求。目前的可重構(gòu)計算系統(tǒng)主要是基于FPGA的,以便針對不同的計算需求構(gòu)造不同的硬件結(jié)構(gòu),實現(xiàn)高效的并行計算,提高電子信息系統(tǒng)的實時處理能力、自適應(yīng)能力、可靠性、降低硬件系統(tǒng)的規(guī)模和功耗等等。
1.2 可重構(gòu)系統(tǒng)的體系結(jié)構(gòu)
為了取得上述性能上的優(yōu)勢,并且支持廣泛的應(yīng)用,可重構(gòu)系統(tǒng)一般由通用微處理器和可重構(gòu)部件聯(lián)合組成。通用處理器控制可重構(gòu)部件的運行并執(zhí)行不能有效加速的代碼,計算密集的核心代碼被映射到可重構(gòu)部件上執(zhí)行,可重構(gòu)部件擔(dān)當(dāng)通用微處理器的協(xié)處理器的角色[2]。
一個典型的可重構(gòu)系統(tǒng)的結(jié)構(gòu)是:通用處理器初始化可重構(gòu)的硬件,為其送入必要的數(shù)據(jù)或者提供數(shù)據(jù)在存儲器中的位置信息??芍貥?gòu)的計算單元獨立于主處理器執(zhí)行實際的計算任務(wù),計算完成后返回結(jié)果。如圖1所示。這種形式的耦合允許可重構(gòu)部件在不受主處理器干擾的情況下運行大量的操作,并保持與主處理器同步。
1.3 FPGA的編程技術(shù)
使用FPGA作為可重構(gòu)計算平臺也存在著挑戰(zhàn)。傳統(tǒng)上,低層次的硬件描述必須采用VHDL或Verilog語言編寫,這些語言通常不是軟件編程人員的專長。
然而基于C語言的FPGA設(shè)計工具的出現(xiàn),支持了比硬件描述語言更高級的編程抽象,使采用軟件設(shè)計工具和標(biāo)準(zhǔn)C語言來實現(xiàn)絕大部分應(yīng)用成為可能,特別是計算密集型的設(shè)計。
這些新的硬件編譯工具允許對C語言應(yīng)用程序進程處理和優(yōu)化,生成FPGA網(wǎng)表格式的硬件設(shè)計,同時也包括對C語言做必要的擴展,以便于描述高并行、多進程的應(yīng)用[4]。
有效使用這些工具和軟硬件協(xié)同設(shè)計方法的關(guān)鍵在于對應(yīng)用在軟硬件之間進行劃分,確立一個適合于高并行應(yīng)用的編程模型,以及確立一個應(yīng)用的結(jié)果,從而最大限度利用硬件并行優(yōu)勢[5]。
2 Impulse C開發(fā)平臺
2.1 Impulse C編程模型
Impulse C就是一種基于C的硬件設(shè)計和軟硬件混合設(shè)計語言,他能夠抽象掉硬件和軟件之間通信的許多細(xì)節(jié),使得開發(fā)人員能夠更加專注于應(yīng)用的劃分而不用擔(dān)心硬件的底層細(xì)節(jié)。
Impulse C的編程模型是一個面向流的、軟硬件混合式應(yīng)用程序的通信順序進程模型[3]。通過使用一些C兼容的擴展,一個應(yīng)用程序被描述為一組通過流、信號、和共享存儲器進行通信的進程。這些進程持續(xù)接收數(shù)據(jù)、進行計算、產(chǎn)生輸出來完成應(yīng)用程序的工作。
Impulse C編程模型的核心是進程和流。Impulse C致力于從算法到混合FPGA/處理器系統(tǒng)的映射,目的在于建立硬件進程在FPGA上的硬件實現(xiàn),軟件進程存在于微處理器中。硬件進程通過流、信號和存儲器與軟件進程相聯(lián)系。如圖2所示。對于被映射到硬件的進程,C語言被約束在它的一個子集里,而軟件進程只受主機或目標(biāo)C編譯器的限制。
Impulse C編譯器為硬件進程生成可綜合HDL,以及實現(xiàn)特定的流、信號、存儲器所必須的硬件之間的接口和硬件到軟件的接口。該編譯器可以執(zhí)行指令調(diào)度、循環(huán)流水、和循環(huán)展開。它包含多種編譯指令(在C中用語句#pragma來表達),這些編譯指令能夠調(diào)整優(yōu)化結(jié)果,使其滿足通常的面積/性能需求。
2.2 Impulse C的開發(fā)環(huán)境
Impulse Accelerated Technologies公司專門為加速超級計算應(yīng)用而提供可編程FPGA的開發(fā)工具,他們推出的CoDeveloper開發(fā)工具為基于FPGA的可重構(gòu)計算提供了一個軟/硬件協(xié)同開發(fā)環(huán)境。CoDeveloper使用Impulse C庫來支持多重并行處理,將基于C語言的設(shè)計在編譯后以FPGA網(wǎng)表的形式建立硬件。
CoDeveloper開發(fā)環(huán)境包括:實現(xiàn)從C到RTL級HDL轉(zhuǎn)換的CoBuilder,針對具體平臺的自動生成軟硬件接口的平臺支持包(Platform Support Package,PSP),以及軟硬件協(xié)同設(shè)計調(diào)試工具Application Manager和Application Monitor。
CoDeveloper使用Impulse C語言提供了對FPGA系統(tǒng)級的設(shè)計,對軟/硬件劃分,同時允許使用標(biāo)準(zhǔn)C構(gòu)造編寫和自動優(yōu)化獨立進程,具有最小的軟件編程復(fù)雜度。同時具有在標(biāo)準(zhǔn)C開發(fā)環(huán)境下編譯和調(diào)試的能力。
2.3 Impulse C的開發(fā)流程
Impulse C編譯器能夠?qū)mpulse C進程轉(zhuǎn)換成相應(yīng)的硬件和軟件二進制文件。在這個處理的過程中,需要執(zhí)行一系列的步驟,其中一部分依賴于你所選擇的平臺對象。如圖3所示。
對于軟件進程,使用標(biāo)準(zhǔn)的交叉編譯器和Impulse C提供的特定平臺運行是庫即可。硬件進程需要通過RTL生成器的分析,并通過幾遍編譯進行優(yōu)化。在這個流程中,設(shè)計輸入、初始的桌面仿真和調(diào)試是利用通常的C開發(fā)工具來完成的。在仿真的過程中,CoDeveloper會通過Application Monitor等調(diào)試工具監(jiān)視Impulse C應(yīng)用程序,指出其中的異常或設(shè)計缺陷。
3 在加速3-DES算法中的應(yīng)用
3-DES算法是常用的加/解密算法,網(wǎng)絡(luò)上可以找到它的公開源代碼。其核心算法是對64位的數(shù)據(jù)塊進行加密或解密,對于大量的數(shù)據(jù),只要將該算法重復(fù)應(yīng)用在這些64位塊數(shù)據(jù)上就可以了。
數(shù)據(jù)流模型對該算法是非常適合的,因此我們用Impusle C庫函數(shù)中的流接口來讀取數(shù)據(jù)和輸出數(shù)據(jù)。我們在頂層創(chuàng)建生產(chǎn)者和消費者進程,這樣就可以向在FPGA上運行的硬件進程輸入一些隨機文本,并接受輸出的加密解密算的結(jié)果。還要創(chuàng)建一個代表加密算法的進程和一個代表解密算法的進程。加密算法進程從生產(chǎn)者進程中接收配置數(shù)據(jù)和文本數(shù)據(jù),然后把加密結(jié)果按照一次一個字符的方式寫到輸出流中。如圖4所示。解密進程和加密進程實質(zhì)是一樣的,除了編譯時參數(shù)不同以外。
算法是用標(biāo)準(zhǔn)C加上Impulse C的庫來描述的,因此可以用標(biāo)準(zhǔn)桌面的調(diào)試工具和CoDeveloper Application Monitor進行設(shè)置和運行,并可觀察數(shù)據(jù)流在系統(tǒng)各個不同的進程之間的流動,算法的結(jié)果可以在編譯到FPGA平臺之前進行驗證。
用標(biāo)準(zhǔn)桌面開發(fā)工具仿真它的功能后,用Altera公司的DE2目標(biāo)板,在混合FPGA/處理器硬件平臺上實現(xiàn)了該應(yīng)用。這個平臺的開發(fā)套件包括了所用編譯和綜合到FPGA的開發(fā)工具。這個開發(fā)套件結(jié)合Impulse C編譯器,包含了編譯C源程序和執(zhí)行應(yīng)用所需要的所有工具。
在把加密程序編譯成目標(biāo)硬件的過程中,首先必須設(shè)計支持DE2平臺的Platform Support Package文件,接著利用利用這個平臺支持包處理相關(guān)的Impulse C源文件,產(chǎn)生相應(yīng)的硬件和軟件的接口文件。
然后用Altera的Quartus工具建立新的項目,CoDeveloper輸出生成的硬件和軟件文件給Quartus,整個系統(tǒng)用Quartus工具綜合,并用SOPC Builder的工具生成bit文件,通過USB電纜下載到FPGA上運行驗證。
在這個實驗中,通過運行在通用處理器上的軟件進程來獲取測試時間,并與在通用處理器上運行的純軟件方式的加密算法所用時間作為對比。對同一塊數(shù)據(jù)進行加密,混合平臺上運行的時間約為0.014秒,通用處理器上的軟件實現(xiàn)約為0.12秒,硬件實現(xiàn)比純軟件實現(xiàn)速度提高了8.6倍,這主要是由于硬件實現(xiàn)發(fā)揮了算法內(nèi)層循環(huán)中的底層并行性的能力。
4 結(jié)論
本文介紹了基于FPGA的可重構(gòu)計算平臺的體系結(jié)構(gòu),以及在C語言的環(huán)境中對FPGA的編程技術(shù),還對基于Impulse C庫的CoDeveloper工具進行了詳細(xì)的論述。在此基礎(chǔ)上,通過3-DES加密算法的實例,對在CoDeveloper和Altera設(shè)計工具的環(huán)境下基于Impulse C的軟硬件協(xié)同開發(fā)技術(shù)進行了深入的研究。
可重構(gòu)計算是未來高性能計算的一個發(fā)展方向。采用高級語言對FPGA的進行編程,可以使開發(fā)人員把注意力集中在算法的描述上,并讓軟件設(shè)計師也能完成底層硬件的的設(shè)計工作。當(dāng)然這些需要強大的可重構(gòu)編譯器的支持。未來,面向可重構(gòu)計算的編程模型、編程語言及相關(guān)的編譯器的設(shè)計還有待進一步研究。
參考文獻:
[1] 羅金平,杜貴然,周興銘.計算機體系結(jié)構(gòu)的新發(fā)展:通用重構(gòu)計算技術(shù)[J].計算機工程,1999(9):1.
[2] 王昭順,王沁,曲英杰.可重構(gòu)計算機體系結(jié)構(gòu)[J].北京科技大學(xué)學(xué)報.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-), 男,碩士研究生。研究方向:計算機編譯技術(shù)。