TW201703441A - 執行於通量圖形處理器的低密度奇偶檢查解碼方法 - Google Patents
執行於通量圖形處理器的低密度奇偶檢查解碼方法 Download PDFInfo
- Publication number
- TW201703441A TW201703441A TW104122282A TW104122282A TW201703441A TW 201703441 A TW201703441 A TW 201703441A TW 104122282 A TW104122282 A TW 104122282A TW 104122282 A TW104122282 A TW 104122282A TW 201703441 A TW201703441 A TW 201703441A
- Authority
- TW
- Taiwan
- Prior art keywords
- message
- array
- value
- threads
- target
- Prior art date
Links
Landscapes
- Error Detection And Correction (AREA)
Abstract
一種執行於通量圖形處理器的低密度奇偶檢查碼解碼方法。所述方法包括下列步驟。基於相關於奇偶校驗矩陣的坦那圖中的M個邊,將每一邊對應至多個執行緒其中之一,致使每一執行緒對應至多個邊識別碼其中之一。當執行這些執行緒其中之一,依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至這些邊的多個傳遞消息。基此,本發明可達成高運算平行度與資料聚合存取。
Description
本發明是有關於一種平行化資料處理技術,且特別是有關於一種執行於通量圖形處理器的低密度奇偶檢查解碼方法以及解碼裝置。
由於低密度奇偶檢查(Low Density Parity Check,LDPC)碼是一種可以達到近似於雪農(Shannon)通道極限的效能等級的一種錯誤更正碼,因此LDPC碼被廣泛使用於時下很多通訊系統標準上,像是基於IEEE 802.11n標準的WiFi系統、基於IEEE 802.3標準的乙太網系統、基於IEEE 802.16e標準的WiMAX系統,或數位視訊廣播(Digital Video Broadcasting-Satellite transmission 2nd generation,DVB-S2)系統等等。雖然LDPC在通道編碼上有相對較好的通道錯誤檢查與校正能力,但LDPC的解碼流程需要重複性的迭代循環運算來取得解碼結果。因此,在利用大尺寸的奇偶校驗矩陣(Parity check matrix)來協助解碼運算的狀況下,LDPC的解碼流程需要龐大的硬體計算能力與硬體資源來支援。
通量圖形處理器(General-purpose computing on graphics processing units,GPGPU)利用處理圖形任務的圖形處理器來計算原本由中央處理器處理的通用計算任務,且這些通用計算常常與圖形處理沒有任何關係。進一步來說,通量圖形處理器是一種多核心架構,其藉由同時執行大量的執行緒(threads)而提供強大的運算能力與高資料吞吐量(throughput)。可預期的,在通量圖形處理器上執行低密度奇偶檢查解碼將可大幅提升解碼效能。
然而,在習知的作法中,通量圖形處理器一般僅支援規則的低密度奇偶檢查解碼。對於不規則的低密度奇偶檢查解碼來說,解碼效能往往會受限於資料結構與記憶體存取之設計上的難度與複雜度。基此,本領域技術人員旨在開發一種應用範圍更廣泛且可提升通量圖形處理器執行低密度奇偶檢查解碼之解碼效能的設計架構。
有鑑於此,本發明提供一種執行於通量圖形處理器的低密度奇偶檢查解碼方法以及解碼裝置,可獲取更大的運算平行度而進一步提升解碼效能,並可支援不規則的低密度奇偶檢查解碼。
本發明提出一種執行於通量圖形處理器的低密度奇偶檢查碼解碼方法,所述通量圖形處理器的串流多處理器包括多個執行緒處理核心與共享記憶體。所述方法包括下列步驟。基於相關於奇偶校驗矩陣的坦那圖(Tanner graph)中的M個邊(edge),將每一邊對應至多個執行緒其中之一,致使每一執行緒對應至多個邊識別碼其中之一。M為大於1的整數且這些邊連接於多個檢查節點與多個位元節點之間。當執行這些執行緒其中之一,依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至這些邊的多個傳遞消息。
在本發明的一實施例中,上述的依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至多個邊的傳遞消息的步驟包括:依據執行緒其中之一的邊識別碼從M個取值索引值中讀取出至少一目標取值索引值,並依據目標取值索引值從儲存於共享記憶體中的M個第一方向傳遞消息中讀取出至少一第一目標傳遞消息。
在本發明的一實施例中,儲存於上述的共享記憶體的取值索引陣列存放有分別對應至多個邊的取值索引值,且儲存於共享記憶體的位元點至檢查點消息陣列存放有分別對應至這些邊的第一方向傳遞消息。
在本發明的一實施例中,上述的取值索引陣列中的取值索引值的陣列存放位置依據坦那圖的連結狀態而定,上述的位元點至檢查點消息陣列中對應至相同的檢查節點的第一方向傳遞消息相鄰排列。
在本發明的一實施例中,上述的依據執行緒其中之一的邊識別碼從取值索引值中讀取出目標取值索引值,並依據目標取值索引值從儲存於共享記憶體中的第一方向傳遞消息中讀取出第一目標傳遞消息的步驟包括:依據執行緒其中之一的邊識別碼,從取值索引陣列中的第i個取值索引值開始讀取出目標取值索引,其中i等於執行緒其中之一的邊識別碼。依據第i個取值索引值,從位元點至檢查點消息陣列中的第j個第一方向傳遞消息開始讀取出第一目標傳遞消息,其中j等於第i個取值索引值。響應於依序循環讀取取值索引陣列而持續從位元點至檢查點消息陣列讀取出第一目標傳遞消息,直至讀取到符合預設條件的取值索引值其中之一,以停止讀取位元點至檢查點消息陣列中的第一方向傳遞消息。符合預設條件的取值索引值其中之一等於執行緒其中之一的邊識別碼。
在本發明的一實施例中,上述的依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至多個邊的傳遞消息的步驟更包括:依據執行緒其中之一的識別碼從M個位置索引值中讀取目標位置索引值,並利用目標位置索引值與上述的第一目標傳遞消息更新M個第二方向傳遞消息中的第二目標傳遞消息。此目標位置索引值指示出第二目標傳遞消息的陣列存放位置。
在本發明的一實施例中,位置索引陣列存放有分別對應至上述的邊的位置索引值,且檢查點至位元點消息陣列存放有分別對應至上述的邊的第二方向傳遞消息。
在本發明的一實施例中,上述的位置索引陣列中的位置索引值的陣列存放位置依據坦那圖的連結狀態而定,檢查點至位元點消息陣列中對應至相同的位元節點的第二方向傳遞消息相鄰排列。
在本發明的一實施例中,上述的依據執行緒其中之一的識別碼從位置索引值中讀取目標位置索引值的步驟包括:依據執行緒其中之一的邊識別碼,讀取位置索引陣列中的第i個位置索引值以作為該目標位置索引值,其中i等於執行緒其中之一的邊識別碼。
在本發明的一實施例中,上述的利用目標位置索引值與第一目標傳遞消息更新第二方向傳遞消息中的第二目標傳遞消息的步驟包括:依據第一目標傳遞消息計算出更新消息,並利用更新消息取代檢查點至位元點消息陣列中目標位置索引值所指的第k個第二方向傳遞消息,以更新第二目標傳遞消息。k等於目標位置索引值。
基於上述,藉由將坦那圖上的每一邊分別對應至多個執行緒其中之一,致使通量圖形處理器可平行化地處理低密度奇偶檢查碼解碼流程中傳遞消息的更新運算。通量圖形處理器的多個執行緒處理核心可透過讀取一取值索引陣列而據以讀取位元點至檢查點陣列中的第一方向傳遞消息。換言之,各個執行緒處理核心可依據執行緒的邊識別碼來存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至這些邊的多個傳遞消息。如此,相較於習知將資料節點(包括位元節點與檢查節點)指派至不同的執行緒來分別進行迭代運算的解碼方式,本發明可獲取更大的運算平行度。此外,本發明之基於坦那圖上的邊的資料處理方式可同時支援規則與不規則的低密度奇偶檢查碼解碼。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
基於坦那圖(Tanner graph)上的邊(Edge)的數量大於節點(Node)的數量的特性,本發明提出一種以邊為基礎(Edge-based)的運算處理架構。相較於目前通量圖形處理器上以節點為基礎(Node-based)的運算處理方式,本發明可進一步提升於通量圖形處理器上執行低密度奇偶檢查解碼的運算平行度而提高解碼效能。
圖1為依據本發明一實施例所繪示的解碼裝置的示意圖。解碼裝置100可以配置在無線通訊接收裝置內,例如:使用IEEE 802.11n標準的接收器,但本發明不以此為限。當解碼裝置100從通訊通道接收到接收資料時,解碼裝置100可基於低密度奇偶檢查演算法進行解碼,以對從上述通訊通道接收到之接收資料進行校正程序。於本範例實施例中,解碼裝置100包括通量圖形處理器20以及儲存單元30。
於本範例實施例中,通量圖形處理器20包括多個串流多處理器SM_1~SM_P(P為正整數)、快取記憶體21,以及動態隨機存取記憶體22。每個串流多處理器SM_1~SM_P經配置而處理多個執行緒(thread),且每個串流多處理器SM_1~SM_P包括各自的共享記憶體25_1~25_P。另外,串流多處理器SM_1~SM_P分別包括多個執行緒處理核心,且屬於同一串流多處理器的執行緒處理核心可透過共享記憶體進行溝通或資料傳遞。舉例而言,串流多處理器SM_1包括執行緒處理核心C1_1~C1_Q,且執行緒處理核心C1_1~C1_Q可共同存取共享記憶體25_1。相似的,串流多處理器SM_2包括執行緒處理核心C2_1~C2_Q,且執行緒處理核心C2_1~C2_Q可共同存取共享記憶體25_1。
此外,雖然未繪示於圖1,串流多處理器SM_1~SM_P還可以包括執行緒束排程器(warp scheduler)等其他元件,本發明對此並不限制。此外,串流多處理器SM_1~SM_P可共用快取記憶體21,快取記憶體21可用於在執行緒之間傳送資料。串流多處理器SM_1~SM_P中的執行緒處理核心經配置而平行地執行大量的執行緒。在本範例實施例中,通量圖形處理器20可利用單一指令多重執行緒(Single-instruction multiple thread,SIMT)技術而依據相同的指令平行化處理大量的執行緒。
儲存單元30例如是任意型式的固定式或可移動式隨機存取記憶體(Random Access Memory,RAM)、唯讀記憶體(Read-Only Memory,ROM)、快閃記憶體(Flash memory)、硬碟或其他類似裝置或這些裝置的組合,然本發明不限於此。儲存單元30耦接至通量圖形處理器20並且存有多個指令,通量圖形處理器20執行所述指令而提供低密度奇偶檢查解碼功能。
於本範例實施例中,通量圖形處理器20執行所述指令以執行下列步驟。基於相關於奇偶校驗矩陣的坦那圖中的M個邊,將每一邊對應至多個執行緒其中之一,致使每一執行緒對應至多個邊識別碼其中之一。當執行執行緒其中之一,依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至這些邊的多個傳遞消息。
以下將進一步詳細說明本發明之低密度奇偶檢查解碼方法。圖2A為一種奇偶校驗矩陣210的示意圖,而圖2B為奇偶校驗矩陣210中位元節點(Bit nodes)與檢查節點(Check nodes)之間關係的示意圖。如圖2A所示,奇偶校驗矩陣210的8行各自對應到位元節點B0、B1、B2、B3、B4、B5、B6、B7;而奇偶校驗矩陣210的4列各自對應到檢查節點C0、C1、C2、C3。低密度奇偶檢查的解碼流程係將機率信息(probability information)與奇偶校驗矩陣210進行矩陣乘法運算來求得解碼結果。
請參照圖2B,一般來說,奇偶校驗矩陣210可以表示為坦那圖(Tanner graph),坦那圖同樣包括位元節點B0~B7與檢查節點C0~C3。如圖2B所示,位元節點B0~B7與檢查節點C0~C3之間存在邊(edge)時(即,位元節點與檢查節點之間有連線),才會由位元節點與檢查節點輪流進行運算。舉例而言,位元節點B0與檢查節點C0經由邊E1相連。圖2B所示具有相對應關係的位元節點B0~B7與檢查節點C0~C3(彼此在圖2B中有連線關係)各自運算完成後,皆會將各自的運算結果暫存入至相同的記憶體單元或記憶體位置中。
於本範例實施例中,通量圖形處理器20根據坦那圖的連結狀態來執行低密度奇偶檢查解碼程序,其中低密度奇偶檢查解碼程序包括水平解碼程序與垂直解碼程序。具體來說,在水平解碼程序中,通量圖形處理器20計算檢查節點C0~C3向位元節點B0~B7傳遞的傳遞消息。在垂直解碼程序中,通量圖形處理器20計算位元節點B0~B7向檢查節點C0~C3傳遞的傳遞消息。這些傳遞消息會沿著坦那圖中的邊(edge)來傳送。例如,基於邊E1的連結,檢查節點C0傳送給位元節點B0的是傳遞消息M12,而位元節點B0傳送給檢查節點C0是傳遞消息M11。
基於上述對低密度奇偶檢查解碼流程的說明可知,於解碼過程中,通量圖形處理器20必需利用兩個陣列來分別儲存多個第一方向傳遞消息以及多個第二方向傳遞消息,才可依據解碼演算法而利用這些傳遞消息進行迭代運算。例如,通量圖形處理器20可以採用總和-乘積演算法(Sum-Product Algorithm)、最小值-總和演算法(Min-Sum Algorithm)、或是位元翻轉演算法(bit-flipping Algorithm),本發明並不限制採用何種演算法。
需說明的是,於本發明的範例實施例中,第一方向傳遞消息為位元節點傳送給檢查節點的傳遞消息,也可稱之為位元點至檢查點消息(bit-to-check massage)。第二方向傳遞消息為檢查節點傳送給位元節點的傳遞消息,也可稱之為檢查點至位元點消息(check-to-bit massage)。此外,儲存第一方向傳遞消息的陣列稱之為位元點至檢查點陣列,而儲存第二方向傳遞消息的陣列稱之為檢查點至位元點陣列。值得一提的是,於本發明的範例實施例中,各個邊之傳遞消息的計算分別對應至相異的執行緒。基此,若利用如圖1所示之通量圖形處理器20執行低密度奇偶檢查解碼,通量圖形處理器20之各個執行緒處理核心可分別計算相異的邊上的傳遞消息。
圖3為依照本發明一實施例所繪示的低密度奇偶檢查解碼方法的流程圖。在本範例實施例中,所述低密度奇偶檢查解碼方法可適用於如圖1所繪示之解碼裝置100,但本發明不僅限於此。請參照圖3,於步驟S301,基於相關於奇偶校驗矩陣的坦那圖中的M個邊,將每一邊對應至多個執行緒其中之一,致使每一執行緒對應至多個邊識別碼其中之一。其中,M為大於1的整數且這些邊連接於多個檢查節點與多個位元節點之間。換言之,關於每一個邊之傳遞消息的計算將分別被指派至不同的執行緒。以圖2B的坦那圖為例來說,檢查節點C0~C3與位元節點B0~B7之間存在12個邊,因此這12個邊上之傳遞消息(包括第一方向傳遞消息與第二方向傳遞消息)的計算將分別由相異的執行緒處理核心同時執行不同的執行緒而完成。例如,於水平解碼過程中,第二方向傳遞消息的更新計算將分別對應至12個相異的執行緒,且這12個執行緒分別具有各自的邊識別碼。
之後,於步驟S302,當執行這些執行緒其中之一,依據執行緒其中之一的邊識別碼存取共享記憶體中的資料,以更新儲存於共享記憶體中分別對應至這些邊的多個傳遞消息。具體來說,於水平解碼過程中,執行緒處理核心可依據執行緒的邊識別碼來讀取更新第二方向傳遞消息其中之一所需的至少一第一方向傳遞消息。
為了詳細說明本發明,以下將列舉另一實施例以詳細說明如何依據執行緒的邊識別碼來存取適當的傳遞消息以進行更新計算。圖4為依照本發明一實施例所繪示的低密度奇偶檢查解碼方法的流程圖。在本範例實施例中,所述低密度奇偶檢查解碼方法可適用於如圖1所繪示之解碼裝置100,但本發明不僅限於此。
請參照圖4,於步驟S401,基於相關於奇偶校驗矩陣的坦那圖中的M個邊,將每一邊對應至多個執行緒其中之一,致使每一執行緒對應至多個邊識別碼其中之一。接著,於步驟S402,依據執行緒其中之一的邊識別碼從M個取值索引值中讀取出至少一目標取值索引值,並依據目標取值索引值從儲存於共享記憶體中的M個第一方向傳遞消息中讀取出至少一第一目標傳遞消息。
於本範例實施例中,儲存於共享記憶體的取值索引陣列存放有分別對應至多個邊的取值索引值,且儲存於共享記憶體的位元點至檢查點消息陣列存放有分別對應至這些邊的第一方向傳遞消息。取值索引值用以指示執行緒處理核心應該讀取位元點至檢查點陣列中哪一個陣列存放位置的元素。需特別說明的是,取值索引陣列中的取值索引值的陣列存放位置依據坦那圖的連結狀態而定,而位元點至檢查點消息陣列中對應至相同的檢查節點的第一方向傳遞消息相鄰排列。基於上述之取值索引陣列的設置與取值索引值之陣列存放位置的安排,各個執行緒可從位元點至檢查點陣列中讀取到計算特定某一個邊所需的傳遞消息。
更詳細來說,依據執行緒其中之一的邊識別碼,執行緒處理核心可從取值索引陣列中的第i個取值索引值開始讀取出目標取值索引,其中i等於執行緒其中之一的邊識別碼。舉例而言,假設執行緒的邊識別碼為‘1’,則執行緒處理核心可從取值索引陣列中的第1個取值索引值開始讀取出至少一目標取值索引。其中所述邊識別碼為整數。接著,依據第i個取值索引值,執行緒處理核心可從位元點至檢查點消息陣列中的第j個第一方向傳遞消息開始讀取出第一目標傳遞消息,其中j等於第i個取值索引值。之後,執行緒處理核心可從位元點至檢查點消息陣列中的第j個第一方向傳遞消息開始讀取出第一目標傳遞消息。
執行緒處理核心響應於依序循環讀取取值索引陣列而持續從位元點至檢查點消息陣列讀取出第一目標傳遞消息,直至讀取到符合預設條件的取值索引值其中之一,以停止讀取位元點至檢查點消息陣列中的第一方向傳遞消息。符合預設條件的取值索引值其中之一等於執行緒其中之一的邊識別碼。舉例來說,當執行邊識別碼為‘1’之執行緒的執行緒處理核心讀取到取值索引值為‘1’時,執行緒處理核心將停止繼續讀取取值索引陣列且同時停止繼續讀取出第一方向傳遞消息。如此,當執行這些執行緒其中之一時,計算各個邊之第二方向傳遞消息的各個執行緒可讀取出正確的第一方向傳遞消息。
回到圖4所示之流程,於步驟S403,依據執行緒其中之一的識別碼從M個位置索引值中讀取目標位置索引值,並利用目標位置索引值與上述的第一目標傳遞消息更新M個第二方向傳遞消息中的第二目標傳遞消息。此目標位置索引值指示出第二目標傳遞消息的陣列存放位置。
於本範例實施例中,位置索引陣列存放有分別對應至這些邊的位置索引值,且檢查點至位元點消息陣列存放有分別對應至這些邊的第二方向傳遞消息。另外,位置索引陣列中的位置索引值的陣列存放位置依據坦那圖的連結狀態而定,檢查點至位元點消息陣列中對應至相同的位元節點的第二方向傳遞消息相鄰排列。基於上述之位置索引陣列的設置與位置索引值之陣列存放位置的安排,各個執行緒可將計算出來的更新後傳遞消息寫入至正確的陣列存放位置,以完成第二方向傳遞消息的更新。
更詳細來說,依據執行緒其中之一的邊識別碼,執行緒處理核心可讀取位置索引陣列中的第i個位置索引值以作為目標位置索引值,其中i等於執行緒其中之一的邊識別碼。舉例而言,假設執行緒的邊識別碼為‘1’,則執行緒處理核心可讀取位置索引陣列中的第1個位置索引值以作為目標位置索引值。其中所述邊識別碼為整數。之後,執行緒處理核心依據第一目標傳遞消息計算出更新消息,並利用更新消息取代檢查點至位元點消息陣列中目標位置索引值所指的第k個第二方向傳遞消息,以更新第二目標傳遞消息,其中k等於目標位置索引值。
值得一提的是,低密度奇偶檢查碼一般用奇偶校驗矩陣進行描述,奇偶校驗矩陣中每一行中‘1’的個數稱為該行的行重,每一列中‘1’的個數稱為該列的列重。相應奇偶校驗矩陣的行重和列重都相同的低密度奇偶檢查碼稱為規則的(regular)低密度奇偶檢查碼(奇偶校驗矩陣為規則的),否則稱為非規則的(irregular)低密度奇偶檢查碼(奇偶校驗矩陣為不規則的)。由於本發明之低密度奇偶檢查解碼是以邊為基礎進行平行化處理,因此本發明之低密度奇偶檢查解碼方法適用於規則的與不規則的低密度奇偶檢查碼,並不會降低不規則的低密度奇偶檢查解碼的解碼效能。
相較於以節點為基礎的設計架構,本發明之以邊為基礎的架構係讓單一執行緒負責坦那圖上單一個邊之傳遞消息的更新運算。因此,由於坦那圖上的邊的數量通常大於節點數量,因此本發明之低密度奇偶檢查解碼方法的運算平行度可提升,並從而提升解碼效能。基於前述的說明可知,本發明之以邊為基礎的處理流程需配置4個陣列,分別是取值索引陣列、位元點至檢查點陣列、位置索引陣列,以及檢查點至位元點陣列。取值索引陣列用以控制執行緒從位元點至檢查點陣列中的多個第一方向傳遞消息存取正確的第一目標傳遞消息。各執行緒將從位元點至檢查點陣列持續讀取出至少一第一目標傳遞消息,直至讀取到等於自己的邊識別碼的取值索引值。
圖5A與圖5B為依據本發明一實施例所繪示的資料結構與執行緒的資料存取流程的範例示意圖。須先說明的是,圖5A與圖5B係以圖2B之坦那圖為例進行說明,但本發明並不限制於此。請先參照圖5A,執行緒t0用以負責邊E1上之傳遞消息的更新與計算,且執行緒t0的邊識別碼為‘0’。在步驟1中,根據邊識別碼‘0’,執行緒t0從取值索引陣列a1中讀取出陣列存位置對應至邊識別碼‘0’的取值索引值‘1’。在步驟2中,依據取值索引值‘1’,執行緒t0從位元點至檢查點陣列a2中讀取出陣列存位置對應至取值索引值‘1’的第一方向傳遞消息LB 1 →C0
。
之後,在步驟3中,執行緒t0繼續從取值索引陣列a1中讀取出位於取值索引值‘1’之後的取值索引值‘2’。在步驟4中,依據取值索引值‘2’,執行緒t0從位元點至檢查點陣列a2中讀取出陣列存位置對應至取值索引值‘2’的第一方向傳遞消息LB 2 →C0
。在步驟5中,執行緒t0繼續依序讀取取值索引陣列a1,直至讀取到取值索引值‘0’。在步驟6中,執行緒t0利用第一方向傳遞消息LB 1 →C0
以及第一方向傳遞消息LB 2 →C0
計算出更新消息,並依據自己的邊識別碼‘0’來讀取位置索引陣列a3中的目標位置索引值‘0’。在步驟7中,執行緒t0可利用更新消息來寫入至陣列存放位置對應至目標位置索引值‘0’的第二方向傳遞消息,從而獲取更新後的第二方向傳遞消息LC 0 →B0
。
相似的,圖5B繪示了執行緒t1計算第二方向傳遞消息LC 0 →B1
的流程。請參照圖2B與圖5B,執行緒t1用以負責邊E2上之傳遞消息的更新與計算,且執行緒t1的邊識別碼為‘1’。執行緒t1可依據步驟1至步驟7中的運算與資料存取流程而獲取更新後的第二方向傳遞消息LC 0 →B4
。本領域技術人員應可參照前文與圖5A的說明而自行推演執行緒t1的運算流程,於此不再贅述。
圖6為依照本發明一實施例所繪示的資料結構與執行緒的資料存取流程的範例示意圖。須先說明的是,圖6係以圖2B之坦那圖為例進行說明,但本發明並不限制於此。請參照圖6,執行緒t0~t9分別用以負責圖2B之坦那圖中各個邊上之傳遞消息的更新與計算,且執行緒t0~t9的邊識別碼分別為‘0’~‘9’。依據圖2B之坦那圖中結點的連結狀態,取值索引值的安排如圖6所示的存放於取值索引陣列a1,而位置索引值的安排如圖6所示的存放於位置索引陣列a3。圖6繪示了所有執行緒t0~t9的資料存取流程。本領域技術人員應可參照前文與圖5A的說明而自行推演執行緒t0~t9的運算流程,於此不再贅述。
值得一提的是,基於圖6所示的資料存取流程可知,對平行化處理多個執行緒而言,關於取值索引陣列、位元點至檢查點陣列,以及位置索引陣列的記憶體存取是非常聚合的(coalesced),此記憶體存取聚合現象可大幅凸顯出利用通量圖形處理器來執行本發明之低密度奇偶檢查解碼方法的優勢。尤其是,於一範例實施例中,取值索引陣列與位元點至檢查點陣列非常適於存放在串流多處理器中的L1快取記憶體。也就是說,本發明可提升將低密度奇偶檢查解碼執行於通量圖形處理器的解碼效能。
綜上所述,本發明藉由將坦那圖上的每一邊分別對應至多個執行緒其中之一,致使通量圖形處理器可平行化地處理低密度奇偶檢查碼解碼流程中傳遞消息的更新運算。相較於習知將資料節點(包括位元節點與檢查節點)指派至不同的執行緒來分別進行迭代運算的解碼方式,本發明可獲取更大的運算平行度。此外,本發明之基於坦那圖上的邊的資料處理方式可同時支援規則與不規則的低密度奇偶檢查碼解碼。再者,基於本發明對於取值索引陣列與位置索引陣列的設置,可在不重新排列傳遞消息的前提下達到記憶體存取聚合(memory accessing coalescing)以及資料大量重複存取的特性,以進一步縮短通量圖形處理器執行低密度奇偶檢查解碼時的資料讀取時間。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
100‧‧‧解碼裝置
20‧‧‧通量圖形處理器
30‧‧‧儲存單元
21‧‧‧快取記憶體
22‧‧‧動態隨機存取記憶體
SM_1~SM_P‧‧‧串流多處理器
25_1~25_P‧‧‧共享記憶體
C1_1~C1_Q、C2_1~C2_Q‧‧‧執行緒處理核心
210‧‧‧奇偶校驗矩陣
B0~B7‧‧‧位元節點
C0~C3‧‧‧檢查節點
E1、E2‧‧‧邊
M11、M12‧‧‧傳遞消息
S301~S302、S401~S403‧‧‧步驟
t0~t9‧‧‧執行緒
a1‧‧‧取值索引陣列
a2‧‧‧位元點至檢查點陣列
a3‧‧‧位置索引陣列
a4‧‧‧檢查點至位元點陣列
20‧‧‧通量圖形處理器
30‧‧‧儲存單元
21‧‧‧快取記憶體
22‧‧‧動態隨機存取記憶體
SM_1~SM_P‧‧‧串流多處理器
25_1~25_P‧‧‧共享記憶體
C1_1~C1_Q、C2_1~C2_Q‧‧‧執行緒處理核心
210‧‧‧奇偶校驗矩陣
B0~B7‧‧‧位元節點
C0~C3‧‧‧檢查節點
E1、E2‧‧‧邊
M11、M12‧‧‧傳遞消息
S301~S302、S401~S403‧‧‧步驟
t0~t9‧‧‧執行緒
a1‧‧‧取值索引陣列
a2‧‧‧位元點至檢查點陣列
a3‧‧‧位置索引陣列
a4‧‧‧檢查點至位元點陣列
圖1為依據本發明一實施例所繪示的解碼裝置的示意圖。 圖2A為一種奇偶校驗矩陣的示意圖。 圖2B為奇偶校驗矩陣中位元節點與檢查節點之間關係的示意圖。 圖3為依照本發明一實施例所繪示的低密度奇偶檢查解碼方法的流程圖。 圖4為依照本發明一實施例所繪示的低密度奇偶檢查解碼方法的流程圖。 圖5A為依據本發明一實施例所繪示的資料結構與執行緒的資料存取流程的範例示意圖。 圖5B為依據本發明一實施例所繪示的資料結構與執行緒的資料存取流程的範例示意圖。 圖6為依照本發明一實施例所繪示的資料結構與執行緒的資料存取流程的範例示意圖。
S301~S302‧‧‧步驟
Claims (10)
- 一種執行於通量圖形處理器的低密度奇偶檢查 (LDPC)解碼方法,所述通量圖形處理器的一串流多處理器包括多個執行緒處理核心與一共享記憶體,所述方法包括: 基於相關於一奇偶校驗矩陣的一坦那圖(Tanner graph)中的M個邊(edge),將每一該些邊對應至多個執行緒其中之一,致使每一該些執行緒對應至多個邊識別碼其中之一,其中M為大於1的整數且該些邊連接於多個檢查節點與多個位元節點之間;以及 當執行該些執行緒其中之一,依據該些執行緒其中之一的邊識別碼存取一共享記憶體中的資料,以更新儲存於該共享記憶體中分別對應至該些邊的多個傳遞消息。
- 如申請專利範圍第1項所述的低密度奇偶檢查解碼方法,其中依據該些執行緒其中之一的該邊識別碼存取該共享記憶體中的資料,以更新儲存於該共享記憶體中分別對應至該些邊的該些傳遞消息的步驟包括: 依據該些執行緒其中之一的該邊識別碼從M個取值索引值中讀取出至少一目標取值索引值,並依據該至少一目標取值索引值從儲存於該共享記憶體中的M個第一方向傳遞消息中讀取出至少一第一目標傳遞消息。
- 如申請專利範圍第2項所述的低密度奇偶檢查解碼方法,其中儲存於該共享記憶體的一取值索引陣列存放有分別對應至該些邊的該些取值索引值,且儲存於該共享記憶體的一位元點至檢查點消息陣列存放有分別對應至該些邊的該些第一方向傳遞消息。
- 申請專利範圍第3項所述的低密度奇偶檢查解碼方法,其中該取值索引陣列中的該些取值索引值的陣列存放位置依據該坦那圖的連結狀態而定,該位元點至檢查點消息陣列中對應至相同的檢查節點的第一方向傳遞消息相鄰排列。
- 如申請專利範圍第3項所述的低密度奇偶檢查解碼方法,其中依據該些執行緒其中之一的該邊識別碼從該些取值索引值中讀取出該至少一目標取值索引值,並依據該至少一目標取值索引值從儲存於該共享記憶體中的該些第一方向傳遞消息中讀取出該至少一第一目標傳遞消息的步驟包括: 依據該些執行緒其中之一的該邊識別碼,從該取值索引陣列中的第i個取值索引值開始讀取出該至少一目標取值索引,其中i等於該些執行緒其中之一的該邊識別碼; 依據第i個取值索引值,從該位元點至檢查點消息陣列中的第j個第一方向傳遞消息開始讀取出該至少一第一目標傳遞消息,其中j等於第i個取值索引值;以及 響應於依序循環讀取該取值索引陣列而持續從該位元點至檢查點消息陣列讀取出該至少一第一目標傳遞消息,直至讀取到符合一預設條件的該些取值索引值其中之一,以停止讀取該位元點至檢查點消息陣列中的該些第一方向傳遞消息, 其中,該些取值索引值其中之一等於該些執行緒其中之一的該邊識別碼。
- 如申請專利範圍第2項所述的低密度奇偶檢查解碼方法,其中依據該些執行緒其中之一的該邊識別碼存取該共享記憶體中的資料,以更新儲存於該共享記憶體中分別對應至該些邊的該些傳遞消息的步驟更包括: 依據該些執行緒其中之一的識別碼從M個位置索引值中讀取一目標位置索引值,並利用該目標位置索引值與該至少一第一目標傳遞消息更新M個第二方向傳遞消息中的第二目標傳遞消息,其中該目標位置索引值指示出第二目標傳遞消息的陣列存放位置。
- 如申請專利範圍第6項所述的低密度奇偶檢查解碼方法,其中一位置索引陣列存放有分別對應至該些邊的該些位置索引值,且一檢查點至位元點消息陣列存放有分別對應至該些邊的該些第二方向傳遞消息。
- 申請專利範圍第7項所述的低密度奇偶檢查解碼方法,其中該位置索引陣列中的該些位置索引值的陣列存放位置依據該坦那圖的連結狀態而定,該檢查點至位元點消息陣列中對應至相同的位元節點的第二方向傳遞消息相鄰排列。
- 如申請專利範圍第7項所述的低密度奇偶檢查解碼方法,其中依據該些執行緒其中之一的識別碼從該些位置索引值中讀取該目標位置索引值的步驟包括: 依據該些執行緒其中之一的該邊識別碼,讀取該位置索引陣列中的第i個位置索引值以作為該目標位置索引值,其中i等於該些執行緒其中之一的該邊識別碼。
- 如申請專利範圍第7項所述的低密度奇偶檢查解碼方法,其中利用該目標位置索引值與該至少一第一目標傳遞消息更新該些第二方向傳遞消息中的該第二目標傳遞消息的步驟包括: 依據該至少一第一目標傳遞消息計算出一更新消息,並利用該更新消息取代該檢查點至位元點消息陣列中該目標位置索引值所指的第k個第二方向傳遞消息,以更新該第二目標傳遞消息,其中k等於該目標位置索引值。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW104122282A TWI552533B (zh) | 2015-07-09 | 2015-07-09 | 執行於通量圖形處理器的低密度奇偶檢查解碼方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW104122282A TWI552533B (zh) | 2015-07-09 | 2015-07-09 | 執行於通量圖形處理器的低密度奇偶檢查解碼方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI552533B TWI552533B (zh) | 2016-10-01 |
TW201703441A true TW201703441A (zh) | 2017-01-16 |
Family
ID=57848156
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW104122282A TWI552533B (zh) | 2015-07-09 | 2015-07-09 | 執行於通量圖形處理器的低密度奇偶檢查解碼方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI552533B (zh) |
-
2015
- 2015-07-09 TW TW104122282A patent/TWI552533B/zh active
Also Published As
Publication number | Publication date |
---|---|
TWI552533B (zh) | 2016-10-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Maity et al. | Robust gradient descent via moment encoding and LDPC codes | |
Wang et al. | High throughput low latency LDPC decoding on GPU for SDR systems | |
Kang et al. | Parallel LDPC decoder implementation on GPU based on unbalanced memory coalescing | |
CN104052576A (zh) | 一种云存储下基于纠错码的数据恢复方法 | |
Falcao et al. | Massive parallel LDPC decoding on GPU | |
US8682933B2 (en) | Traversal based directed graph compaction | |
CN106452455B (zh) | 基于OpenCL移动设备QC-LDPC的动态译码方法 | |
US20150012795A1 (en) | Error correction decoder and error correction decoding method | |
US20160285476A1 (en) | Method for encoding and decoding of data based on binary reed-solomon codes | |
US11915006B2 (en) | Method, system and device for improved efficiency of pipeline processing of instructions, and computer storage medium | |
WO2020119770A1 (zh) | 信息处理方法、设备及计算机存储介质 | |
US9973214B2 (en) | Low density parity check decoding method performing on general graphic processing unit and decoding apparatus | |
US9048872B2 (en) | Layered decoding architecture with reduced number of hardware buffers for LDPC codes | |
WO2022062406A1 (zh) | 一种分组纠错码的译码方法、装置、存储介质和电子装置 | |
CN104298699A (zh) | 固定和可变长度数据库列的卸载投影的方法和系统 | |
US10382064B2 (en) | Efficient LDPC encoder for irregular code | |
CN114692885B (zh) | 基于拓扑量子纠错码的错误信息传输校正方法 | |
US10261848B2 (en) | Decoder architecture for quantum error correction | |
US20130138923A1 (en) | Multithreaded data merging for multi-core processing unit | |
TWI552533B (zh) | 執行於通量圖形處理器的低密度奇偶檢查解碼方法 | |
CN109921802A (zh) | 一种qc-ldpc码的译码方法、模块及装置 | |
Li et al. | Efficient graphics processing unit based layered decoders for quasicyclic low‐density parity‐check codes | |
WO2024057036A1 (en) | Quantum computing decoder and associated methods | |
GB2626392A (en) | Quantum error correction code decoder and associated methods | |
Qi et al. | Implementation of accelerated BCH decoders on GPU |