專利名稱:一種利用gpu對小矩陣求逆的方法
技術領域:
本發(fā)明涉及無線通信技術領域,特別涉及一種利用GPU對小矩陣求逆的方法。
背景技術:
矩陣求逆是一種經(jīng)常遇到的重要矩陣運算,在信號處理、神經(jīng)網(wǎng)絡、自動控制等領域都有廣泛應用。特別是在4G無線通信標準中,多個關鍵功能模塊,例如OFDM (Orthogonal Frequency Division Multiplexing,正交頻分復用)系統(tǒng)信道估計、ΜΙΜΟ (Multiple-Input Multiple-Out-put,多輸入輸出天線系統(tǒng))信號檢測等,當采用迫零算法或最小均方誤差算法時都可以歸結(jié)為對信道矩陣的某種變換進行求逆操作,另外,對于碼長較長的 LDPC(Low Density Parity Check Code,低密度奇偶校驗碼)碼編碼也需要進行大矩陣求逆。矩陣求逆的處理速度直接影響了上述算法的執(zhí)行速度,而矩陣求逆往往是非常費時的?,F(xiàn)有的矩陣求逆大多是在CPU上通過軟件實現(xiàn)的,能夠滿足較低數(shù)據(jù)傳輸速率的要求。也有部分在FPGA(Field-Programmable Gate Array,現(xiàn)場可編程門陣列)、DSP(Digital Signal Processing,數(shù)字信號處理)硬件上實現(xiàn)矩陣求逆的,能夠滿足較高傳輸速率的要求,但靈活性、可配置性較差。近年來,隨著GPU(Graphic Processing Unit,圖形處理器) 在非圖形領域的科學計算中逐漸嶄露頭角,人們開始研究基于GPU的矩陣求逆算法。現(xiàn)有的基于GPU的矩陣求逆算法大多集中于高性能計算領域,針對維數(shù)較大(例如10MX 10M) 的矩陣,并且在一個應用中僅需進行一次大矩陣求逆。而在無線通信系統(tǒng)中,需要對數(shù)量眾多的小矩陣進行求逆處理。例如,LTE(Long Term Evolution,長期演進)標準中規(guī)定在帶寬為5MHz時,可以采用2X2MIM0,或 4 X 2MIM0,在20MHz帶寬時,可以采用4 X 4MIM0,甚至8 X 8MIM0,此時信道矩陣的維度分別是2X2、4X2、4X4、8X8,經(jīng)過變換后需要進行求逆處理的矩陣維度分別是2X2、4X4、 8X8。而當帶寬為5MHz、1 OMHz、15MHz、20MHz時,要求0. 5ms的子幀周期內(nèi)分別含有300、 600、900、1200個OFDM符號,即要在0. 5ms內(nèi)分別完成300、600、900、1200個維度為2X2、 4X4、8X8的矩陣的求逆處理。與對大矩陣的一次求逆相比,對大量小矩陣的求逆在算法流程、數(shù)據(jù)調(diào)度、計算線程和線程塊的數(shù)據(jù)分發(fā)等方面都存在較大的不同?,F(xiàn)有做法是,要么在一個計算線程中完成一個矩陣的求逆,要么在一個線程塊中完成一個矩陣求逆。這兩類做法相對比較直觀,易于實現(xiàn),但在GPU上的并行效率較低。這是因為,從GPU的硬件結(jié)構看,大量的CUDA (Compute Unified Device Architecture,一種計算架構)核被分成若干個流多處理器(SMs),例如最新的NVIDIA Tesla C2050由14個SM組成,每個SM包含32個 CUDA核。每個SM作為一個單指令多線程(SIMT)處理器進行工作,而每個SM還含有一定大小的共享存儲器,在共享存儲器上的數(shù)據(jù)處理速度非??欤⑶已訒r很小。而如果用一個線程計算一個矩陣的逆,那么每個線程上消耗的共享存儲器較多,從而限制了 SM上并發(fā)的線程個數(shù),進而降低其并行效率。另一方面,如果用一個線程塊計算一個矩陣的逆,即線程塊中的每個線程處理矩陣的一個元素,由于我們要處理的矩陣尺寸往往較小(例如,2X2,4X4,8X8),因此在一個線程塊上的并行線程太小,也會影響其效率。
發(fā)明內(nèi)容
(一)要解決的技術問題本發(fā)明要解決的技術問題是如何提供一種利用GPU對小矩陣求逆的方法,以提高對小矩陣求逆運算的速度。( 二 )技術方案為解決上述技術問題,本發(fā)明提供一種利用GPU對小矩陣求逆的方法,其包括步驟B 在GPU的共享存儲器上創(chuàng)建維度為KX (NXN)的二維數(shù)組sm_a,創(chuàng)建兩個維度為KXN的二維數(shù)組sm_is和sm_js ;K和N均為大于0的自然數(shù);C 將GPU的全局存儲器中的K個N階方陣并行存儲到所述共享存儲器的二維數(shù)組 sm_a 中;D 利用所述二維數(shù)組sm_is和sm_js,在所述共享存儲器中完成對所述K個N階方陣的求逆處理。優(yōu)選地,所述步驟D中,利用所述二維數(shù)組sm_is和sm_js,并采用全選主元高斯消去法,在所述共享存儲器中并行完成對所述K個N階方陣的求逆處理。優(yōu)選地,所述步驟D具體包括步驟Dl 將K個N階方陣A分別作為初始的當前方陣;D2 判斷K個當前方陣是否是1階方陣,如果是,退出;否則,將K個當前方陣中的最大元素的行下標分別存儲到所述二維數(shù)組sm_is中,列下標分別存儲到所述二維數(shù)組 sm_js 中;D3:對K個當前方陣,分別用所述行下標和列下標的組合對應的元素替換K個當前方陣中最上一行的對角線元素;D4:對K個當前方陣中的非對角線元素根據(jù)如下公式按照從上至下并且從左至右的順序進行更新A(k, j) = A(k, j)/A(k, k);A(i,j) = A(i,j)-A(i, k) XA(k,j);A (i,k) = -A (i,k) /A (k, k);其中
權利要求
1.一種利用GPU對小矩陣求逆的方法,其特征在于,包括步驟B 在GPU的共享存儲器上創(chuàng)建維度為KX (NXN)的二維數(shù)組sm_a,創(chuàng)建兩個維度為 KXN的二維數(shù)組sm_is和sm_js ;K和N均為大于0的自然數(shù);C 將GPU的全局存儲器中的K個N階方陣并行存儲到所述共享存儲器的二維數(shù)組sm_ a中;D 利用所述二維數(shù)組sm_is和sm_js,在所述共享存儲器中完成對所述K個N階方陣的求逆處理。
2.如權利要求1所述的方法,其特征在于,所述步驟D中,利用所述二維數(shù)組sm_is和 sm_js,并采用全選主元高斯消去法,在所述共享存儲器中并行完成對所述K個N階方陣的求逆處理。
3.如權利要求1所述的方法,其特征在于,所述步驟D具體包括步驟 Dl 將K個N階方陣A分別作為初始的當前方陣;D2 判斷K個當前方陣是否是1階方陣,如果是,退出;否則,將K個當前方陣中的最大元素的行下標分別存儲到所述二維數(shù)組sm_is中,列下標分別存儲到所述二維數(shù)組sm_js 中;D3 對K個當前方陣,分別用所述行下標和列下標的組合對應的元素替換K個當前方陣中最上一行的對角線元素;D4:對K個當前方陣中的非對角線元素根據(jù)如下公式按照從上至下并且從左至右的順序進行更新A(k,j) = A(k, j)/A(k,k);A(i, j) =A(i,j)-A(i,k)XA(k,j);A(i,k) =-A(i,k)/A(k,k);其中,0彡i,j彡N-I, i乒k,j乒k,i乒j ;D5:對K個當前方陣,分別刪除最上一行和最左一列,得到新的K個當前方陣,執(zhí)行步驟D20
4.如權利要求1所述的方法,其特征在于,在所述步驟B之前還包括步驟Α:選擇由二維計算線程組成的線程塊,所述線程塊的第一維的數(shù)值對應待處理方陣的階數(shù),設定為N, 第二維的數(shù)值對應待處理方陣的個數(shù),設定為K。
5.如權利要求1所述的方法,其特征在于,在所述步驟D之后還包括步驟E將所述K 個N階方陣的求逆結(jié)果從所述共享存儲器轉(zhuǎn)移到所述全局存儲器。
6.如權利要求1所述的方法,其特征在于,所述N的取值為2、4或者8。
全文摘要
本發(fā)明公開了一種利用GPU對小矩陣求逆的方法,涉及無線通信領域。所述方法包括步驟在GPU的共享存儲器上創(chuàng)建維度為K×(N×N)的二維數(shù)組sm_a,創(chuàng)建兩個維度為K×N的二維數(shù)組sm_is和sm_js;K和N均為大于0的自然數(shù);將GPU的全局存儲器中的K個N階方陣并行存儲到所述共享存儲器的二維數(shù)組sm_a中;利用所述二維數(shù)組sm_is和sm_js,在所述共享存儲器中完成對所述K個N階方陣的求逆處理。所述方法既增加了并行的線程,又沒有占用過多的共享存儲器,且具有較好的可擴展性,顯著提高了對小矩陣求逆運算的速度。
文檔編號G06F17/16GK102567283SQ20111040735
公開日2012年7月11日 申請日期2011年12月8日 優(yōu)先權日2011年12月8日
發(fā)明者周春暉, 李云洲, 王京, 趙明, 趙熠飛, 隋丹 申請人:清華大學