文獻(xiàn)標(biāo)識(shí)碼: A
DOI:10.16157/j.issn.0258-7998.2017.06.011
中文引用格式: 彭益智. 一種基于TMS320C6678多核處理器的JPEG實(shí)時(shí)解碼優(yōu)化算法[J].電子技術(shù)應(yīng)用,2017,43(6):45-47.
英文引用格式: Peng Yizhi. A JPEG real-time decoding optimization algorithm based on multicore DSP TMS320C6678[J].Application of Electronic Technique,2017,43(6):45-47.
0 引言
在艦船指揮控制系統(tǒng)中,要求數(shù)字視頻信號(hào)準(zhǔn)確、實(shí)時(shí)地傳輸,共享圖像資源。隨著微電子技術(shù)的發(fā)展,DSP廠商嘗試采用多核處理器構(gòu)架來(lái)滿足電子信息系統(tǒng)日益增長(zhǎng)的實(shí)時(shí)處理性能要求。針對(duì)數(shù)字視頻在電子信息系統(tǒng)應(yīng)用中的實(shí)時(shí)處理要求,本文基于TI公司TMS320C6678(簡(jiǎn)稱C6678)多核DSP的系統(tǒng)架構(gòu),提出了多核DSP任務(wù)并行設(shè)計(jì)方法,設(shè)計(jì)了基于C6678的JPEG解碼系統(tǒng),實(shí)現(xiàn)了核間高效通信和解碼任務(wù)并行流水,提高了JPEG解碼系統(tǒng)的實(shí)時(shí)處理能力。
1 JPEG解碼算法原理
JPEG是成熟的圖像壓縮標(biāo)準(zhǔn),根據(jù)人眼視覺(jué)特性,去除數(shù)據(jù)冗余信息,達(dá)到壓縮圖像的目的。JPEG編碼算法先將源圖像數(shù)據(jù)分塊,經(jīng)前向離散余弦變換(FDCT)、量化和熵編碼處理,輸出壓縮數(shù)據(jù)[1]。
JPEG解碼算法流程是編碼算法的逆過(guò)程。壓縮數(shù)據(jù)輸入解碼器,按位讀取以識(shí)別Huffman碼字,對(duì)照編碼表進(jìn)行熵解碼,輸出8×8的DCT系數(shù)矩陣,經(jīng)反量化、反向離散余弦變換(IDCT),8×8的DCT系數(shù)矩陣變換為8×8的數(shù)據(jù)塊,經(jīng)反向?qū)悠揭?、色彩模型轉(zhuǎn)換,重建圖像[2]。JPEG編解碼算法流程如圖1所示。
2 基于TMS320C6678多核處理器的JPEG實(shí)時(shí)解碼優(yōu)化算法
2.1 多核DSP任務(wù)并行設(shè)計(jì)方法
多核DSP任務(wù)并行設(shè)計(jì)方法適用于解決復(fù)雜算法在多核DSP平臺(tái)的設(shè)計(jì)問(wèn)題,包含算法模塊化分解、模塊間通信分析、模塊間通信優(yōu)化和模塊的多核加載4個(gè)步驟。任務(wù)并行方式主要有主從模式和數(shù)據(jù)流模式[3]。
主從模式的特點(diǎn)是集中控制和分散執(zhí)行。一個(gè)處理核設(shè)為Master,它調(diào)度所有的任務(wù),其他的處理核都為Slave。該模式要解決好處理核之間實(shí)時(shí)負(fù)載平衡問(wèn)題。主從模式如圖2所示。
數(shù)據(jù)流模式的特點(diǎn)是分散控制和分散執(zhí)行。處理核加載不同的運(yùn)算法則處理數(shù)據(jù),再將數(shù)據(jù)傳遞到下一個(gè)處理核,通過(guò)查詢數(shù)據(jù)的有效性或發(fā)送消息來(lái)激活處理核。適用數(shù)據(jù)流模式的程序通常包含較高計(jì)算復(fù)雜度的模塊,且模塊間存在緊密的數(shù)據(jù)依賴。運(yùn)用該模式時(shí),各個(gè)處理核之間有大量的數(shù)據(jù)要傳輸,要求系統(tǒng)帶寬高,并且難以平衡核間負(fù)載,處理性能受限于計(jì)算負(fù)載最大的核[2]。數(shù)據(jù)流模式如圖3所示。
2.2 實(shí)時(shí)解碼優(yōu)化算法設(shè)計(jì)
TMS320C6678是基于先進(jìn)的KeyStone處理器構(gòu)架,集成8個(gè)C66x核,運(yùn)算能力強(qiáng),網(wǎng)絡(luò)性能優(yōu)越,支持圖像、視頻等信號(hào)處理應(yīng)用。運(yùn)用多核DSP任務(wù)并行設(shè)計(jì)方法,在C6678平臺(tái)上設(shè)計(jì)JPEG解碼算法,主要步驟包括算法分解、通信分析、通信優(yōu)化和多核加載。
2.2.1 算法分解
將算法盡可能分解為小的模塊,有利于發(fā)現(xiàn)算法的并行性。分解時(shí),要結(jié)合考慮模塊計(jì)算量以及模塊之間的結(jié)合性、耦合性,分解點(diǎn)一般選擇在結(jié)合性較高、耦合性較低的地方[2]。JPEG解碼算法可分為下面8個(gè)模塊[1]:(1)初始化;(2)熵解碼;(3)DC系數(shù)解碼;(4)AC系數(shù)解碼;(5)反Z字形掃描;(6)反量化;(7)逆向離散余弦變換(IDCT);(8)色彩空間轉(zhuǎn)換。
模塊之間數(shù)據(jù)聯(lián)系緊密,且熵解碼和IDCT模塊的計(jì)算復(fù)雜度較高,所以為JPEG解碼算法選擇數(shù)據(jù)流任務(wù)并行模式。壓縮圖像數(shù)據(jù)經(jīng)熵解碼,輸出解碼中間符號(hào),然后經(jīng)DC系數(shù)、AC系數(shù)解碼,輸出64個(gè)DCT系數(shù),經(jīng)反Z字形掃描、反量化、IDCT和色彩空間轉(zhuǎn)換,最后重建圖像。解碼過(guò)程中發(fā)現(xiàn),DC系數(shù)解碼和AC系數(shù)解碼模塊存在數(shù)據(jù)聯(lián)系,模塊間耦合性較強(qiáng),Z字形掃描、反量化、IDCT和色彩空間轉(zhuǎn)換模塊間結(jié)合性較強(qiáng)。
2.2.2 通信分析
算法分解后,一般這些模塊不能獨(dú)立執(zhí)行,因?yàn)槟K之間需要傳輸命令和數(shù)據(jù),這是模塊間的通信需求。
控制流程表示模塊的執(zhí)行順序,加載到不同處理核的模塊通過(guò)發(fā)送消息來(lái)實(shí)現(xiàn)同步,模塊間還有數(shù)據(jù)傳輸需求,這些通信會(huì)給系統(tǒng)帶來(lái)延遲時(shí)間,控制流程的設(shè)計(jì)目的是系統(tǒng)處理能力最大化。數(shù)據(jù)流程表示模塊間數(shù)據(jù)傳輸?shù)姆较?,描述?shù)據(jù)與模塊的關(guān)系,數(shù)據(jù)流程的設(shè)計(jì)目的是模塊間數(shù)據(jù)通信量最小化。
JPEG解碼算法通信分析如圖4所示,分為模塊層和數(shù)據(jù)層,實(shí)線箭頭代表數(shù)據(jù)傳輸,虛線箭頭代表命令傳輸。
2.2.3 通信優(yōu)化
通信分析后,為了實(shí)現(xiàn)多核DSP內(nèi)核間高效通信,使算法高效執(zhí)行,模塊間通信需要優(yōu)化。模塊計(jì)算量小且與其他模塊耦合性較強(qiáng),可將模塊與其他模塊合并為子系統(tǒng),模塊間數(shù)據(jù)傳輸轉(zhuǎn)變?yōu)樽酉到y(tǒng)內(nèi)數(shù)據(jù)讀寫(xiě)。
針對(duì)JPEG解碼算法,DC系數(shù)解碼和AC系數(shù)解碼模塊共同處理DCT系數(shù)的DC系數(shù)和AC系數(shù),這兩個(gè)模塊間耦合性較強(qiáng),且模塊的計(jì)算量較小,將DC系數(shù)解碼、AC系數(shù)解碼和熵解碼合并為解碼子系統(tǒng)。反Z字形掃描、反量化、IDCT和色彩空間轉(zhuǎn)換模塊結(jié)合性較強(qiáng),在解碼過(guò)程中,這4個(gè)模塊間傳輸?shù)臄?shù)據(jù)量相當(dāng)龐大,除了IDCT,其他3個(gè)模塊的計(jì)算量都很小,將它們合并為DCT子系統(tǒng),這樣模塊間通信變?yōu)樽酉到y(tǒng)內(nèi)數(shù)據(jù)讀取,減少了模塊間通信。優(yōu)化后的JPEG解碼算法分為初始化模塊、解碼子系統(tǒng)和DCT子系統(tǒng)3部分,減少了模塊數(shù)量,優(yōu)化了模塊間通信。
通信優(yōu)化后的模塊通信如圖5所示,分為模塊層和數(shù)據(jù)層,實(shí)線箭頭代表數(shù)據(jù)傳輸,虛線箭頭代表控制命令的傳輸。
2.2.4 多核加載
通信優(yōu)化后,根據(jù)算法適合的任務(wù)并行模式,將模塊、子系統(tǒng)加載到不同處理核,實(shí)現(xiàn)算法的任務(wù)級(jí)并行流水處理。
將初始化模塊、解碼子系統(tǒng)和DCT子系統(tǒng)加載到不同處理核,實(shí)現(xiàn)算法的任務(wù)級(jí)流水。由于解碼和DCT子系統(tǒng)計(jì)算復(fù)雜度較高,限制了任務(wù)級(jí)流水的處理速度,為了充分發(fā)揮多核處理器性能,也對(duì)應(yīng)于JPEG編碼算法采用的映射方式,將這兩個(gè)子系統(tǒng)映射到多個(gè)處理核,以核級(jí)并行流水來(lái)提升系統(tǒng)的解碼速度。C6678的8個(gè)C66x核的編號(hào)為0~7,核0負(fù)責(zé)系統(tǒng)初始化,核1、2、3執(zhí)行解碼子系統(tǒng),解碼后的數(shù)據(jù)分別傳遞到核4、5、6,并執(zhí)行DCT子系統(tǒng),核1與4、2與5、3與6組成3條處理核級(jí)的并行流水線,如圖6所示。
2.3 設(shè)計(jì)實(shí)現(xiàn)
利用CCS5.0提供的SYS/BIOS和IPC組件,SYS/BIOS組件用于任務(wù)調(diào)度,IPC組件用于核間通信。
C6678的8個(gè)處理核為CORE0~CORE7,處理核初始化完成后等待同步消息。為實(shí)現(xiàn)內(nèi)核間高效通信,CORE0與CORE1、2、3間的通信采用最小通信模式,CORE1與CORE4、CORE2與CORE5、CORE3與CORE6間的通信采用數(shù)據(jù)傳輸模式?;贑6678的并行JPEG解碼系統(tǒng)的整個(gè)處理流程如圖7所示。
3 實(shí)驗(yàn)結(jié)果分析
為檢驗(yàn)基于C6678的JPEG解碼系統(tǒng)的處理能力,將相同的算法運(yùn)行在C6416、C6678的單C66x核上比較,實(shí)驗(yàn)數(shù)據(jù)如表1所示。
根據(jù)測(cè)試結(jié)果可知,優(yōu)化前,JPEG解碼算法具有基本相同的復(fù)雜度,基于C66x內(nèi)核的系統(tǒng)處理能力是基于C6416的系統(tǒng)的4.03倍;基于C6678的JPEG解碼系統(tǒng)的處理能力是基于C66x內(nèi)核的系統(tǒng)的4.65倍,是基于C6416的系統(tǒng)18.77倍。優(yōu)化后,JPEG解碼算法復(fù)雜度略有不同,基于C66x內(nèi)核的系統(tǒng)處理能力是基于C6416的系統(tǒng)的2.93倍;基于C6678的并行JPEG解碼系統(tǒng)的運(yùn)行時(shí)間為11 ms,系統(tǒng)的處理能力是基于C66x內(nèi)核的系統(tǒng)的5.36倍,是基于C6416的系統(tǒng)的15.73倍。
4 結(jié)束語(yǔ)
隨著先進(jìn)視頻處理技術(shù)在電子信息裝備中的應(yīng)用,本文針對(duì)TI公司TMS320C6678多核DSP的系統(tǒng)架構(gòu),提出了基于TMS320C6678的多核DSP解碼任務(wù)并行處理算法,提升了視頻處理實(shí)時(shí)能力。由于本文只采用了編譯器優(yōu)化途徑,后續(xù)可以在流水線設(shè)計(jì)、內(nèi)存調(diào)整控制等方面進(jìn)一步優(yōu)化,基于C6678的JPEG解碼系統(tǒng)的實(shí)時(shí)處理能力將進(jìn)一步增強(qiáng)。
參考文獻(xiàn)
[1] WALLACE G K.The JPEG still picture compression standard[J].IEEE Transaction on Consumer Electronics,1992,38:18-34.
[2] 彭益智,霍家道,徐偉.一種基于TMS320C6678的JPEG編碼算法并行實(shí)現(xiàn)方法[J].指揮控制與仿真,2012,34(1):119-122.
[3] 劉波,孫書(shū)為,孫永節(jié).H.264視頻編碼器的并行性分析[C].第十一屆全國(guó)計(jì)算機(jī)工程與工藝學(xué)術(shù)年會(huì)論文集,合肥,2007:194.
作者信息:
彭益智
(江蘇自動(dòng)化研究所,江蘇 連云港222061)