• 沒有找到結果。

C.1 研究目的

Reed-Solomon 碼為目前廣為使用的錯誤修正碼,其高度的修正能力,使得普遍應用在 光儲存設備與通訊系統之中。本計畫中所使用的無線通訊標準 IEEE 802.16a[8]亦是以 Reed-Solomon 編碼系統為其 outer code,共規定了六種不同的 Reed-Solomon 編碼模式,主 要皆利用(255, 239) Reed-Solomon 編碼系統配合縮短(Shortening)與穿孔(Puncturing)的機制 來達成,因此我們將以此熱門的錯誤修正碼為對象,加以分析及實現。

在本計畫的第二年已經初步為此部分程式加速,並做了一些演算法的改善。在第三年的 計畫中,我們將以實現至 DSP 平台為最終目標,首先仍須對現有的 Reed-Solomon 系統作分 析 , 以 對 前 一 年 成 果 中 效 能 不 足 的 地 方 加 以 改 進 。 另 外 我 們 也 將 考 慮 另 一 種 熱門的 Reed-Solomon 解碼程序—Remainder Decoding Algorithm,並與現有的解碼程序作比較,以 得到較佳的 Reed-Solomon 解碼器,最後再實現至德州儀器 C6416 的 DSP 平台上執行。

C.2 文獻探討

參考前一年的研究成果與相關論文[9],在 Reed-Solomon 解碼器部分主要使用傳統的解 碼程序:計算 Syndrome,使用 Berlekamp Massey 演算法求得 Error Location Polynomial(ELP) 的係數。再利用 Chien 搜尋法找到根,即錯誤發生的位置,最後再利用 Forney 演算法求得 錯誤值(Error Value)。前一年在此部分程式所做的改善包括了 Berlekamp Massey 演算法與 Chien 搜尋法兩個部分,在 Berlekamp Massey 演算法部分以省去 Galois Field(GF)反相運算的 演算法來取代,而在 Chien 搜尋法中則使用到提早終結(Early Termination)的技巧來做改善。

接下來,我們仍遵循 TI 的 Programmer’s Guide 所建議的改善步驟來對程式做加速,前 一年的重點在於演算法的改善,尚未討論到如何針對硬體的架構去對程式做加速。在計畫第 三年裡我們將以此方向為重點,一方面繼續對演算法去做改進,一方面則使用一些技巧與 intrinsic function,以利硬體去做執行。

除了傳統的 Reed-Solomon 解碼程序,Remainder Decoding Algorithm[10]亦為一熱門的解 碼程序。此方法可以略過計算 Syndrome 的步驟直接得到 ELP,因此在求得 ELP 的過程中也 將無法使用到 Syndrome,所以必須改以 Welch-Berlekamp(WB)演算法[11]來求得 ELP。我們 知道,求得 Syndrome 的運算量非常龐大,大大提高了 Reed-Solomon 解碼的複雜度,而 Remainder Decoding Algorithm 正可以免去此一步驟,因此值得我們加以討論與比較。

C.3 研究方法

C.3.1 傳統解碼程序之改善

首先先對前一年改善後的 Reed-Solomon 解碼器做 Profile,觀察還有哪一部份需要做改 進,Profile 結果如圖 C.1所示。從圖上可以看出計算 Syndrome 與 Chien 搜尋法的部分佔據 整體的運算時間最多,因此接下來便針對此兩部分做改進。

80.98%

在計算 Syndrome 的部分,我們使用類似 FFT radix-4 的方式來對原本的 Syndrome 計算 公式做整理[12],使其在一個迴圈中可以處理四組運算。迴圈結束後再將每組運算的倍數差 乘回來即可,如此大大減少了迴圈的數目。整理過後的 unrolling 效果也使程式能夠更有效 率的執行,同時也減少了大量的記憶體存取次數。此外,由於 intrinsic function 提供了許多 有助於平行運算的指令,經過 unrolling 的程式不但可以更容易使用 intrinsic function,以達 到平行運算的效果。連帶也能夠減少變數的使用量,進而改以暫存器運算的方式來取代記憶 體的存取。

在 Chien 搜 尋 法 方 面 , 我 們 使 用 到 了 一 個 有 效 率 的 解 根 演 算 法 — Berlekamp-Rumsey-Solomon (BRS) Algorithm[13] 。其中規定了一種特殊的多項式—Affine Polynomial,只要形式為此種多項式即可使用 BRS 演算法來解根,可大大降低 GF 乘法的使 用量。因此,我們用來改善 Chien 搜尋法的方式就是,先將求得的 ELP 做整理,一部份為 Affine Polynomial,而另一部份則為不滿足 Affine Polynomial 條件的多項式。前者可使用 BRS 演算法來求值,後者則仍使用 Chien 搜尋法來求值,一旦兩者求出的數值相同,則目前代入 的元素(element)即為我們所要的根。由於最終的改善方式需要事先對 ELP 做整理,所以根 據參考文獻[13]所述,若 ELP 的最高次超過 11,所獲的改善將會不顯著,甚至比單獨使用 Chien 搜尋法的情況更沒效率。

C.3.2 Remainder Decoding Algorithm

此 演 算 法 對 Reed-Solomon 碼 進 行 解 碼 的 程 序 為 : 先 對 接 收 到 的 資 料 再 做 一 次 Reed-Solomon 編碼,再將餘式輸入 WB 演算法求出 ELP。後續同樣使用 Chien 搜尋法與 Forney 演算法來處理。其中有兩個重點,一方面提出有別於傳統的 key-equation,另外就是餘式與 ELP 之間的關係。在此 WB 演算法是利用編碼過後的資訊,得到數個限制條件,利用這些 條件再去推算出 ELP 的係數。雖然先前提到此 Reed-Solomon 解碼方式不需事先作計算 Syndrome 的動作,但是由上述可知,仍須額外對接收到的資料做一次 Reed-Solomon 編碼,

而其運算複雜度則與計算 Syndrome 的部分相近。

C.3.3 DSP 平台實現

在 Reed-Solomon 解碼器的部分,同樣使用 TI 的 C6416 DSP 平台,以 Block Mode Streaming 作為主要的傳輸模式。實現至 DSP 平台的操作介面如圖 C.2所示,包括了一個輸 入欄以供使用者指定所要解碼的模式。本計畫所使用的無線通訊標準 IEEE 802.16a 中規定 了四種必要的編碼模式,使用者需配合編碼端的編碼模式來做選取。若輸入的數值不在此四 種模式之中,則本程式會以預設的(60, 54)模式做解碼。接下來將程式下載至 DSP 端後,即 可按下「Transfer」開始執行,執行途中可再次按下「Transfer」以暫停程式。並可更改解碼 模式,以供之後的資料使用。

圖 C.2. Reed-Solomon 解碼器於 DSP 平台上之操作介面

C.4 結果與討論

C.4.1 傳統解碼程序之改善

在計算 Syndrome 的部分,與前一年經過改進後且尚未使用 intrinsic function 加速的程式 做比較,僅使用我們的方法去對算式做整理後,即可得到 30.7%的改進幅度。再經過 intrinsic function 與編譯器層級的改進之後,總改進幅度更可以達到 97.79%。相較之下,若直接將前 一年的程式以 intrinsic function 以及編譯器層級來做改善,改進幅度則只有 58.13%。因此使 用我們的方式去做改進後,不但能夠更有效率的去使用 intrinsic function,而且編譯器也將 更容易對我們的程式去做最佳化。

另一方面,Chien 搜尋法的部分,由於先前的程式中使用到了「提早終結」的技巧,所 以我們在此分為兩種情況作討論。一種是最佳情況,也就是沒有發生任何錯誤,此時不需經 過 Chien 搜尋法處理。另一為最壞的情況,就是最後一個位置發生錯誤,必須搜尋所有的元 素(element)才能找到所有的根。單獨使用前述的方法去對 Chien 搜尋法做改善,在最佳情況 下,效率會比改善前的程式差,而最壞情況下則會比原先來的好。這是因為使用我們的方法 去做改進時,需要事先對 ELP 做整理;而在經過 intrinsic function 與編譯器的改善之後,無 論在最佳或最壞情況下皆比原來的程式有效率,這代表我們的方式不但使 intrinsic function 能更容易被充分利用,同時編譯器也更容易對我們的程式做處理。綜觀上述兩個部分的改 善,Reed-Solomon 解碼器整體的效能列表如表 C.1:

Decoder Version Code Size Cycle Improvement Percentage (%) Lee RS Decoder 5284 447,109 N/A Using the Intrinsics 4936 238,050 46.76 Modified RS Decoder 5584 121,466 48.97 Compiler File-Level Opt. 5048 11,650 90.41 Compiler File-Level Opt.

(Lee RS Decoder) 4732 121,169 72.90 表 C.1. Reed-Solomon 解碼器效能列表

上表中「Lee RS Decoder」代表經過前一年改進之後的解碼器版本。從表中可以看 到,即使已經經過 intrinsic function 改善,使用我們的方式去做改進後仍可額外獲得 48.97%

的改進幅度,使用編譯器層級的最佳化後更可以獲得整體 97.39%的改進幅度,同時我們也 列出 Lee RS Decoder 直接使用 intrinsic function 與編譯器去做改善的狀況,其改進幅度則只 有 72.90%。表示使用我們的方式並配合 intrinsic function 去做改善,使編譯器能夠更容易處 理程式,進而在硬體上更有效率的執行。

C.4.2 Remainder Decoding Algorithm

在 Remainder Decoding Algorithm 程序中同樣使用 Chien 搜學法與 Forney 演算法作為後 續處理的程序,因此我們只將前端對接收到的資料作 Reed-Solomon 編碼(在此我們稱做 Re-Encoding)、WB 演算法兩個部分,拿來與傳統的解碼程序作比較。其中計算 Syndrome 與 Re-Encoding 兩部分的目的,都是為了從資料中得到解碼的必要資訊,而 Berlekamp-Massey 與 WB 演算法皆是用來求得 ELP,因此我們將對前者與後者分別兩兩做比較。初步實現後 發現,由於 Remainder Decoding 程序中的記憶體存取次數頻繁許多,加上其運算複雜度也較 高,所以無論 Re-Encoding 或 WB 演算法皆較傳統的解碼程序來的耗時。為了解決此一問題,

我們仍舊使用 intrinsic function 來提升其效率。一方面利用 intrinsic function 來充分發揮硬體 的特性,一方面也能夠達到平行運算的效果,進而減少陣列變數的使用量,以暫存器的運算 來取代記憶體的存取。經過 intrinsic function 的改進,並配合編譯器最高層級的最佳化,最 後可得到的改進幅度如表 C.2。未使用 intrinsic function 與編譯器層級最佳化,單獨在演算 法方面作改善時,傳統解碼程序經過我們上一個項目所述的方法作改善,會比使用 Remainder Decoding Algorithm 還要有效率。使用 intrinsic function 與編譯器改善後,Remainder Decoding Algorithm 則為較有效率的 Reed-Solomon 解碼程序。

Procedure Code Size Cycle Improved Percentage (%) Re-Encoding without Intrinsics 436 191,484 N/A Re-Encoding with Intrinsics 996 2,926 98.47 WB Algorithm without Intrinsics 2,036 33,683 N/A WB Algorithm with Intrinsics 2,208 2,672 92.07

表 C.2. Re-Encoding 與 WB 演算法效能列表

C.4.3 DSP 平台實現

前部分皆為在模擬器上測得的數據,接下來我們將實現至 DSP 平台上執行。在第二年 計畫中,錯誤修正碼的部分主要還包括了 Viterbi 解碼器,所以在此也將其一同實現。實際 於 DSP 平 台 上 測 得 的 效 能 如 表 C.3 所 示 。 Reed-Solomon 解 碼 器 最 後 可 以 達 到

176.40Kbytes/sec 的處理速度,與第二年實現的程式相較之下,可以得到 96.44%的改進幅度。

而在 Viterbi 解碼器方面,處理速度則約為 17.42Kbytes/sec,仍為錯誤修正解碼程序中的一 大瓶頸。但 Viterbi 演算法的架構幾乎已經固定,很難再去對其演算法或程式撰寫方式做改 進。而且 DSP 為序列執行的處理器,若要對此部分加速,可以考慮改以 FPGA 的方式去做 實現,更容易達到平行處理的運算。

Implemented

Decoder Name Code Size Processing Rate (Kbytes/sec) Improvement Percentage (%) Original RS

Decoder 17,137,575 58.80 N/A

Improved RS

Decoder 17,139,055 176.40 96.44

Viterbi 17,120,975 17.42 N/A

表 C.3. Reed-Solomon 解碼器與 Viterbi 解碼器於 DSP 上實現之效能

相關文件