• 沒有找到結果。

B. Part 2: Error Control Coding

B.2.1 里德‧所羅門編碼器之最佳化研究:

參考 TI 出版之 Programmer’s Guide[2],TI 所建議的 DSP 程式設計及最佳化流程可歸納 為以下數個步驟:

1. 設計原始 C 語言程式,驗證程式之功能正確性。

2. 使用 TI DSP 專用之程式編譯器 Code Composer Studio (CCS)進行編譯後,執行內附之 Profiler 功能後,分析所產生之檔案 Profile,可以觀察出程式中各個部分功能運行時所 消耗的資源(或是運算時間)。

3. 優先由 Profile 中佔去大部分運算時間的函式開始進行最佳化的工作,一般最直觀的最

佳化方法為修改原始程式的演算法部分,藉由直接簡化運算的複雜性或是移除多餘不必 要的計算來達到 DSP 硬體的加速,通常經由演算法的改進可以大幅度地提升執行的速 度。另外也可藉由 CCS 編譯器回報(Compiler’s Feedback)部分,觀察到我們所設計的程 式在 DSP 硬體中的資源使用情形以及 TI DSP 特別支援的 Software Pipelining(SP)功能的 運作情況,由資源使用的分佈平均與否以及 SP 的平行化效率來判斷我們的程式撰寫是 否可以適應 DSP 特殊的硬體架構,透過這方面的微調,在某些情況下也可以得到很好 的進步幅度。

4. 當前一個步驟 C 語言方面的最佳化已經沒有顯著的成效時,可以採用撰寫線性組合語 言(Linear Assembly)的方式,因為組合語言的層級較低(相較於 C),因此採用這種最佳化 的手段是比較繁瑣而且耗費時間的,但其優點是可以直接指定每一個指令所採用的 DSP

圖 B-1左側所示為在 CCS Profiler 下,RS Codec (Coder/Decoder)未最佳化前的 Profile (其 中 GP Setup 是指 Generator Polynomial 的建構);由於 RS Code 編碼有其特殊的演算法結構,

故內部所使用的運算絕大部分都不是一般的代數

RS Encode 77044

5%

1409404 95%

Others FF Arithmetic

空間的地方。值得特別注意的地方是在 FF 的運算部分,由於 FF 的運算我們是參考[3]中所 提出的 Mastrovito 架構,使用「乘積矩陣」(Product Matrix)的概念,當元素 A 與元素 B 相乘,

需將元素 B(事實上為一個 8 階的多項式)的各階係數寫成一個 8x1 的矩陣,再與乘積矩陣(此 我們參考了[4]所提出的另一種 FF 運算方法,稱為對數表格搜尋法(Logarithmic Table Lookup Method),這種方法是利用 FF 中的各個元素、都可以用編號 1~(m-1)元素、包含α0、α1… αm-1的線性組合來表示的特性來加以利用的,由於每個元素在 FF 中都有其獨一無二的編號 (或者可稱做”指數”),因此可以形成一對一的對照表格,以 FF(28)為實例說明;若元素 A 與 B 進行乘法,只需要事先建立一個 FF(2m)的對數對照表格(包括使用元素編號搜尋多項式係 數的對照表、稱做 alog table;以及使用多項式係數搜尋編號的對照表、稱做 log table),接 著將 A 與 B 經由 log table 查出相對應的元素編號,那麼乘法就變成很簡單的編號相加(或稱 列的 DSP 晶片上提供了一些特殊應用(Application Specific)的內建指令(Intrinsic Function),這 類指令的特徵是 TI 提供直接相對應的組語指令來支援這類的特殊指令,換句話說,TI 在其 DSP 上為一些常用的應用功能、設計了特殊的硬體架構來實現,這種硬體架構可以大幅度 地提升 DSP 在該應用的處理速度。很幸運地、TI 最新款的 DSP TMS320C6416 提供了針對 RS 編碼應用的內建指令:GMPY4,這個指令提供使用者可以同時快速處理四個 FF(28)的元

素乘法,由於這是 TI 針對 FF 運算所設計的特殊”硬體”架構,相較於之前我們從演算法上進 一部份的運算其實很單純,沒有什麼改進空間,只是因為需要代入 16*255(16 個 Syndrome 和 255 個 Codeword)次,因此才會耗去相當多的運算時間。

圖 B-3. RS 解碼器之 Profile 分析 圖 B-4. Syndrome 運算架構

而 RS 解碼部分,以功能而言,可區分為三個主要的區塊,分別是 Berlekamp Massey (BM) 演算法、Chien Search 以及 Forney 演算法,BM 演算法的目的在於求得錯誤位置多項式(Errata Locator Polynomial,ELP)、Chien Search 的目的在於求得 ELP 的根、Forney 演算法則是利用 上述兩個部分得出的結果來計算錯誤的數值,以達到更正錯誤資料訊號的目的,根據分析的 結果,BM 演算法約佔 14%運算量,Chien Search 佔 77%運算量,而 Forney 演算法僅佔 9%

運算量,我們首先由最耗費運算量的 Chien Search 來修改,Chien Search 的作法是使用 Exhaustively 的方式來算出 ELP 的根,換言之、就是需要將所有 FF(28)中的元素(共 255 個)

便可以有效降低這一部份的運算量。

接下來我們針對 BM 演算法的部分做修改,由於 BM 演算法中每一 iteration 都需要計算 一次 discrepancy (△)的倒數,而倒數這種運算在一般的 FF 運算中是比乘法還要複雜許多,

因此我們採用[5][6][7]所提出、改良過的 BM 演算法,如圖 B-5所示,左邊為原始的 BM 演 算法,右邊為修改後的版本,我們可以看到修改後的版本不需要計算△的倒數,這對程式的 運算量有一定程度的幫助。

最後、為了大幅度加快 RS 解碼器的運算速度,我們在 FF 乘法的部分也和 RS 編碼器一 樣,採用 TI 所提供的內建指令 GMPY4,但是與 RS 編碼器不同的地方在於,RS 編碼器使 用 GMPY4 之後,便可以不需要再建立對照表格(Lookup Table),這是因為 RS 編碼器中只需 要用到 FF 的乘法,而 GMPY4 已經提供這種功能了。但對於 RS 解碼器而言,雖然在前面 的步驟中我們消除了 BM 演算法中需要使用的 FF 倒數運算,但是在 Forney 演算法的部分,

無可避免地必須使用到 FF 的倒數運算,這時候就必須在使用到對照表格。

圖 B-5. Berlekamp Massey’s Algorithm 之比較與改進

相關文件