《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 嵌入式技術(shù) > 設(shè)計(jì)應(yīng)用 > 浮點(diǎn)矩陣相乘IP核并行改進(jìn)的設(shè)計(jì)與實(shí)現(xiàn)
浮點(diǎn)矩陣相乘IP核并行改進(jìn)的設(shè)計(jì)與實(shí)現(xiàn)
來源:電子技術(shù)應(yīng)用2012年第2期
張國禮,,王建業(yè),,肖 宇
空軍工程大學(xué) 導(dǎo)彈學(xué)院,陜西 三原713800
摘要: 基于Altera浮點(diǎn)IP核實(shí)現(xiàn)浮點(diǎn)矩陣相乘運(yùn)算時,,由于矩陣階數(shù)的增大,造成消耗的器件資源雖增加但系統(tǒng)性能反而下降的問題,,針對現(xiàn)有IP核存在數(shù)據(jù)加載不連貫,、存儲帶寬不均勻的不足,提出采用并行化數(shù)據(jù)存儲,、依據(jù)查找表加載數(shù)據(jù)和處理數(shù)據(jù)的方式對IP核進(jìn)行改進(jìn),。然后將改進(jìn)的浮點(diǎn)矩陣運(yùn)算在FPGA中實(shí)現(xiàn),經(jīng)過Quartus,、Matlab軟件聯(lián)合仿真并進(jìn)行結(jié)果比對,,其誤差不超過萬分之一,且節(jié)省了器件資源,、提升了系統(tǒng)性能,。仿真結(jié)果表明該設(shè)計(jì)可行,有利于提高諸多高性能領(lǐng)域浮點(diǎn)矩陣的運(yùn)算速度,。
中圖分類號: TN47
文獻(xiàn)標(biāo)識碼: A
文章編號: 0258-7998(2012)02-0043-04
The design and implementation of IP-core parallel improvement in floating-point matrix multiplication
Zhang Guoli,,Wang Jianye,Xiao Yu
Missile Institute,Air Force Engineering University,Sanyuan 713800,,China
Abstract: This Paper is based on the problem of increasing appliance resource consumed and decreasing systematic performance with the increasing of matrix ranks when floating IP-Core of Altera is carrying out the floating-matrix multiplication. With the aim to making up with the shortcomings of incoherent of IP-Core’s data-loading and less-regularity of memory bandwidth, we take measures such as parallelizing data storage, loading and dealing with data in the LUT to improve the IP core. Then we realize the improved floating-matrix operation by FPGA, as well as emulate it by Quartus and Matlab software. Compared with the results we can find that the error is less than one ten thousandth, the appliance resource is saved off and the systematic performance is improved. The simulation investigates that the design is feasibility and it is profitable in many high-level fields.
Key words : floating-point matrix multiplication,;embedded;IP-core,;FPGA

    嵌入式計(jì)算作為新一代計(jì)算系統(tǒng)的高效運(yùn)行方式,,應(yīng)用于多個高性能領(lǐng)域,如陣列信號處理,、核武器模擬,、計(jì)算流體動力學(xué)等。在這些科學(xué)計(jì)算中,,需要大量的浮點(diǎn)矩陣運(yùn)算,。而目前已實(shí)現(xiàn)的浮點(diǎn)矩陣運(yùn)算是直接使用VHDL語言編寫的浮點(diǎn)矩陣相乘處理單元[1],,其關(guān)鍵技術(shù)是乘累加單元的設(shè)計(jì),這樣設(shè)計(jì)的硬件,,其性能依賴于設(shè)計(jì)者的編程水平,。此外,F(xiàn)PGA廠商也推出了一定規(guī)模的浮點(diǎn)矩陣運(yùn)算IP核[2],,雖然此IP核應(yīng)用了本廠家的器件,,并經(jīng)過專業(yè)調(diào)試和硬件實(shí)測,性能穩(wěn)定且優(yōu)于手寫代碼,,但仍可對其進(jìn)行改進(jìn),,以進(jìn)一步提高運(yùn)算速度。

1 Altera浮點(diǎn)矩陣相乘IP核原理
    Altera公司推出的浮點(diǎn)矩陣相乘IP核ALTFP_MATRIX_MULT,,是在Quartus軟件9.1版本以上的環(huán)境中使用,,能夠進(jìn)行一定規(guī)模的浮點(diǎn)矩陣相乘運(yùn)算,包含A,、B矩陣數(shù)據(jù)輸入,,數(shù)據(jù)浮點(diǎn)乘加,數(shù)據(jù)緩存及相加輸出四大部分,。其中最能體現(xiàn)浮點(diǎn)計(jì)算性能的是浮點(diǎn)乘加部分,,而周圍的控制電路及輸出則影響到系統(tǒng)的最高時鐘頻率,間接地影響系統(tǒng)整體性能,。
    整個矩陣相乘電路原理是將輸入的單路數(shù)據(jù)(A,、B矩陣共用數(shù)據(jù)線),通過控制器產(chǎn)生A,、B矩陣地址信號,,控制著A矩陣數(shù)據(jù)輸出和B矩陣數(shù)據(jù)輸出,并將數(shù)據(jù)并行分段輸出到浮點(diǎn)乘加模塊進(jìn)行乘加運(yùn)算,,之后串行輸出到一個緩存器模塊中,,再以并行方式輸出到浮點(diǎn)相加模塊,最后獲得計(jì)算結(jié)果,。從其原理可以看出,,在數(shù)據(jù)輸入輸出方面仍有許多可改進(jìn)的地方。
2 IP核存在的缺陷及改進(jìn)
2.1 存在缺陷
    (1)輸入數(shù)據(jù)帶寬的不均衡性,。在矩陣A,、B的數(shù)據(jù)輸入時,Altera的IP核將A矩陣數(shù)據(jù)存于M144K的Block RAM中,,而將B矩陣數(shù)據(jù)存于M9K的Block RAM中,,導(dǎo)致IP核中A矩陣數(shù)據(jù)的帶寬小于B矩陣數(shù)據(jù)的帶寬,并需要一定數(shù)量的寄存器組使A矩陣數(shù)據(jù)帶寬能夠匹配于B矩陣數(shù)據(jù)帶寬,。由此可見,,A,、B矩陣數(shù)據(jù)的存儲受到器件限制和存儲約束,同時由于在浮點(diǎn)乘加模塊的輸入端(A,、B矩陣數(shù)據(jù))帶寬不同,,造成A矩陣數(shù)據(jù)的輸入需要額外的處理時間。
    (2)加載數(shù)據(jù)的不連貫性,。在矩陣數(shù)據(jù)加載時,,IP核通過將數(shù)據(jù)分段成等分的幾部分,用于向量相乘,。由于矩陣A存儲帶寬窄需要4步寄存(由Blocks決定),,在第3個周期時才加載數(shù)據(jù)B用于計(jì)算,送到一個FIFO中存儲,;在第6個時鐘周期時加載矩陣A分段的第二部分進(jìn)行各自的第二部分計(jì)算,最后當(dāng)計(jì)算到第15個周期時,,才可通過浮點(diǎn)相加,,計(jì)算出矩陣C的第一個值,之后計(jì)算出矩陣C的其他值C11,。從上述結(jié)構(gòu)可見,,在分段相乘之后,采用先對一個FIFO進(jìn)行存儲,,存滿后再對下一個數(shù)據(jù)FIFO進(jìn)行存儲,,造成時間上浪費(fèi)過多。
2.2 設(shè)計(jì)改進(jìn)
    鑒于上述缺陷,,在輸入A,、B矩陣的存儲方式上,進(jìn)行串行輸入到并行輸入的改進(jìn),,使得兩個矩陣能同步輸入到浮點(diǎn)乘加模塊,。在數(shù)據(jù)加載方式上,將A矩陣用3個周期加載完畢,,再處理相乘運(yùn)算,;將分段相乘結(jié)果進(jìn)行直接存儲相加,獲得C矩陣的第一個值,,縮減運(yùn)算時間,。設(shè)計(jì)的改進(jìn)框圖如圖1所示。


    將A,、B矩陣數(shù)據(jù)加載模塊設(shè)計(jì)成同步加載的方式,,即在loadaa為高電平時,對A的第一組數(shù)據(jù)進(jìn)行初始化,,加載到雙口RAM模塊存儲,;在loadbb為高電平時,,加載B矩陣的數(shù)據(jù),也進(jìn)行雙口RAM存儲,。然后依據(jù)ROM存儲的地址信號表,,在控制模塊的控制下輸出A、B矩陣地址相對應(yīng)的數(shù)據(jù),,進(jìn)行浮點(diǎn)乘加運(yùn)算,,之后串行緩存,并行輸出到浮點(diǎn)相加模塊,,進(jìn)行輸出,。計(jì)算時序如圖2所示。
    在時序上要求初始化加載A矩陣的第一行數(shù)據(jù)A1,、A2,、A3之后,加載B矩陣的第一列數(shù)據(jù),,當(dāng)分段E1加載后立即進(jìn)行分段第一組數(shù)據(jù)相乘A1×E1,。以此類推,當(dāng)加載A的第二行數(shù)據(jù)時,,即可立即與B矩陣的第一列數(shù)據(jù)相乘,。總體而言,,只需要在ROM模塊中存儲一定的地址信號,,即可使浮點(diǎn)乘加模塊的輸入端具有并行連貫的數(shù)據(jù)輸入,縮短了運(yùn)算時間,。
3 浮點(diǎn)矩陣相乘實(shí)現(xiàn)
3.1 模塊總體實(shí)現(xiàn)

    按照上述改進(jìn)方案,,ROM地址表在控制模塊的控制下產(chǎn)生一組地址信號控制雙口RAM組進(jìn)行并行輸出,保證了浮點(diǎn)乘加模塊計(jì)算的準(zhǔn)確性,。其中控制模塊為設(shè)計(jì)的關(guān)鍵部分,,用于產(chǎn)生所有模塊的控制信號,實(shí)現(xiàn)同步計(jì)算,。分為a_cntrl,、b_cntrl、cache,、outcntrl四部分控制信號以及一路計(jì)數(shù)信號用于ROM地址查詢,,內(nèi)部由一個狀態(tài)機(jī)和邏輯單元組成,狀態(tài)機(jī)用于產(chǎn)生矩陣A,、B的read開始,、latch鎖存、地址疊加信號的轉(zhuǎn)換,??刂颇K的時序仿真如圖3所示,。

    圖3在全局同步信號時鐘sysclk、復(fù)位reset,、使能enable的作用下,,當(dāng)calcmatrix信號為‘1’時,開始計(jì)算并生成輸出控制信號,。其中a_cntrl部分用于控制矩陣A數(shù)據(jù)加載模塊,,主要包含地址信號readaa和鎖存信號latchaa,來一個鎖存高電平則存儲A矩陣數(shù)據(jù)readaa,;b_cntrl部分則對應(yīng)于矩陣B的控制,,輸入B矩陣數(shù)據(jù)readbb;cache部分用于控制數(shù)據(jù)緩存部分串行輸入并行輸出,,包含著相應(yīng)的讀地址信號cacherdadd,、寫地址信號cachewradd、cache選擇信號cachemesel,,三者同步控制并行輸出,;outcntrl部分是整個系統(tǒng)的輸出控制部分,在準(zhǔn)備信號ready之后,,出現(xiàn)outvalid高電平,表示輸出數(shù)據(jù)有效,,同時完成信號done為低電平,。為使矩陣A、B數(shù)據(jù)能同時加載到浮點(diǎn)乘加模塊上,,需要使一個readaa值對應(yīng)于readbb的columnsbb個數(shù)據(jù),。在本設(shè)計(jì)中使用的是A9×16數(shù)據(jù)與B16×8數(shù)據(jù)進(jìn)行計(jì)算,生成的outvalid有9個脈沖,,每個脈沖包含8個矩陣輸出數(shù)據(jù),。
    對于A、B矩陣的數(shù)據(jù)加載,,采用的是串行輸入并行輸出的控制器,,由移位寄存器組成,當(dāng)計(jì)數(shù)器計(jì)數(shù)到端口輸出值時(如端口并行輸出8個數(shù)則計(jì)數(shù)到8),,并行輸出數(shù)據(jù),。
    浮點(diǎn)乘加模塊采用并行相乘、并行相加的方式,。由于考慮到精度問題,,采用浮點(diǎn)位數(shù)轉(zhuǎn)換,將32 bit的輸入數(shù)據(jù)進(jìn)行浮點(diǎn)擴(kuò)展為42 bit,,再進(jìn)行乘加運(yùn)算,,最后再將42 bit數(shù)據(jù)轉(zhuǎn)換為32 bit數(shù)據(jù),。采用三級流水線的方式,進(jìn)行并行乘加運(yùn)算,,提高設(shè)計(jì)系統(tǒng)性能,。
    在雙口RAM組的實(shí)現(xiàn)上,是將一組simple dualport ram[3]并列成一個RAM組,。輸入由矩陣A,、B的數(shù)據(jù)信號和ROM輸出的地址信號組成;輸出就是一路矩陣A數(shù)據(jù)和一路矩陣B數(shù)據(jù),,數(shù)據(jù)深度與vectorsize等同,。其中每一個RAM的深度為rowsaa×columnsbb/vectorsize,保證數(shù)據(jù)的可重用性,,同時相對應(yīng)的ROM中存儲的地址信號分別為:
    A:1 2 1 2 3 3 1 2 3 4 4 4 1 2 3 4 5 5 5 5 1 2 3 4 5 6 6 6 6 6 ……
    B:1 1 2 2 1 2 3 3 3 1 2 3 4 4 4 4 1 2 3 4 5 5 5 5 5 1 2 3 4 5 ……
    以此類推即可得到相應(yīng)的地址信號查找表,。
    在數(shù)據(jù)緩存模塊的設(shè)計(jì)上也采用串行輸入并行輸出的方式。使用移位寄存器的方式實(shí)現(xiàn),,在并行浮點(diǎn)相加部分類似于上述的并行乘加[4]計(jì)算,,采用多級流水線并行相加的方式完成。
3.2 計(jì)算結(jié)果仿真
    對改進(jìn)的設(shè)計(jì)進(jìn)行仿真,,采用A9×16數(shù)據(jù)與B16×8數(shù)據(jù)相乘,,獲得計(jì)算結(jié)果仿真如圖4所示。

    從圖4可見,,loadaa,、loadbb、calcimatrix三者的時序滿足浮點(diǎn)矩陣運(yùn)算的時序要求,,在前兩者數(shù)據(jù)加載后,,加載calcimatrix上升沿,進(jìn)行矩陣相乘,。在outvalid為高電平時輸出數(shù)據(jù),,同時完成信號done輸出低電平。在輸出結(jié)果上,,共分為9個大組,,各大組有8個數(shù)據(jù),共組成72個數(shù)據(jù)結(jié)果,,其中顯示了第一部分輸出結(jié)果,,獲得與Matlab仿真相近的計(jì)算結(jié)果,在精度上相差不到萬分之一,。


    從表1中可以看出,,改進(jìn)后的IP核在處理時間上縮短了807個周期,同時在最高運(yùn)行時鐘上提升了15%,系統(tǒng)整體的持續(xù)性能增加了7.2 Gflops,。
    依據(jù)改進(jìn)前后的IP核,,使用Quartus9.1軟件進(jìn)行綜合布局布線,映射到Stratix Ⅲ EP3SE110F780C2器件中,,可獲得相應(yīng)的資源對比圖如圖5所示,。由于采用的都是并行浮點(diǎn)乘加運(yùn)算,所以在乘法器資源的消耗上不變,;同時由于只是在存儲器的存儲方式上作出變動,,所以二者的存儲資源相等。從而只需要對圖中顯示的矩陣階數(shù),、vectorsize大小進(jìn)行比較即可,,而浮點(diǎn)計(jì)算性能與最高時鐘頻率變化方向相同,所以只對ALM數(shù)量及最高時鐘頻率進(jìn)行對比,。
    從圖5中資源消耗對比可見,,當(dāng)設(shè)定vectorsize為固定值8(圖5左半部)時,隨著矩陣階數(shù)的增加,,改進(jìn)后的IP核在ALM資源消耗上較改進(jìn)前數(shù)量上有一定的減少,,在最高時鐘頻率上都有小幅度提升,這是因?yàn)榫仃囕斎霑r消耗時間過長,;當(dāng)設(shè)定矩陣階數(shù)為192×192(圖5右半部)時,,隨著vectorsize值的增加,改進(jìn)后IP核在ALM數(shù)量上有所減小,,在最高時鐘頻率上則有小幅度提升,,且波動幅度在3.4%左右??梢姡倪M(jìn)后IP核比原Altera的IP核綜合性能有所提升,。

參考文獻(xiàn)
[1] 田翔,,周凡,陳耀武,,等.基于FPGA的實(shí)時雙精度浮點(diǎn)矩陣乘法器設(shè)計(jì)[J].浙江大學(xué)學(xué)報(工學(xué)版),,2008(9).
[2] Altera Corp.Floating-point megafunctions user guide.2011.
[3] 胡小龍,朱艷亮.基于FPGA的圖像輸入緩存機(jī)制研究[J].微計(jì)算機(jī)信息,,2010(2).
[4] 蔡敏,,閔言燦.全流水線結(jié)構(gòu)雙精度浮點(diǎn)乘加單元的設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2010(1).
[5] STRICKLAND M.FPGA協(xié)處理的進(jìn)展[J].今日電子,,2010(4).

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