《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計應(yīng)用 > 基于IP核的數(shù)選式浮點(diǎn)矩陣相乘設(shè)計
基于IP核的數(shù)選式浮點(diǎn)矩陣相乘設(shè)計
來源:電子技術(shù)應(yīng)用2011年第6期
肖 宇,王建業(yè),,張 偉
(空軍工程大學(xué) 導(dǎo)彈學(xué)院,,陜西 三原713800)
摘要: 本文根據(jù)數(shù)選式矩陣運(yùn)算特點(diǎn),結(jié)合低階矩陣運(yùn)算IP核,,采用將IP核嵌入到數(shù)選矩陣中,,同時添加浮點(diǎn)加法運(yùn)算的方法,實(shí)現(xiàn)浮點(diǎn)矩陣相乘,。在節(jié)省資源消耗的同時提升了系統(tǒng)性能,,并將改進(jìn)的浮點(diǎn)矩陣運(yùn)算在FPGA中實(shí)現(xiàn)。仿真結(jié)果表明該設(shè)計可行,,具有一定的實(shí)際意義和應(yīng)用前景,。
中圖分類號: TN47
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2011)06-0052-04
Floating-point matrix multiplication design based on IP core
Xiao Yu,Wang Jianye,,Zhang Wei
Missile Institute, Air Force Engineering University, Sanyuan 713800,,China
Abstract: Based on the characteristics of a few selected matrix operations, matrix operations with low-level IP cores, using the number of the IP core embedded in a matrix selection, while floating-point addition operation to add the method to achieve floating-point matrix multiplication. Saving resource consumption while improving system performance, and improved floating-point matrix operations in the FPGA. Simulation results show that the design is feasible, and it has some practical significance and applications.
Key words : floating-point matrix multiplication;embedded,;IP core,;field programmable gate arrays


 嵌入式計算作為新一代計算系統(tǒng)的高效運(yùn)行方式,應(yīng)用于多個高性能領(lǐng)域,,如陣列信號處理,、核武器模擬、計算流體動力學(xué)和海洋環(huán)境模擬等,。在這些科學(xué)計算中,,需要大量的矩陣運(yùn)算,而矩陣運(yùn)算中乘法運(yùn)算是其他運(yùn)算的基礎(chǔ),,如能提高嵌入式系統(tǒng)中浮點(diǎn)矩陣乘法運(yùn)算的速度,,則可加快其他類型的矩陣運(yùn)算速度。
    目前實(shí)現(xiàn)浮點(diǎn)矩陣運(yùn)算的方法,有直接使用VHDL語言編寫的浮點(diǎn)矩陣相乘處理單元[1],,關(guān)鍵技術(shù)是乘累加單元的設(shè)計,,通常依據(jù)設(shè)計者的編程水平?jīng)Q定硬件性能。同樣,,F(xiàn)PGA廠商也推出了一定規(guī)模的浮點(diǎn)矩陣運(yùn)算IP核[2],,其應(yīng)用針對本廠家器件,且經(jīng)過專業(yè)調(diào)試和硬件實(shí)測,,性能穩(wěn)定且優(yōu)于手寫代碼,,但還有一些可改進(jìn)的地方。
    本文基于Altera的算法IP核,,采用數(shù)選方式對矩陣運(yùn)算中的單精度浮點(diǎn)矩陣相乘進(jìn)行改進(jìn),,可推廣到階數(shù)更高的矩陣運(yùn)算和雙精度浮點(diǎn)、復(fù)數(shù)單精度浮點(diǎn)運(yùn)算中,。
1 浮點(diǎn)矩陣相乘的IP核原理
    Altera公司推出的浮點(diǎn)矩陣相乘IP核ALTFP_MATRIX_MULT,,適用于Quartus10.1版本以上的軟件環(huán)境,能夠進(jìn)行一定規(guī)模的浮點(diǎn)矩陣計算,,原理圖如圖1所示,。

    圖1的矩陣相乘結(jié)合流水線方式控制數(shù)據(jù)流動,關(guān)鍵部分為核心PE(Processing Element)單元實(shí)現(xiàn)兩浮點(diǎn)數(shù)的相乘,。輸入數(shù)據(jù)在控制器的引導(dǎo)下分為AA矩陣和BB矩陣,分別存于M144K或M9K存儲器中,,在計算指令的控制下做浮點(diǎn)相乘運(yùn)算,,接著并行地浮點(diǎn)相加完成輸出。分析整個計算結(jié)構(gòu),,要達(dá)到較好的性能就需要耗費(fèi)多個存儲器和多個浮點(diǎn)相乘單元,。列出矩陣相乘的基本時序圖如圖2所示。

 

 

    從時序圖可見,,整個IP核有7個輸入,、4個輸出,分為數(shù)據(jù)加載,、數(shù)據(jù)處理,、數(shù)據(jù)輸出三個階段。在系統(tǒng)同步時鐘sysclk的驅(qū)動下,,loadaa,、loadbb對數(shù)據(jù)loaddata進(jìn)行乘數(shù)矩陣、被乘數(shù)矩陣使能,,將數(shù)據(jù)加載到存儲器中,。當(dāng)calcimatrix上升沿到來時,進(jìn)行矩陣乘法運(yùn)算并輸出數(shù)據(jù)outdata,且在outvalid為高電平時有效,。在整個數(shù)據(jù)輸出有效階段,,完成信號done處于低電平,其余階段為高電平,。
    浮點(diǎn)矩陣運(yùn)算IP核的運(yùn)算方式分為單精度,、雙精度、復(fù)數(shù)單精度三種方式,,矩陣運(yùn)算階數(shù)有8,、16、32,、64,、96、128階6種,,并不能實(shí)現(xiàn)任意階矩陣的相乘,,隨著矩陣階數(shù)的增大,最高時鐘頻率在下降,,同時占用器件資源在增加,,耗用最多的是存儲器資源,呈幾何倍數(shù)增長,。
2 數(shù)選實(shí)矩陣相乘設(shè)計
    在矩陣相乘運(yùn)算中最基礎(chǔ)的是2階矩陣的相乘,,核心部分為乘累加器[3],通過適當(dāng)數(shù)選控制,,可使整個矩陣運(yùn)算具有高時鐘頻率,。如圖3為2階矩陣相乘電路。
    整個矩陣相乘模塊的設(shè)計,,結(jié)合數(shù)據(jù)選擇的控制方式,,分為流水線數(shù)據(jù)輸入、數(shù)據(jù)相乘,、數(shù)據(jù)輸出三部分,。在流水線數(shù)據(jù)輸入模塊,采用流水線的方式輸入乘矩陣數(shù)據(jù)KA,、KB,,被乘數(shù)矩陣數(shù)據(jù)A、B,,以同步系統(tǒng)時鐘啟動兩個數(shù)據(jù)選擇器,,由cntr0控制兩個數(shù)選器選擇數(shù)據(jù)輸出到乘法器兩端;將乘法器的輸入數(shù)據(jù)相乘并存于寄存器中,;最后在數(shù)據(jù)輸出部分cntr1模塊的控制下,,累加輸出矩陣數(shù)據(jù)X,、Y,完成矩陣運(yùn)算,。以Altera器件EP2C35F672C6為映射器件,,其時鐘頻率為250 MHz。在Quartus7.2軟件編程下,,運(yùn)行此2階乘法器,,可獲得248.69 MHz的最高時鐘頻率。占用資源為172個邏輯單元,、152個寄存器,、2個9位乘法器,且在輸入數(shù)據(jù)之后2個時鐘輸出運(yùn)算結(jié)果,,如圖4所示,。設(shè)計具有較高的計算性能,關(guān)鍵點(diǎn)在于數(shù)據(jù)選擇器在電路運(yùn)算過程中的作用,,取代了存儲器單一存儲的目的,,可進(jìn)行乒乓式實(shí)時數(shù)據(jù)流動,提高系統(tǒng)運(yùn)算效率,,節(jié)省了一半存儲器,。
    圖4中乘矩陣[KA KB]在Matlab中的表示為[5 3;2 4],,被乘矩陣[A B]表示為[2 2,;3 4],得到的輸出結(jié)果為[16 27;12 22],,可見FPGA運(yùn)算結(jié)果與Matlab結(jié)果一致,。


3 浮點(diǎn)矩陣相乘運(yùn)算的改進(jìn)
    本文以16×16階浮點(diǎn)矩陣相乘為例,采用單精度浮點(diǎn)計算方式,,結(jié)合2階高速矩陣運(yùn)算電路對16階矩陣運(yùn)算進(jìn)行改進(jìn),其他高階矩陣運(yùn)算可采用類推的方式完成,。
3.1 高階矩陣運(yùn)算分解
    高階矩陣分解運(yùn)算是通過分解大規(guī)模矩陣為許多子矩陣進(jìn)行計算的方式,,所以可將16×16階矩陣劃分為4個8×8階矩陣,實(shí)現(xiàn)2階矩陣相乘,。16×16階矩陣相乘運(yùn)算,,可表達(dá)為式(1):

    從式(1)的16階矩陣相乘運(yùn)算,可知其需要8次8階浮點(diǎn)矩陣相乘和4次8階浮點(diǎn)矩陣相加運(yùn)算,。分析可得,,在數(shù)據(jù)并行輸入輸出的情況下,相比較于16階矩陣IP核的運(yùn)行方式,,此種分解方式性能要高,。主要由于IP核運(yùn)行方式跨度長,,在數(shù)據(jù)輸入時,需要經(jīng)過16×16級存儲器,,而本文設(shè)計的方式只需要8×8級存儲和4次并行的浮點(diǎn)相加運(yùn)算,,同時相比較于16階IP耗用存儲資源和浮點(diǎn)乘法單元數(shù)較少。
3.2 矩陣相乘硬件實(shí)現(xiàn)
    采用Quartus10.1軟件設(shè)計16階單精度浮點(diǎn)矩陣相乘電路,,使用VHDL語言[4]編寫,,模塊由流水線數(shù)據(jù)輸入、矩陣相乘,、鎖存器,、浮點(diǎn)加法數(shù)選模塊4部分組成,設(shè)計框圖如圖5所示,。
    在流水線數(shù)據(jù)輸入部分,,對數(shù)據(jù)data進(jìn)行分割,當(dāng)信號load為高電平時使能,,同時進(jìn)行數(shù)據(jù)的緩存和生成控制位,,輸出的三位控制位(calcimatrix、loadaa,、loadbb)控制著下一步矩陣相乘的運(yùn)算,,在loadaa與loadbb高電平交互之間的數(shù)據(jù)值取0,具有數(shù)據(jù)緩存和分割的作用,。最后一個模塊需要進(jìn)行8×8階矩陣的32位浮點(diǎn)加法運(yùn)算,,同時輸出數(shù)據(jù)有效電平,使用Altera altfp_add_sub IP 核實(shí)現(xiàn)單精度浮點(diǎn)加法器,,可根據(jù)用戶的定制完成,。對圖5的模塊加入幾個輸出結(jié)果,使用modelsim6.5進(jìn)行仿真,,可得16階矩陣運(yùn)算仿真結(jié)果如圖6所示,。

    從圖6可見loadaa、loadbb,、calcimatrix三者的時序滿足浮點(diǎn)矩陣運(yùn)算的時序圖,,在前兩者數(shù)據(jù)加載后,即可獲得calcimatrix上升沿,,進(jìn)行矩陣相乘,。輸出結(jié)果分為4個大組,各大組有8小組,,每一小組由8個數(shù)據(jù)組成,,具有較好的計算結(jié)果。
4 性能比較分析
4.1 性能比較

    將第3節(jié)設(shè)計的16階矩陣相乘電路與Altera自身提供的IP核進(jìn)行比較,。同時以8階矩陣相乘為基,,以第2節(jié)的方式設(shè)計4×4階數(shù)選實(shí)矩陣電路,,套用于32×32階矩陣運(yùn)算中,與Altera的IP核比較,。IP核使用最高性能運(yùn)行,,同時以資源消耗、浮點(diǎn)操作數(shù)[5],、最高時鐘頻率,、吞吐量作為比較準(zhǔn)則,其中浮點(diǎn)操作數(shù)的計算表達(dá)式為:

    依據(jù)以上浮點(diǎn)操作數(shù)計算方式,,使用Quartus10.1軟件進(jìn)行編程,,映射到Stratix III系列的器件中,可獲得相應(yīng)的對比表如表1所示,。


    從表1結(jié)果可見改進(jìn)的浮點(diǎn)運(yùn)算電路在ALM的資源占用減少了許多,。原因?yàn)樵诰仃囈?guī)模增大時,只使用了8階浮點(diǎn)矩陣運(yùn)算,,浮點(diǎn)IP核中的乘加核數(shù)量不變,,所以消耗的浮點(diǎn)相乘單元不變,同樣增添的浮點(diǎn)加法器也只消耗了不多的ALM資源,。而對于改進(jìn)的兩類矩陣相乘都只使用8階矩陣乘法,,所以在乘法器和M9K存儲器這兩類邏輯單元的消耗不變。為了達(dá)到較好的性能,,需要少量外圍存儲器處理數(shù)據(jù)的流動和浮點(diǎn)相加運(yùn)算,,但整體存儲器消耗降低。觀察吞吐量可知,,套用的數(shù)選式矩陣相乘模塊,,當(dāng)階數(shù)增大時吞吐量降低,幅度明顯,,而選擇2階數(shù)選矩陣具有乒乓結(jié)構(gòu),,性能有所提升。同理適用于浮點(diǎn)操作數(shù)的情況,。最后整個運(yùn)算電路的最高時鐘頻率始終是提升的,。與Altera公司的IP核比較,改進(jìn)的16階浮點(diǎn)矩陣運(yùn)算電路性能較好,,而32階運(yùn)算電路性能卻未達(dá)到要求。
    對高階矩陣進(jìn)一步分析,,在32階運(yùn)算電路的設(shè)計中,,使用16階浮點(diǎn)矩陣為乘法運(yùn)算部分,以2×2實(shí)矩陣運(yùn)算電路為核心,,能夠提升32階電路的運(yùn)算性能,。
4.2 精度分析
    以16階矩陣的運(yùn)算進(jìn)行精度分析,,取乘矩陣與被乘矩陣各16個數(shù)據(jù)進(jìn)行計算分析,列出表2數(shù)據(jù),,其中B矩陣為現(xiàn)有數(shù)據(jù)的轉(zhuǎn)置,,以Matlab和FPGA運(yùn)算結(jié)果進(jìn)行對比。

          從Matlab與FPGA計算結(jié)果可見,,計算輸出近乎完全相同,,相差的數(shù)據(jù)值也是由于Matlab在計算中需要先轉(zhuǎn)化為雙精度運(yùn)算后才轉(zhuǎn)化為單精度數(shù),從而得出FPGA計算具有較高的精度,。
    本文利用IP核性能穩(wěn)定,、使用方便等特點(diǎn),對現(xiàn)有的單精度浮點(diǎn)矩陣運(yùn)算進(jìn)行改進(jìn),,采用矩陣嵌入式的形式,,將浮點(diǎn)運(yùn)算IP核嵌入到2階數(shù)選實(shí)矩陣模塊中,降低存儲器和計算資源消耗,,提升了系統(tǒng)吞吐量,、浮點(diǎn)運(yùn)算性能和運(yùn)行最高時鐘頻率。這種改進(jìn)的浮點(diǎn)矩陣乘法器對降低資源消耗,、提升系統(tǒng)性能具有重大意義,。同時,利用VHDL語言編寫,,具有模塊化設(shè)計思想,,使得本設(shè)計可移植性強(qiáng)、通用性好,,只需要在現(xiàn)有IP核的基礎(chǔ)上進(jìn)行小規(guī)模改進(jìn),,即可擁有較高性能,具有一定的工程實(shí)際意義和應(yīng)用前景,。
參考文獻(xiàn)
[1] 田翔,,周凡,陳耀武,,等.基于FPGA的實(shí)時雙精度浮點(diǎn)矩陣乘法器設(shè)計[J].浙江大學(xué)學(xué)報(工學(xué)版),,2008(9).
[2] Altera Corp.Floating-Point megafunctions user guide.2010.
[3] 蔡敏,閔言燦.全流水線結(jié)構(gòu)雙精度浮點(diǎn)乘加單元的設(shè)計[J].微電子學(xué)與計算機(jī),,2010(1).
[4] 江思敏.VHDL數(shù)字電路及系統(tǒng)設(shè)計[M].北京:機(jī)械工業(yè)出版社,,2006.
[5] 余江洪,肖燕成,,朱宗柏,,等.基于Linpack的高性能計算機(jī)集群的并行性能測試[J].船電技術(shù),2009(5).

此內(nèi)容為AET網(wǎng)站原創(chuàng),,未經(jīng)授權(quán)禁止轉(zhuǎn)載,。