本發(fā)明涉及一種針對矩陣與向量乘運算的低密度奇偶校驗碼(lowdensityparitycheckcode,ldpc)編碼器及其方法,特別地,涉及用于優(yōu)化ldpc編碼過程的矩陣與向量乘法單元
背景技術:
ldpc碼廣泛應用于高速無線通信系統(tǒng)的信道編碼,并將在高性能固態(tài)存儲系統(tǒng)中應用。在《efficientencodingoflow-densityparity-checkcodes》([j].ieeetransinformationtheory,2001,47(2):638–656)中提出了ru編碼算法,將校驗矩陣變換為準下三角矩陣,利用gauss法求解方程以完成編碼。而在《在線可編程qc-ldpc碼高速編碼器結構》(清華大學學報(自然科學版)2009年第49卷第7期1025-1018頁)提出了支持可變參數的準循環(huán)低密度奇偶校驗碼編碼器結構。
技術實現要素:
現有的ldpc編碼技術從結構上看,功能模塊和控制單元較多,較為復雜,軟硬件功能模塊定義不清,各個功能模塊的利用率不高,編碼的吞吐率不高。而且不夠靈活,不能適用于結構不同的準循環(huán)校驗矩陣。
本發(fā)明簡化了ldpc編碼器的結構,將繁瑣的控制流簡化為指令的控制,將矩陣求逆等復雜運算改為線下軟件工作,提高了各個功能部件的運行效率,提高吞吐率,可以適用于不同結構和碼率的準循環(huán)校驗矩陣的編碼。
本發(fā)明的一個目的在于高效地實現用于ldpc編碼的矩陣與向量乘電路。將計算過程在硬件與可編程微碼指令之間合理分配。
本發(fā)明的又一個目的在于優(yōu)化矩陣與向量乘的計算過程,通過重用矩陣與向量乘過程中的中間結果,減少執(zhí)行矩陣與向量乘過程中執(zhí)行的指令數量,從而加快向量與矩陣乘的執(zhí)行速度。
根據本發(fā)明的第一方面,提供了本發(fā)明第一方面的第一實施方式的一種矩陣與向量乘運算方法,所述矩陣m為循環(huán)移位單位矩陣的和矩陣,包括:第一步驟:初始化全局寄存器;第二步驟:將向量s移位指定位數并與全局寄存器的內容相異或,并將異或結果存儲在所述全局寄存器中;第三步驟:存儲所述全局寄存器中的值。
根據本發(fā)明的第一方面的第一實施方式,提供了根據本發(fā)明第一方面的第二實施方式,其中,當所述矩陣m為多個循環(huán)移位單位矩陣的和矩陣時,重復執(zhí)行第二步驟。
根據本發(fā)明的第一方面的第一或第二實施方式,提供了根據本發(fā)明第一方面的第三實施方式,進一步包括:第四步驟:從數據存儲器取得向量s。
根據本發(fā)明的第一方面的第三實施方式,提供了根據本發(fā)明第一方面的第四實施方式,進一步包括:第五步驟:將第四步驟中的向量s加載到向量寄存器。
根據本發(fā)明第一方面的第一、第三或第四實施方式,提供了根據本發(fā)明第一方面的第五實施方式,其中,所述矩陣m=i1+i2+...im+…+in,其中im是循環(huán)移位單位矩陣,并且從單位矩陣i循環(huán)移位dm位得到循環(huán)移位單位矩陣im,其中,1≤m≤n;在第二步驟中,對于構成矩陣m的n個循環(huán)移位單位矩陣i1,i2,...im,…in的每一個循環(huán)移位單位矩陣im,執(zhí)行下述操作:使向量s移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存入全局寄存器。
根據本發(fā)明第一方面的第三實施方式,提供了根據本發(fā)明第一方面的第六實施方式,其中,所述矩陣m=i1+i2+...im+…+in,其中i1、im是循環(huán)移位單位矩陣,并且從單位矩陣i移位d1位得到i1,從i1*s循環(huán)移位dm'位得到循環(huán)移位單位矩陣im,其中,2≤m≤n;第二步驟包括:使向量s移位d1位,將移位結果與全局寄存器的值異或得到特定值,并存儲到全局寄存器;將全局寄存器的特定值存儲到數據存儲器;對于構成矩陣m的n-1個循環(huán)移位單位矩陣i2,i3,...im,…,in中的每一個循環(huán)移位單位矩陣im,其中2≤m≤n,執(zhí)行下述操作:從數據存儲器取得特定值,使特定值移位dm'位,將移位結果與全局寄存器的值異或,并將異或結果存入全局寄存器。
根據本發(fā)明第一方面的第四實施方式,提供了根據本發(fā)明第一方面的第七實施方式,其中,所述矩陣m=i1+i2+...im+…+in,其中i1、im是循環(huán)移位單位矩陣,并且從單位矩陣i移位d1位得到i1,從i1*s循環(huán)移位dm'位得到循環(huán)移位單位矩陣im,其中,2≤m≤n;第二步驟(s20)包括:使向量s移位d1位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;將全局寄存器的值存儲到向量寄存器;對于構成矩陣m的n-1個循環(huán)移位單位矩陣i2,i3,...im,…in中的每一個循環(huán)移位單位矩陣im,其中2≤m≤n,執(zhí)行下述操作:使向量寄存器的值移位dm'位,將移位結果與全局寄存器的值異或,并將異或結果存入全局寄存器。
根據本發(fā)明第一方面的第四實施方式,提供了根據本發(fā)明第一方面的第八實施方式,其中構成矩陣m的n個循環(huán)移位單位矩陣{i1,i2,…in}是排序的,使得
根據本發(fā)明第一方面的第四實施方式,提供了根據本發(fā)明第一方面的第九實施方式,其中,所述矩陣m=k1+k2+...km+…+kn,其中k1、km是兩個循環(huán)移位單位矩陣的和矩陣,從k1循環(huán)移位dm位得到矩陣km,從單位矩陣i循環(huán)移位di1位得到循環(huán)移位單位矩陣i1,從單位矩陣i循環(huán)移位di2得到循環(huán)移位單位矩陣i2,di1與di2是連續(xù)的自然數,以及k1=i1+i2,其中,2≤m≤n;第二步驟包括:使向量s移位di1位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;使向量s移位di2位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;將全局寄存器的值存儲到向量寄存器;對于構成矩陣m的n-1個矩陣k2,...km,…kn中的每一個矩陣km,其中,2≤m≤n,執(zhí)行下述操作:使向量寄存器的值移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存儲到全局寄存器。
根據本發(fā)明第一方面的第三實施方式,提供了根據本發(fā)明第一方面的第十實施方式,其中,所述矩陣m=k1+k2+...km+…+kn,其中k1、km是兩個循環(huán)移位單位矩陣的和矩陣,從k1循環(huán)移位dm位得到矩陣km,從單位矩陣i循環(huán)移位di1位得到循環(huán)移位單位矩陣i1,從單位矩陣i循環(huán)移位di2得到循環(huán)移位單位矩陣i2,di1與di2是連續(xù)的自然數,以及k1=i1+i2,其中,2≤m≤n;第二步驟包括:使向量s移位di1位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;使向量s移位di2位,將移位結果與全局寄存器的值異或得到特定值,并存儲到全局寄存器;將全局寄存器的特定值存儲到數據存儲器;對于構成矩陣m的n-1個矩陣k2,....km,…kn中的每一個矩陣km,其中2≤m≤n,執(zhí)行下述操作:從數據存儲器取得特定值,使特定值移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存儲到全局寄存器。
根據本發(fā)明第一方面的第三實施方式,提供了根據本發(fā)明第一方面的第十一實施方式,其中,所述矩陣m=k1+k2+...km+…+kn,其中km是p個循環(huán)移位單位矩陣的和矩陣,其中p為正整數,從k1循環(huán)移位dm位得到矩陣km,其中2≤m≤n,從單位矩陣i循環(huán)移位dj位得到循環(huán)移位單位矩陣ij,其中1≤j≤p,以及k1=i1+i2+...ij+…+ip,di1,di2…dij,…dip是連續(xù)的自然數;第二步驟包括:對于構成矩陣k1的p個循環(huán)移位單位矩陣的每一個,執(zhí)行下述操作:使向量s的值移位d1j位,將移位結果與全局寄存器的值異或得到特定值,并存儲到全局寄存器;將全局寄存器的特定值存儲到數據存儲器;對于構成矩陣m的n-1個矩陣k2,...km,…kn中的每一個矩陣km,其中2≤m≤n,執(zhí)行下述操作:從數據存儲器取得特定值,使特定值移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存儲到全局寄存器。
根據本發(fā)明第一方面的第三實施方式,提供了根據本發(fā)明第一方面的第十一實施方式,其中,所述矩陣m=k1+k2+..km+….+kn,其中km是p個循環(huán)移位單位矩陣的和矩陣,其中p為正整數,從k1循環(huán)移位dm位得到矩陣km,其中2≤m≤n,從單位矩陣i循環(huán)移位dij位得到循環(huán)移位單位矩陣ij,其中1≤j≤p,以及k1=i1+i2+...ij+…+ip,di1,di2…dij,…dip是連續(xù)的自然數;第二步驟包括:對于構成矩陣k1的p個循環(huán)移位單位矩陣的每一個,執(zhí)行下述操作:使向量s的值移位d1j位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;將全局寄存器的值存儲到向量存儲器;對于構成矩陣m的n-1個矩陣k2,...km,…kn中的每一個矩陣km,執(zhí)行下述操作:使向量寄存器的值移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存儲到全局寄存器。
根據本發(fā)明第一方面的第四實施方式,提供了根據本發(fā)明第一方面的第十二實施方式,其中,所述矩陣m=k1+k2+..km+….+kn,其中km是p個循環(huán)移位單位矩陣的和矩陣,其中p為正整數,從k1循環(huán)移位dm位得到矩陣km,其中2≤m≤n,從單位矩陣i循環(huán)移位dij位得到循環(huán)移位單位矩陣ij,其中1≤j≤p,以及k1=i1+i2+...ij+…+ip,di1,di2…dij,…dip是連續(xù)的自然數;第二步驟(s20)包括:對于構成矩陣k1的p個循環(huán)移位單位矩陣的每一個,執(zhí)行下述操作:使向量s的值移位d1j位,將移位結果與全局寄存器的值異或并存儲到全局寄存器;將全局寄存器的值存儲到向量存儲器;對于構成矩陣m的n-1個矩陣k2,...km,…kn中的每一個矩陣km,執(zhí)行下述操作:使向量寄存器的值移位dm位,將移位結果與全局寄存器的值異或,并將異或結果存儲到全局寄存器。
根據本發(fā)明第一方面的第九至第十二實施方式,提供了根據本發(fā)明第一方面的第十三實施方式,其中構成矩陣m的n個循環(huán)移位單位矩陣的和矩陣{k1,k2,...,kn}是排序的,使得
根據本發(fā)明第二方面,提供了根據本發(fā)明第二方面的第一實施方式的計算矩陣m與向量s相乘的方法,其中,所述矩陣
對數據存儲器中保存的多個
根據本發(fā)明的第三方面,提供了提供了一種矩陣與向量乘運算單元,包括:移位單元、異或單元和全局寄存器,其中,移位單元,用于將向量移位指定位數,以得到移位結果;異或單元,與所述移位單元和所述全局寄存器相連接,用于接收來自所述移位單元的所述移位結果,并將所述移位結果與所述全局寄存器中的存儲值相異或,以得到異或結果;全局寄存器,用于保存來自所述異或單元的所述異或結果。
根據本發(fā)明的第三方面的一個實施方式,進一步包括:指令存儲器,用于存儲指令,所述指令包括第一指令,其中,所述第一指令指示所述移位單元將向量移位指定位數以得到移位結果和指示所述異或單元將所述移位結果與所述存儲值相異或。
根據本發(fā)明的第三方面的一個實施方式,進一步包括:數據存儲器,與所述移位單元和所述全局寄存器相連接,用于存儲向量。
根據本發(fā)明的第三方面的一個實施方式,進一步包括向量寄存器,與所述數據存儲器和所述移位單元相連接,用于接收來自所述數據存儲器的向量并將向量提供給所述移位單元。
根據本發(fā)明的第四方面,提供了本發(fā)明第四方面的一種矩陣與向量乘運算裝置,所述矩陣m為循環(huán)移位單位矩陣的和矩陣,所述裝置包括:用于初始化全局寄存器的模塊;用于將向量s移位指定位數并與全局寄存器的內容相異或,并將異或結果存儲在所述全局寄存器中的模塊;用于存儲所述全局寄存器中的值的模塊。
根據本發(fā)明的第五方面,提供一種包含計算機程序代碼的計算機程序,當被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行根據本發(fā)明第一方面或第二方面的實施方式的方法。
根據本發(fā)明的第六方面,提供一種包括程序代碼的程序,當被載入存儲設備并在存儲設備上執(zhí)行時,所述計程序代碼使所述存儲設備執(zhí)行根據本發(fā)明第一方面或第二方面的實施方式的方法。
本發(fā)明優(yōu)化矩陣與向量乘的計算過程,通過重用矩陣與向量乘過程中的中間結果,減少執(zhí)行矩陣與向量乘過程中執(zhí)行的指令數量,從而加快向量與矩陣乘的執(zhí)行速度。
附圖說明
通過閱讀下文優(yōu)選實施方式的詳細描述,各種其他的優(yōu)點和益處對于本領域普通技術人員將變得清楚明了。附圖僅用于示出優(yōu)選實施方式的目的,而并不認為是對本發(fā)明的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。其中在附圖中,參考數字之后的字母標記指示多個相同的部件,當泛指這些部件時,將省略其最后的字母標記。在附圖中:
圖1a示出了根據本發(fā)明一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖;
圖1b示出了本發(fā)明的一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖;
圖2示出了根據本發(fā)明一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖;
圖3a示出了根據本發(fā)明另一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖;
圖3b示出了根據本發(fā)明一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖;
圖4a示出了根據本發(fā)明另一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖;
圖4b示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖;
圖5示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖;
圖6示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖。
在附圖中,使用相同或類似的標號來指代相同或類似的元素。
具體實施方式
下面結合附圖和具體的實施方式對本發(fā)明作進一步的描述。
在ldpc編碼過程中,矩陣m與向量s的乘法操作是重要操作。矩陣m是n個循環(huán)移位單位矩陣的和矩陣。矩陣m與向量s的乘法操作可分解為對向量s的移位操作,以及對移位結果的模2和。根據本發(fā)明ldpc編碼器中,通過執(zhí)行指令序列來實現矩陣與向量s的乘法。進一步地,在進行l(wèi)dpc編碼過程中,涉及多次矩陣與向量乘法操作。提供分別對應于多個矩陣與向量乘法操作的多段指令序列,以及提供對應于多個矩陣與向量乘法的矩陣m與向量s,并通過執(zhí)行多段指令序列得到中間和/或最終ldpc編碼計算結果。在多段指令序列的控制下,根據本發(fā)明實施例的矩陣與向量乘運算單元實現了多個矩陣與向量乘法運算,并實現ldpc編碼。因而根據本發(fā)明實施例的矩陣與向量乘運算單元也是一種ldpc編碼器。
圖1a示出了根據本發(fā)明一個方面的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖。如圖1所示,矩陣與向量乘運算單元,包括:移位單元140、異或單元160和全局寄存器150,其中,移位單元140用于將向量移位指定位數,以得到移位結果,在這里需要說明的是,移位單元140能夠移位的目標對象可以是任意類型的數據,例如可以為二進制數據、標量、向量等。在根據本發(fā)明的實施例中,移位單元140移位的目標對象為向量,通過對向量進行移位得到移位結果。
異或單元160分別與移位單元140和全局寄存器150相連接,用于接收來自移位單元140中的移位結果,并將移位結果與全局寄存器150中的存儲值相異或,以得到異或結果。異或單元160接收來自移位單元140中的移位結果,在這里需要說明的是,移位結果為移位單元140對任意數據進行移位后得到的移位結果,任意數據例如可以為二進制數據,可以為向量,可以為標量等。本發(fā)明中移位結果為移位單元140對向量進行移位后得到的移位結果,異或單元160將移位結果與全局寄存器150中的存儲值相異或,以得到異或結果。本發(fā)明中全局寄存器150中的存儲值為根據矩陣與向量乘運算的原理所得到的異或數值,在下文中將詳細描述。
全局寄存器150用于保存來自異或單元160中的異或結果,并傳送異或結果。異或運算相當于比特的模2和,向量的循環(huán)移位操作相當于循環(huán)移位單位矩陣與向量的乘法。因而通過控制移位與異或操作的操作數與操作過程,在全局寄存器150中將得到矩陣與向量乘運算的最終結果。全局寄存器150中的計算結果可以存儲在存儲器中,并用于進一步的計算。
圖1b示出了本發(fā)明的一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖??梢岳斫?,圖1b所示的流程圖僅僅是示意性的,其中記載的步驟可以按照不同順序執(zhí)行、并行執(zhí)行、省略和/或增加其他步驟。如圖1b所示,ldpc編碼器中矩陣m與向量s乘運算方法包括步驟s10:初始化全局寄存器;步驟s20:將向量s移位指定位數并與全局寄存器的內容相異或,并將異或結果存儲在所述全局寄存器中;步驟s30:存儲所述全局寄存器中的值。在一個例子中,矩陣m由n個循環(huán)移位單位矩陣矩陣構成,重復執(zhí)行步驟s20n次。
圖2示出了根據本發(fā)明一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖。
根據本發(fā)明的一個實施方式,如圖2所示,用于ldpc編碼的矩陣與向量乘運算單元進一步包括指令存儲器120,指令存儲器120用于存儲指令,指令的數量可以有多條,指令的種類可以有多種。
根據本發(fā)明的矩陣與向量乘運算單元通過執(zhí)行指令序列完成ldpc編碼或者ldpc編碼中的矩陣與向量乘法操作。在執(zhí)行指令時,移位單元140可對向量執(zhí)行指定位數的移位操作,移位結果被發(fā)送給異或單元160,其中移位的位數由指令指定。在執(zhí)行指令時,可將數據加載到全局寄存器150,或存儲全局寄存器150的數據。在執(zhí)行指令時,異或單元160可對全局寄存器150的數據與移位單元140的輸出數據進行異或操作,并將結果存儲在全局寄存器150中。通過執(zhí)行指令存儲器120中的多條指令,完成ldpc編碼過程中的矩陣與向量乘運算。
圖3a示出了根據本發(fā)明另一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖。
根據本發(fā)明的一個實施方式,如圖3a所示,用于ldpc編碼的矩陣與向量乘運算單元進一步包括數據存儲器110,與移位單元140和全局寄存器150(又稱為rd寄存器)相連接。響應于執(zhí)行指令,可將數據存儲器110的指定位置的數據加載到全局寄存器150,或者將全局寄存器150的內容存儲到數據存儲器110的指定位置。響應于執(zhí)行指令,移位單元140對數據存儲器110的指定位置的數據進行移位,以及將移位單元140的移位結果與全局寄存器150的內容求異或,并將異或結果存儲在全局寄存器150中。
根據本發(fā)明的一個實施方式,響應于執(zhí)行指令存儲器120中的指令,將指令所指定的數據存儲器110中的向量加載到全局寄存器150。在一個例子中,為了將全局寄存器150初始狀態(tài)設置為0,通過執(zhí)行指令,將數字“零”或數據存儲器110中存儲了數字“零”的存儲空間的內容加載到全局寄存器150。
根據本發(fā)明的一個實施方式,響應于執(zhí)行指令,將全局寄存器150的內容存儲到數據存儲器110。
在表1中展示了根據本發(fā)明實施例的指令列表。通過組合這些指令,使得通過指令序列的執(zhí)行來實現矩陣與向量乘法或ldpc編碼。因而根據本發(fā)明實施例的矩陣與向量乘運算單元也是一種ldpc編碼器。指令序列存儲在指令存儲器120中。
在ldpc編碼器執(zhí)行l(wèi)oad指令時,依load指令中描述的參數,將數據從數據存儲器110中加載到全局寄存器150。load指令加載的數據可以是向量s。load指令可使用多種尋址方式。在一個例子中,load指令中描述的參數指示要加載的數據在數據存儲器110中的位置。在又一個例子中,load指令中描述的參數指示從寄存器中獲得要加載的數據在數據存儲器110中的地址。load指令中描述的參數還可以指示相對于基地址的偏移值。
在ldpc編碼器執(zhí)行store指令時,依store指令中描述的參數,將全局寄存器150中的數據存儲到數據存儲器110。store指令存儲的數據可以是對向量s執(zhí)行移位和/或異或后的結果。store指令可使用多種尋址方式。
在ldpc編碼器執(zhí)行shift_xor指令時,依shift_xor指令中描述的參數,由移位單元140將數據存儲器中的指定數據移位指定位數,將移位結果送入異或單元160,由異或單元160將該移位結果與全局寄存器150的值相異或,并將結果存儲到全局寄存器150中。
表1指令列表
在根據圖3a所示的本發(fā)明的又一實施例中,ldpc編碼器還能夠執(zhí)行nop指令。nop指令代表空操作,用于避免ldpc編碼器指令執(zhí)行過程中的資源訪問沖突。
圖3b示出了根據本發(fā)明一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖。
如圖3b所示,ldpc編碼器中矩陣與向量乘運算方法包括步驟s10:初始化全局寄存器。步驟s12:從數據存儲器取得向量s。步驟s20:將向量s移位指定位數并與全局寄存器的內容相異或,并將異或結果存儲在所述全局寄存器中。步驟s30:存儲所述全局寄存器中的值。
圖4a示出了根據本發(fā)明另一個實施方式的用于ldpc編碼的矩陣與向量乘運算單元的結構示意圖。
根據本發(fā)明的一個實施方式,如圖4a所示,用于ldpc編碼的矩陣與向量乘運算單元包括數據存儲器110、指令存儲器120、移位單元140、全局寄存器(又稱為rd(目的)寄存器)150、異或單元160和向量寄存器(又稱為rs(源)寄存器)130。向量寄存器130與數據存儲器110和移位單元140相連接,用于接收來自數據存儲器110的向量并將向量提供給移位單元140。
根據本發(fā)明的一個實施方式,響應于執(zhí)行指令存儲器120中的指令,將指令所指定的數據加載到向量寄存器130。在根據本發(fā)明的例子中,加載到向量寄存器130的數據為矩陣與向量乘操作中作為乘數的向量。
在表2中展示了根據本發(fā)明實施例的指令列表。通過組合這些指令,使得通過指令序列的執(zhí)行來實現矩陣與向量乘法或ldpc編碼。因而根據本發(fā)明圖4a所展示的實施例的矩陣與向量乘運算單元也是一種ldpc編碼器。指令序列存儲在指令存儲器120中。
在ldpc編碼器執(zhí)行l(wèi)oad指令時,依load指令中描述的參數,將數據從數據存儲器110中加載到向量寄存器130或目的寄存器150。load指令加載的數據可以是矩陣與向量乘法操作中作為乘數的向量。load指令可使用多種尋址方式。在一個例子中,load指令中描述的參數指示要加載的數據在數據存儲器110中的位置。在又一個例子中,load指令中描述的參數指示從寄存器中獲得要加載的數據在數據存儲器110中的地址。load指令中描述的參數還可以指示相對于基地址的偏移值。
在ldpc編碼器執(zhí)行store指令時,依store指令中描述的參數,將目的寄存器150中的數據存儲到數據存儲器110。store指令存儲的數據可以是對向量執(zhí)行移位和/或異或后的結果。store指令可使用多種尋址方式。
在ldpc編碼器執(zhí)行shift_xor指令時,依shift_xor指令中描述的參數,由移位單元140將向量寄存器130中的內容移位指定位數,將移位結果送入異或單元160,由異或單元160將該移位結果與目的寄存器150的值相異或,并將結果存儲到目的寄存器150中。
表2指令列表
在根據圖4a所示的本發(fā)明的又一實施例中,ldpc編碼器還能夠執(zhí)行nop指令。nop指令代表空操作,用于避免ldpc編碼器指令執(zhí)行過程中的資源訪問沖突。
圖4b示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖。
如圖4b所示,ldpc編碼器中矩陣與向量乘運算方法包括步驟s10:初始化全局寄存器。步驟s12:從數據存儲器取得向量s。步驟s14:將步驟s12中的向量s加載到向量寄存器。步驟s20:將向量s移位指定位數并與全局寄存器的內容相異或,并將異或結果存儲在所述全局寄存器中。步驟s30:存儲所述全局寄存器中的值。
下面通過具體實施例詳細描述根據指令序列,ldpc編碼器所實現的矩陣與向量乘的運算。
在ldpc編碼過程中,矩陣m與向量s的乘法操作是重要操作。矩陣m是n個循環(huán)移位單位矩陣的和矩陣。循環(huán)移位單位矩陣是單位矩陣經循環(huán)移位得到的矩陣。例如,式(1)為循環(huán)移位單位矩陣的例子,式(1)的循環(huán)移位單位矩陣是8*8的單位矩陣循環(huán)右移一位得到的矩陣。
由于m是n個循環(huán)移位單位矩陣的和矩陣。令m=i1+i2+…+in,其中im(1≤m≤n)是循環(huán)移位單位矩陣,m與n均為正整數。
矩陣m與向量s的乘法操作m*s=(i1+i2+…+in)*s。單位循環(huán)移位單位矩陣im(1≤m≤n)與向量s的乘法操作可轉換為對向量s的移位操作。而(i1+i2+…+in)*s可轉換為對向量s的移位,以及對移位結果的模2和。即(i1+i2+…+in)*s可以分解為shift(s,d1)xorshift(s,d2)xorshift(s,d3)…xorshift(s,dn),其中shift(s,dm)表示對向量s移位dm位;dm表示從單位陣i循環(huán)右移dm位得到循環(huán)移位單位矩陣im;xor表示異或操作??梢姡仃嚺c向量相乘(m*s)可轉換為一系列的移位與異或操作。
下面通過具體的例子對根據本發(fā)明的實施例計算矩陣m與向量s的乘法操作的過程進行說明。
實施例1
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(2)式,向量s如(3)式:
s=(10010010)'(3)
在(2)式中,m=i1+i2+i3,其中i1是單位陣i循環(huán)右移1位得到循環(huán)移位單位矩陣,i2是單位陣i循環(huán)右移3位得到循環(huán)移位單位矩陣,i3是單位陣i循環(huán)右移7位得到循環(huán)移位單位矩陣。則m*s=i1*sxori2*sxori3*s的計算過程可以分解為如下操作:shift(s,1)xorshift(s,3)xorshift(s,7)。而這些操作可通過在如圖3a的ldpc編碼器中執(zhí)行存儲在指令存儲器120中的下列指令序列來實現:
①loadrd,0;
②shift_xor[addr1],1;
③shift_xor[addr1],3;
④shift_xor[addr1],7;
⑤storeaddr2,rd。
如圖3a所示,用于ldpc編碼器的矩陣與向量乘運算單元,包括:數據存儲器110、指令存儲器120、移位單元140、全局寄存器(rd)150和異或單元160,數據存儲器110存儲矩陣m和向量s,數據存儲器110分別與移位單元140和全局寄存器150相連接,移位單元140與異或單元160相連接,異或單元160與全局寄存器150相連接。
執(zhí)行指令①時,,加載給全局寄存器150的向量值為0,即將全局寄存器150初始化為0。
執(zhí)行指令②時,移位單元140將數據存儲器110中地址為addr1處存儲的向量s移位1位,異或單元160將移1位的向量與全局寄存器150(初始值為0)的值相異或,異或結果存儲在全局寄存器150中。此時全局寄存器150中的值為i1*s。
執(zhí)行指令③時,移位單元140將數據存儲器110中地址為addr1處存儲的向量s移位3位,異或單元160將移3位的向量s與全局寄存器150中存儲的執(zhí)行完指令②后的值相異或,將異或結果存儲在全局寄存器150中。此時全局寄存器150中的值為i1*sxori2*s。
執(zhí)行指令④時,移位單元140將數據存儲器110中地址為addr1處存儲的向量s移位7位,異或單元160將移7位的向量s與全局寄存器150中存儲的執(zhí)行完指令③后的值相異或,將異或結果存儲在全局寄存器150中。此時,全局寄存器250中的值為i1*sxori2*sxori3*s,即m*s的計算結果。
執(zhí)行指令⑤時,將執(zhí)行完指令④后的全局寄存器150中的值存儲在地址為addr2的存儲位置。
執(zhí)行上面的指令①-⑤所對應的計算(2)式的矩陣m與(3)式的向量s乘運算方法為:步驟s510:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;步驟s512:從數據存儲器110的地址為addr1處取得向量s;步驟s520:將向量s移位1位,并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量s移位3位,并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量s移位7位,并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。步驟s530:將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
在根據本發(fā)明的實施例1中,為計算矩陣與向量乘m*s,分析矩陣m的構成,將矩陣m分別為若干循環(huán)移位單位矩陣的和,對于每個循環(huán)移位單位矩陣與向量s的乘法操作,生成一條指令shift_xor[addr],offset,其中offset值代表單位陣i循環(huán)右移offset位得到該循環(huán)移位單位矩陣,而[addr]表示該指令的操作對象是數據存儲器中的存儲位置為addr的數據。以及生成初始化全局寄存器(rd)的指令,與保存計算結果的指令。在如圖3a所示的ldpc編碼器中執(zhí)行所生成的指令序列(例如,上面的指令序列①-⑤),以得到矩陣與向量乘m*s的計算結果。除應用于ldpc編碼器外,如圖3a所示的根據本發(fā)明的實施例也可用于其他需要計算矩陣與向量乘法的應用場景。
本實施例1中的ldpc編碼器涉及多次矩陣與向量乘法操作。在指令存儲器120中可存儲分別對應于多個矩陣與向量乘法操作的多個指令,簡化了ldpc編碼器的結構,將繁瑣的控制流簡化為指令的控制,提高了各個功能部件的運行效率,提高吞吐率。
實施例2
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(4)式,向量s如(5)式:
s=(10010010)'(5)
在(4)式中,m=i1’+i2’+i3’,其中i1’是對單位陣i循環(huán)右移3位得到的循環(huán)移位單位矩陣,i2’是對循環(huán)移位單位矩陣i1’循環(huán)左移2位得到的循環(huán)移位單位矩陣,i3’是對循環(huán)移位單位矩陣i1’循環(huán)右移4位得到的循環(huán)移位單位矩陣。在此過程中,共進行9次對向量的移位操作??梢?,在實施例2中,同樣完成矩陣與向量乘m*s計算,比實施例1的計算過程減少了2次對向量的移位操作。
而實施例2這些操作可通過在如圖3a的ldpc編碼器中執(zhí)行下列指令序列來實現。全局寄存器(rd)150的初始狀態(tài)為0。向量s存儲在數據寄存器110的地址為addr1的存儲空間處。
1)shift_xor[addr1],3;
2)storeaddr1,rd;
3)shift_xor[addr1],-2;
4)shift_xor[addr1]4;
5)storeaddr2,rd。
全局寄存器(rd)150的初始狀態(tài)為0??赏ㄟ^執(zhí)行指令loadrd,0來對全局寄存器(rd)150初始化。執(zhí)行指令1)時,從數據存儲器110的地址為addr1處取得向量s,并將向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令2)時,將全局寄存器(rd)150中的值存儲到數據存儲器110的地址為addr1的存儲空間。執(zhí)行指令3)時,將數據存儲器110的地址為addr1處的數據移位-2位(左移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令4)時,將數據存儲器110的地址為addr1處的數據移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。此時,全局寄存器(rd)150中的值即為m*s的計算結果。執(zhí)行指令5)時,將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
執(zhí)行上面的指令1)-5)所對應的計算(3)式的矩陣m與(4)式的向量s乘運算方法為:
步驟s610:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;
步驟s612:從數據存儲器110的地址為addr1處取得向量s;
步驟s620:將向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;將全局寄存器(rd)150中的值存儲到數據存儲器110的地址為addr1的存儲空間;將數據存儲器110的地址為addr1處的數據移位-2位(左移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;將數據存儲器110的地址為addr1處的數據移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中,此時,全局寄存器(rd)150中的值即為m*s的計算結果。
步驟s630:將全局寄存器(rd)150的值存儲在數據存儲器110的地址為addr2的存儲空間。
本實施例中重用循環(huán)移位單位矩陣與向量s乘的結果,以減少移位操作。從而在計算矩陣與向量乘法過程中,同實施例1相比,使用的指令更少,計算速度更快。進一步地,減少移位操作將減少存儲單元的狀態(tài)反轉,從而節(jié)約計算過程的能量消耗。
實施例3
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(6)式,向量s如(7)式:
s=(10010010)'(7)
在(6)式中,由括號中的“1”(即“(1)”)組成的矩陣為由單位矩陣分別循環(huán)移位3位和4位所得的矩陣的和矩陣k1。而由不包括括號的“1”組成的矩陣為單位矩陣分別循環(huán)右移6位和7位所得的矩陣的和矩陣k2。矩陣k1與k2均為2個循環(huán)移位單位矩陣的和矩陣,并且構成矩陣k1的兩個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的,構成矩陣k2的兩個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的。因而認為矩陣k1與矩陣k2是具有相同結構的矩陣,或者稱為矩陣k1與k2中都具有兩個連續(xù)的非零行。類似地,若矩陣km為m個循環(huán)移位單位矩陣的和矩陣,并且,構成矩陣km的m個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的,則稱為矩陣km具有m個連續(xù)的非零行。對于具有相同結構的矩陣k1與k2,從矩陣k1循環(huán)移位預定位數(在(6)式中,右移3位)將得到矩陣k2。
而實施例3這些操作可通過在如圖3a的ldpc編碼器中執(zhí)行下列指令序列來實現。全局寄存器(rd)150的初始狀態(tài)為0。向量s存儲在數據寄存器110的地址為addr1的存儲空間處。
6)shift_xor[addr1],3;
7)shift_xor[addr1],4;
8)storeaddr1,rd;
9)shift_xor[addr1],3;
10)storeaddr2,rd。
全局寄存器(rd)150的初始狀態(tài)為0。執(zhí)行指令6)時,從數據存儲器110的地址為addr1處取得向量s,并將向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令7)時,從數據存儲器110的地址為addr1處取得向量s,并將向量s移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中(該結果為k1*s)。在執(zhí)行指令8)時,將全局寄存器(rd)150的值存儲在數據存儲器110的地址為addr1的存儲空間。在執(zhí)行指令9)時,從數據存儲器110的地址為addr1處取得數據(k1*s的結果),并將所取得的數據移位4位(右移)(為k2*s),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中(k1*sxork2*s)。執(zhí)行指令10)時,將全局寄存器(rd)150的值存儲在數據存儲器110的地址為addr2的存儲空間。
執(zhí)行上面的指令6)-10)所對應的計算(6)式的矩陣m與(7)式的向量s乘運算方法為:
步驟s710:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;
步驟s712:從數據存儲器110的地址為addr1處取得向量s;
步驟s720:將向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;從數據存儲器110的地址為addr1處取得向量s,并將向量s移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中(該結果為k1*s);將全局寄存器(rd)150的值存儲在數據存儲器110的地址為addr1的存儲空間;從數據存儲器110的地址為addr1處取得數據(k1*s的結果),并將所取得的數據移位4位(右移)(為k2*s),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中(k1*sxork2*s)。
步驟s730:將全局寄存器(rd)150的值存儲在數據存儲器110的地址為addr2的存儲空間。
在實施例3中,通過對數據存儲器110的地址為addr1的存儲空間的數據進行移位操作,重用了k1*s的計算結果。從而減少了計算k*s所需要的指令。
在實施例3中,矩陣m=k1+k2,而k1與k2均為為2個循環(huán)移位單位矩陣的和矩陣。在根據本發(fā)明的另一實施例中,矩陣k1與k2均為n個循環(huán)移位單位矩陣的和矩陣,且構成矩陣k的n個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的。從而矩陣k1與k2具有相同的結構,可通過對k1*s的計算結果移位得到k2*s。所屬領域技術人員將意識到可將矩陣m分解為m=k1+k2+…+kj,其中k1,k2,…,kj均具有相同的結構(例如,構成矩陣ki的多個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的),從而可通過對k1*s的計算結果移位得到ki*s(2≤i≤j)。
在根據本發(fā)明的進一步的實施例中,分析矩陣m的構成,將矩陣m分解為{k1,k2,…,kj}的和,其中k1,k2,…,kj均具有相同的結構,均為p個循環(huán)移位單位陣的和矩陣(p是正整數),并且,構成矩陣ki的p個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的。從而可通過對k1*s的計算結果移位得到ki*s(2≤i≤j)。{k1,k2,…,kj}是排序的,使得d2,…dj的和最小,其中dm表示從k1移位dm位得到矩陣km(2≤m≤j)。
實施例4
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(8)式,向量s如(9)式:
s=(10010010)'(9)
在(8)式中,m=i1+i2+i3,其中i1是單位陣i循環(huán)右移1位得到循環(huán)移位單位矩陣,i2是單位陣i循環(huán)右移3位得到循環(huán)移位單位矩陣,i3是單位陣i循環(huán)右移7位得到循環(huán)移位單位矩陣。則m*s=i1*sxori2*sxori3*s的計算過程可以分解為如下操作:shift(s,1)xorshift(s,3)xorshift(s,7)。而這些操作可通過在如圖4的ldpc編碼器中執(zhí)行下列指令序列來實現,其中向量寄存器(rs)130與目的寄存器(rd)150的初始狀態(tài)為0。
⑩loadrs,addr1;
如圖4a所示,用于ldpc編碼的矩陣與向量乘運算單元,包括:數據存儲器110、指令存儲器120、向量寄存器(rs)130、移位單元140、目的寄存器(rd)150和異或單元160,數據存儲器110分別與向量寄存器130和目的寄存器150相連接,向量寄存器130與移位單元140相連接,移位單元140與異或單元160相連接,異或單元160與目的寄存器150相連接。
執(zhí)行指令⑩時,從數據存儲器110的地址為addr1處取得向量s,并加載到向量寄存器130中。
執(zhí)行指令
執(zhí)行指令
執(zhí)行指令
執(zhí)行指令
執(zhí)行上面的指令⑩-
步驟s810:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;
步驟s812:從數據存儲器110的地址為addr1處取得向量s;
步驟s814:將步驟s812中的向量s加載到向量寄存器(rs)130;
步驟s820:將向量寄存器(rs)130中的向量s移位1位,并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量寄存器(rs)130中的向量s移位3位,并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量寄存器(rs)130中的向量s移位7位,并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。
步驟s830:將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
在根據本發(fā)明的實施例2中,為計算矩陣與向量乘m*s,分析矩陣m的構成,將矩陣m劃分為若干循環(huán)移位單位矩陣的和,對于每個循環(huán)移位單位矩陣與向量s的乘法操作,生成一條指令:shiftrs,offset,其中offset值代表單位陣i循環(huán)右移offset位得到該循環(huán)移位單位矩陣,而rs表示該指令的操作對象是來自向量寄存器130的數據。還生成初始化向量寄存器(rs)、目的寄存器(rd)的指令,與保存計算結果的指令。在如圖4a所示的ldpc編碼器中執(zhí)行所生成的指令序列(例如,上面的指令序列⑩-
實施例5
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(10)式,向量s如(11)式:
s=(10010010)'(11)
在(10)式中,m=i1’+i2’+i3’,其中i1’是對單位陣i循環(huán)右移3位得到循環(huán)移位單位矩陣,i2’是對循環(huán)移位單位矩陣i1’循環(huán)左移2位得到的循環(huán)移位單位矩陣,i3’是對循環(huán)移位單位矩陣i1’循環(huán)右移4位得到的循環(huán)移位單位矩陣。在此過程中,共進行9次對向量s的移位操作??梢姡趯嵤├?中,同樣完成矩陣與向量乘m*s計算,比實施例4的計算過程減少了2次對向量s的移位操作。
而實施例5這些操作可通過在如圖4a的ldpc編碼器中執(zhí)行下列指令序列來實現。全局寄存器(rd)150和向量寄存器(rs)130的初始狀態(tài)為0。
(100)loadrs,addr1;
(200)shift_xorrs,3;
(300)storers,rd;
(400)shift_xorrs,-2;
(500)shift_xorrs,4;
(600)storeaddr2,rd。
向量寄存器(rs)130與全局寄存器(rd)150的初始狀態(tài)為0。執(zhí)行指令(100)時,從數據存儲器110的地址為addr1處取得向量s,并加載到向量寄存器(rs)130中。執(zhí)行指令(200)時,將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令(300)時,將全局寄存器(rd)150的值存儲在向量寄存器(rs)130中。執(zhí)行指令(400)時,將向量寄存器(rs)130中的數據移位-2位(左移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令(500)時,將向量寄存器(rs)130中的數據移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。此時,全局寄存器(rd)150中的值即為m*s的計算結果。執(zhí)行指令(600)時,將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
執(zhí)行上面的指令(100)-(600)所對應的計算(10)式的矩陣m與(11)式的向量s乘運算方法為:
步驟s910:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;
步驟s912:從數據存儲器110的地址為addr1處取得向量s;
步驟s914:將步驟s912中的向量s加載到向量寄存器(rs)130;
步驟s920:將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;將全局寄存器(rd)150的值存儲在向量寄存器(rs)130中;將向量寄存器(rs)130中的數據移位-2位(左移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量寄存器(rs)130中的數據移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;
步驟s930:將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
實施例5中重用循環(huán)移位單位矩陣與向量s乘的結果,以減少移位操作。減少移位操作將減少存儲單元的狀態(tài)反轉,從而節(jié)約計算過程的能量消耗。
實施例6
m為8*8的循環(huán)移位單位矩陣的和矩陣,s為8*1的向量,矩陣m如(12)式,向量s如(13)式:
s=(10010010)'(13)
在(12)式中,由括號中的“1”(即“(1)”)組成的矩陣為由單位矩陣分別循環(huán)移位3位和4位所得的矩陣的和矩陣k1。而由不包括括號的“1”組成的矩陣為單位矩陣分別循環(huán)右移6位和7位所得的矩陣的和矩陣k2。矩陣k1與k2均為2個循環(huán)移位單位矩陣的和矩陣,并且構成矩陣k1的兩個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的,構成矩陣k2的兩個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的。因而認為矩陣k1與矩陣k2是具有相同結構的矩陣,或者稱為矩陣k1與k2中都具有兩個連續(xù)的非零行。類似地,若矩陣km為m個循環(huán)移位單位矩陣的和矩陣,并且,構成矩陣km的m個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的,則稱為矩陣km具有m個連續(xù)的非零行。對于具有相同結構的矩陣k1與k2,從矩陣k1循環(huán)移位預定位數(在(12)式中,右移3位)將得到矩陣k2。
而實施例6這些操作可通過在如圖4a的ldpc編碼器中執(zhí)行下列指令序列來實現。全局寄存器(rd)150和向量寄存器(rs)的初始狀態(tài)為0。向量s存儲在數據寄存器110的地址為addr1的存儲空間處。
(110)loadrs,addr1;
(210)shift_xorrs,3;
(310)shift_xorrs,4;
(410)storers,rd;
(510)shift_xorrs,3;
(610)storeaddr2,rd。
向量寄存器(rs)130與全局寄存器(rd)150的初始狀態(tài)為0。執(zhí)行指令(110)時,從數據存儲器110的地址為addr1處取得向量s,并加載到向量寄存器(rs)130中。執(zhí)行指令(210)時,將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中。執(zhí)行指令(310)時,將向量寄存器(rs)130中的向量s移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。此時,全局寄存器(rd)150中存儲的是k1*s的計算結果。而重用k1*s的計算結果,將其右移3位,將得到k2*s的計算結果。執(zhí)行指令(410)時,將全局寄存器(rd)150的值(即k1*s的計算結果)存儲在向量寄存器(rs)130中。執(zhí)行指令(510)時,將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中。此時,全局寄存器(rd)150中的值即為m*s的計算結果。執(zhí)行指令(610)時,將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
執(zhí)行上面的指令(110)-(610)所對應的計算(12)式的矩陣m與(13)式的向量s乘運算方法為:
步驟s1010:初始化全局寄存器(rd)150,使得全局寄存器(rd)150中的值為零;
步驟s1012:從數據存儲器110的地址為addr1處取得向量s;
步驟s1014:將步驟s1012中的向量s加載到向量寄存器(rs)130;
步驟s1020:將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150(初始值為0)的值相異或,異或結果存儲在全局寄存器(rd)150中;將向量寄存器(rs)130中的向量s移位4位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;將全局寄存器(rd)150的值(即k1*s的計算結果)存儲在向量寄存器(rs)130中;將向量寄存器(rs)130中的向量s移位3位(右移),并與全局寄存器(rd)150的值相異或,異或結果存儲在全局寄存器(rd)150中;
第三步驟s30:將全局寄存器(rd)150中的值存儲在數據存儲器110的地址為addr2的存儲位置。
在實施例6中,通過對數據存儲器110的地址為addr1的存儲空間的數據進行移位操作,重用了k1*s的計算結果。從而減少了計算k*s所需要的指令。
在實施例6中,矩陣m=k1+k2,而k1與k2均為為2個循環(huán)移位單位矩陣的和矩陣。在根據本發(fā)明的另一實施例中,矩陣k1與k2均為n個循環(huán)移位單位矩陣的和矩陣,且構成矩陣k的n個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的。從而矩陣k1與k2具有相同的結構,可通過對k1*s的計算結果移位得到k2*s。所屬領域技術人員將意識到可將矩陣m分解為m=k1+k2+…+kj,其中k1,k2,…,kj均具有相同的結構(例如,構成矩陣ki的多個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的),從而可通過對k1*s的計算結果移位得到ki*s(2≤i≤j)。
在根據本發(fā)明的進一步的實施例中,分析矩陣m的構成,將矩陣m分解為{k1,k2,…,kj}的和,其中k1,k2,…,kj均具有相同的結構,均為p個循環(huán)移位單位陣的和矩陣(p是正整數),并且,構成矩陣ki的p個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的。從而可通過對k1*s的計算結果移位得到ki*s(2≤i≤j)。{k1,k2,…,kj}是排序的,使得d2,…dj的和最小,其中dm表示從k1移位dm位得到矩陣km(2≤m≤j)。
圖5示出了根據本發(fā)明一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖。
根據本發(fā)明圖5的實施例,通過在圖3a中展示的ldpc編碼器中執(zhí)行指令序列來計算矩陣與向量乘(m*s)。其中矩陣m=k1+k2+…+km+…+kn(1≤m≤n)(m,n均為正整數),m為多個循環(huán)移位單位矩陣的和矩陣,km為p個循環(huán)移位單位矩陣的和矩陣(km=ij1+ij2+…+ijp,其中ij為循環(huán)移位單位矩陣),并且,構成矩陣km的p個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的,則稱為矩陣km具有p個連續(xù)的非零行。以及從k1循環(huán)移位dm位得到矩陣km(2≤m≤n)。指令序列可通過處理矩陣m而離線生成,并存儲在指令存儲器120中。通過執(zhí)行指令序列來實施圖5中示出的矩陣與向量乘的方法流程圖。
在步驟s1110,對ldpc編碼器的全局寄存器(rd)150(參看圖3a)初始化。作為舉例,將全局寄存器(rd)150初始化為0。
在步驟s1120中,對于構成矩陣k1的p個循環(huán)移位單位矩陣的每一個,從數據存儲器中(例如,地址為addr1)取得向量s,將向量s移位di位,移位結果與全局寄存器(rd)150的值異或并存儲到全局寄存器(rd)150(執(zhí)行指令shift_xor[addr1],di)。通過步驟s1120,得到k1*s的結算結果(s1)。而通過對s1移位預定位數,能得到km*s。其中,k1=i11+i12+…i1i+…+i1p,以及從單位矩陣循環(huán)移位di位得到循環(huán)移位單位矩陣i1i。
在步驟s1130,將全局寄存器(rd)150的值(s1)存儲到數據存儲器110(例如,地址為addr1)(執(zhí)行指令storeaddr1,rd)。
在步驟s1140,對于構成矩陣m的n-1個矩陣km(例如,k2,…,km,…,kn),從數據存儲器地址為addr1處取得s1,將s1移位dm位,移位結果與全局寄存器(rd)150的值異或并存儲到全局寄存器(rd)150(執(zhí)行指令shift_xor[addr1],dm)。通過步驟s1140,得到m*s的計算結果。其中,從k1移位dm位得到矩陣km。
在步驟s1150,將全局寄存器(rd)150的值存儲到數據存儲器110中(例如,地址為addr2)(執(zhí)行指令storeaddr2,rd)。
圖6示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法的流程圖。
結合圖4a,圖6示出了根據本發(fā)明另一個實施方式的ldpc編碼器中矩陣與向量乘運算方法。其中矩陣m=k1+k2+…+km+…+kn(1≤m≤n)(m,n均為正整數),m為多個循環(huán)移位單位矩陣的和矩陣,km為p個循環(huán)移位單位矩陣的和矩陣(km=ij1+ij2+…+ijp,其中ij為循環(huán)移位單位矩陣),并且,構成矩陣km的p個循環(huán)移位單位矩陣相對于單位矩陣的移位次數是相鄰的或連續(xù)的,則稱為矩陣km具有p個連續(xù)的非零行。以及從k1循環(huán)移位dm位得到矩陣km(2≤m≤n)。指令序列可通過處理矩陣m而離線生成,并存儲在指令存儲器120中。通過執(zhí)行指令序列來實施圖6中示出的矩陣與向量乘的方法流程圖。
在步驟s1210,對ldpc編碼器的全局寄存器(rd)150(參看圖4a)初始化。作為舉例,將全局寄存器(rd)150初始化為0。
在步驟s1220中,對于構成矩陣k1的p個循環(huán)移位單位矩陣的每一個,從數據存儲器中(例如,地址為addr1)取得向量s,將向量s加載到向量寄存器(rs)130,將向量寄存器(rs)130的向量s移位di位,移位結果與全局寄存器(rd)150的值異或并存儲到全局寄存器(rd)150(執(zhí)行指令shift_xorrs,di)。通過步驟s1220,得到k1*s的結算結果(s1)。而通過對s1移位預定位數,能得到km*s。其中,k1=i11+i12+…i1i+…+i1p,以及從單位矩陣循環(huán)移位di位得到循環(huán)移位單位矩陣i1i。。
在步驟s1230,將全局寄存器(rd)150的值(s1)存儲到向量寄存器(rs)130(執(zhí)行指令storers,rd)。
在步驟s1240,對于構成矩陣m的n-1個矩陣km(例如,k2,…,km,…,kn),從向量寄存器(rs)130取得s1,將s1移位dm位,移位結果與全局寄存器(rd)150的值異或并存儲到全局寄存器(rd)150(執(zhí)行指令shift_xorrs,dm)。通過步驟s1240,得到m*s的計算結果。其中,從k1移位dm位得到矩陣km。
在步驟s1250,將全局寄存器(rd)150的值存儲到數據存儲器110中(例如,地址為addr2)(執(zhí)行指令storeaddr2,rd)。根據本發(fā)明的一個實施方式,為計算矩陣與向量乘m*s,矩陣m可能具有復雜結構。例如,矩陣m是多個循環(huán)移位單位矩陣的和矩陣,
對于具有相同數量連續(xù)非零行的多個k(i,j(i)),計算
根據本發(fā)明的另一個方面,本發(fā)明還提供一種包含計算機程序代碼的計算機程序,當被載入計算機系統(tǒng)并在計算機系統(tǒng)上執(zhí)行時,所述計算機程序代碼使所述計算機系統(tǒng)執(zhí)行上面所述的方法。
根據本發(fā)明的另一個方面,還提供一種包括程序代碼的程序,當被載入存儲設備并在存儲設備上執(zhí)行時,所述計程序代碼使所述存儲設備執(zhí)行上面所述的方法。
本發(fā)明優(yōu)化矩陣與向量乘的計算過程,通過重用矩陣與向量乘過程中的中間結果,減少執(zhí)行矩陣與向量乘過程中執(zhí)行的指令數量,從而加快向量與矩陣乘的執(zhí)行速度。
應該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以分別由包括計算機程序指令的各種裝置來實施。這些計算機程序指令可以加載到通用計算機、專用計算機或其他可編程數據控制設備上以產生機器,從而在計算機或其他可編程數據控制設備上執(zhí)行的指令創(chuàng)建了用于實現一個或多個流程圖框中指定的功能的裝置。
這些計算機程序指令還可以存儲在可以引導計算機或其他可編程數據控制設備的計算機可讀存儲器中從而以特定方式起作用,從而能夠利用存儲在計算機可讀存儲器中的指令來制造包括用于實現一個或多個流程圖框中所指定功能的計算機可讀指令的制品。計算機程序指令還可以加載到計算機或其他可編程數據控制設備上以使得在計算機或其他可編程數據控制設備上執(zhí)行一系列的操作步驟,從而產生計算機實現的過程,進而在計算機或其他可編程數據控制設備上執(zhí)行的指令提供了用于實現一個或多個流程圖框中所指定功能的步驟。
因而,框圖和流程圖的框支持用于執(zhí)行指定功能的裝置的組合、用于執(zhí)行指定功能的步驟的組合和用于執(zhí)行指定功能的程序指令裝置的組合。還應該理解,框圖和流程圖的每個框以及框圖和流程圖的框的組合可以由執(zhí)行指定功能或步驟的、基于硬件的專用計算機系統(tǒng)實現,或由專用硬件和計算機指令的組合實現。
上述的不同塊、操作以及技術的至少一部分可以被執(zhí)行,通過使用硬件,控制設備執(zhí)行固件指令,控制設備執(zhí)行軟件指令,或者及其任意組合。當采用執(zhí)行固件以及軟件指令的控制設備執(zhí)行時,軟件或固件指令可以被存儲在任意計算機可讀存儲介質中,例如磁盤,光盤或者其他存儲介質,在ram或者rom或者flash存儲器,控制設備,硬盤,光盤,磁盤等等。同樣地,軟件和固件指令可以被傳輸到用戶或者系統(tǒng),通過任意已知的或者期望的傳輸方式包括,例如,在計算機可讀盤或者其他便攜式計算機存儲機制或者通過通信媒介。通信媒介典型地具體化計算機可讀指令,數據結構,序模塊或者在已調制數據信號中的其它數據例如載波或者其他傳輸機制。通過示例,并非限制,通信介質包括有線介質例如有線網絡或者單線連接,以及無線媒介,例如聲、無線頻率,紅外以及其它無線介質。從而,軟件和固件指令可以被傳輸給用戶或者系統(tǒng),通過通信信道,例如電話線,dsl線,電纜電視線,光纖線纜,無線信道,因特網,等等(通過便攜式存儲介質提供這樣的軟件,其被看作是相同的或者可互換的)。軟件或者固件指令可以包括機器可讀指令,這些可讀指令在由控制設備執(zhí)行時,導致控制設備執(zhí)行不同動作。
當在硬件中執(zhí)行時,硬件可以包括一個或多個離散組件,集成電路,應用的集成電路(asic),等等。
需要理解的是,本發(fā)明可以以純軟件、純硬件、固件以及上述的各種組合來實現。硬件例如可以是控制設備、專用集成電路、大規(guī)模集成電路等等。
雖然當前發(fā)明參考的示例被描述,其只是為了解釋的目的而不是對本發(fā)明的限制,對實施方式的改變,增加和/或刪除可以被做出而不脫離本發(fā)明的范圍。
這些實施方式所涉及的、從上面描述和相關聯的附圖中呈現的教導獲益的領域中的技術人員將認識到這里記載的本發(fā)明的很多修改和其他實施方式。因此,應該理解,本發(fā)明不限于公開的具體實施方式,旨在將修改和其他實施方式包括在所附權利要求書的范圍內。盡管在這里采用了特定的術語,但是僅在一般意義和描述意義上使用它們并且不是為了限制的目的而使用。