《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 嵌入式技術(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)
來(lái)源:電子技術(shù)應(yīng)用2012年第2期
張國(guó)禮,王建業(yè),肖 宇
空軍工程大學(xué) 導(dǎo)彈學(xué)院,陜西 三原713800
摘要: 基于Altera浮點(diǎn)IP核實(shí)現(xiàn)浮點(diǎn)矩陣相乘運(yùn)算時(shí),由于矩陣階數(shù)的增大,造成消耗的器件資源雖增加但系統(tǒng)性能反而下降的問(wèn)題,針對(duì)現(xiàn)有IP核存在數(shù)據(jù)加載不連貫、存儲(chǔ)帶寬不均勻的不足,提出采用并行化數(shù)據(jù)存儲(chǔ)、依據(jù)查找表加載數(shù)據(jù)和處理數(shù)據(jù)的方式對(duì)IP核進(jìn)行改進(jìn)。然后將改進(jìn)的浮點(diǎn)矩陣運(yùn)算在FPGA中實(shí)現(xiàn),經(jīng)過(guò)Quartus、Matlab軟件聯(lián)合仿真并進(jìn)行結(jié)果比對(duì),其誤差不超過(guò)萬(wàn)分之一,且節(jié)省了器件資源、提升了系統(tǒng)性能。仿真結(jié)果表明該設(shè)計(jì)可行,有利于提高諸多高性能領(lǐng)域浮點(diǎn)矩陣的運(yùn)算速度。
中圖分類號(hào): TN47
文獻(xiàn)標(biāo)識(shí)碼: A
文章編號(hào): 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)用于多個(gè)高性能領(lǐng)域,如陣列信號(hào)處理、核武器模擬、計(jì)算流體動(dòng)力學(xué)等。在這些科學(xué)計(jì)算中,需要大量的浮點(diǎn)矩陣運(yùn)算。而目前已實(shí)現(xiàn)的浮點(diǎn)矩陣運(yùn)算是直接使用VHDL語(yǔ)言編寫(xiě)的浮點(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)過(guò)專業(yè)調(diào)試和硬件實(shí)測(cè),性能穩(wěn)定且優(yōu)于手寫(xiě)代碼,但仍可對(duì)其進(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)的最高時(shí)鐘頻率,間接地影響系統(tǒng)整體性能。
    整個(gè)矩陣相乘電路原理是將輸入的單路數(shù)據(jù)(A、B矩陣共用數(shù)據(jù)線),通過(guò)控制器產(chǎn)生A、B矩陣地址信號(hào),控制著A矩陣數(shù)據(jù)輸出和B矩陣數(shù)據(jù)輸出,并將數(shù)據(jù)并行分段輸出到浮點(diǎn)乘加模塊進(jìn)行乘加運(yùn)算,之后串行輸出到一個(gè)緩存器模塊中,再以并行方式輸出到浮點(diǎn)相加模塊,最后獲得計(jì)算結(jié)果。從其原理可以看出,在數(shù)據(jù)輸入輸出方面仍有許多可改進(jìn)的地方。
2 IP核存在的缺陷及改進(jìn)
2.1 存在缺陷
    (1)輸入數(shù)據(jù)帶寬的不均衡性。在矩陣A、B的數(shù)據(jù)輸入時(shí),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ù)帶寬。由此可見(jiàn),A、B矩陣數(shù)據(jù)的存儲(chǔ)受到器件限制和存儲(chǔ)約束,同時(shí)由于在浮點(diǎn)乘加模塊的輸入端(A、B矩陣數(shù)據(jù))帶寬不同,造成A矩陣數(shù)據(jù)的輸入需要額外的處理時(shí)間。
    (2)加載數(shù)據(jù)的不連貫性。在矩陣數(shù)據(jù)加載時(shí),IP核通過(guò)將數(shù)據(jù)分段成等分的幾部分,用于向量相乘。由于矩陣A存儲(chǔ)帶寬窄需要4步寄存(由Blocks決定),在第3個(gè)周期時(shí)才加載數(shù)據(jù)B用于計(jì)算,送到一個(gè)FIFO中存儲(chǔ);在第6個(gè)時(shí)鐘周期時(shí)加載矩陣A分段的第二部分進(jìn)行各自的第二部分計(jì)算,最后當(dāng)計(jì)算到第15個(gè)周期時(shí),才可通過(guò)浮點(diǎn)相加,計(jì)算出矩陣C的第一個(gè)值,之后計(jì)算出矩陣C的其他值C11。從上述結(jié)構(gòu)可見(jiàn),在分段相乘之后,采用先對(duì)一個(gè)FIFO進(jìn)行存儲(chǔ),存滿后再對(duì)下一個(gè)數(shù)據(jù)FIFO進(jìn)行存儲(chǔ),造成時(shí)間上浪費(fèi)過(guò)多。
2.2 設(shè)計(jì)改進(jìn)
    鑒于上述缺陷,在輸入A、B矩陣的存儲(chǔ)方式上,進(jìn)行串行輸入到并行輸入的改進(jìn),使得兩個(gè)矩陣能同步輸入到浮點(diǎn)乘加模塊。在數(shù)據(jù)加載方式上,將A矩陣用3個(gè)周期加載完畢,再處理相乘運(yùn)算;將分段相乘結(jié)果進(jìn)行直接存儲(chǔ)相加,獲得C矩陣的第一個(gè)值,縮減運(yùn)算時(shí)間。設(shè)計(jì)的改進(jìn)框圖如圖1所示。


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

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

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

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


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

參考文獻(xiàn)
[1] 田翔,周凡,陳耀武,等.基于FPGA的實(shí)時(shí)雙精度浮點(diǎn)矩陣乘法器設(shè)計(jì)[J].浙江大學(xué)學(xué)報(bào)(工學(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)載。