李桂菊
(中國科學(xué)院長春光學(xué)精密機械與物理研究所,吉林長春130033)
美國TI公司推出的TMS320C6000系列數(shù)字信號處理器在運算單元、總線結(jié)構(gòu),片內(nèi)存儲器結(jié)構(gòu)和流水處理等方面都有其獨特之處。該系列主要包括 62XX、64XX和 67XX 3大類,其中的64XX基于特殊的硬件結(jié)構(gòu)和高速處理能力,在通信、精確制導(dǎo)武器和數(shù)字圖像處理等需要高速運算的應(yīng)用領(lǐng)域具有強大的優(yōu)勢,已成為實時圖像處理系統(tǒng)的首選器件[1~6]。
DSP硬件結(jié)構(gòu)的特殊性使其處理能力的提升不僅僅依靠越來越快的時鐘速率來實現(xiàn),更主要依靠開發(fā)者對數(shù)據(jù)流程的合理安排及并行處理結(jié)構(gòu)的充分利用[7-11]。文獻[11]在 TMS320DM642 DSP平臺上實現(xiàn)了H264視頻編碼器,并對二級緩存優(yōu)化做了深入探討,但由于H264標(biāo)準(zhǔn)是以算法的復(fù)雜性換取壓縮質(zhì)量,所以盡管做了大量優(yōu)化,還只是達到了QCIF和CIF尺寸的視頻基本可以滿足視頻監(jiān)控的要求。文獻[12]提出了一種支持同時多線程的動態(tài)分發(fā)超長指令字(VLIW)數(shù)字信號處理器(DSP)架構(gòu),它雖然能提高處理器的指令吞吐率,但實現(xiàn)調(diào)度過于復(fù)雜。本文以MPEG-4視頻序列編碼標(biāo)準(zhǔn)[13]的圖像壓縮算法為例,論述了利用DSP底層結(jié)構(gòu)提高圖像處理實時性的一些方法。
TMS320C64XX系列是面向數(shù)字信號處理的定點芯片,該芯片的內(nèi)部結(jié)構(gòu)是在TMS320C62XX基礎(chǔ)上加以改進的,其性能特點如下[14]:
(1)DSP內(nèi)核采用超長指令字(VLIW)體系;
(2)CPU內(nèi)核有兩組共8個可并行運算的單元,64個32 bit的通用寄存器;
(3)支持8/16/32/64 bit的數(shù)據(jù)類型,兩個乘法累加單元一個時鐘周期可同時執(zhí)行4組16 bit×16 bit乘法或8組8 bit×8 bit乘法;
(4)采用兩級高速緩存結(jié)構(gòu);
(5)64個通道的EDMA。
TMS320C64XX芯片采用了兩級高速緩存結(jié)構(gòu)。一級緩存L1cache包含了數(shù)據(jù)緩存L1D和程序緩存L1P兩部分,而二級緩存L2cache則是數(shù)據(jù)、程序共用的,可以通過寄存器配置。L2全部為SRAM,作為片內(nèi)存儲器,也可配置其中的一部分為cache。CPU執(zhí)行程序時,先訪問一級緩存內(nèi)的程序代碼和數(shù)據(jù),若代碼或數(shù)據(jù)不在一級緩存內(nèi),再訪問L2,若L2中沒有所需代碼,就要訪問外部存儲器,由于一級緩存、二級緩存和片外存儲器訪問速度差異很大,所以合理利用二級緩存結(jié)構(gòu),可以提高編碼器的運行速度。
TMS320C64XX系列不同芯片的內(nèi)存容量相差較大,采用不同芯片針對二級緩存的優(yōu)化方法不同。以TMS320C6416為例,片內(nèi)包括16 KB程序 cache(L1P)、16 KB數(shù)據(jù) cache(L1D)和1 024 KB的統(tǒng)一程序/數(shù)據(jù)空間(L2)。
(1)針對L1的優(yōu)化
由L1P的工作原理可知,L1P首先一次性讀入512組連續(xù)的代碼指令,CPU發(fā)出的32位取指地址被解析,以確定在L1P中的地址,然后讀入該地址指令送入CPU中執(zhí)行。若CPU發(fā)出的取指地址不在L1P內(nèi),就要清除L1P中的無用代碼,重新從L2讀入一組連續(xù)代碼。若程序跳轉(zhuǎn)間隔較大,或循環(huán)體內(nèi)代碼過長,都會降低L1P的命中率。L1P的優(yōu)化就是將連續(xù)的運算過程放在一起,減少循環(huán)體內(nèi)的代碼長度,盡量用條件語句代替分支轉(zhuǎn)移語句。例如MPEG-4每個宏塊的編碼過程都是DCT變換、量化、逆量化和逆DCT變換,編碼時將DCT變換和量化放在一個循環(huán)體內(nèi),逆量化和逆DCT變換放在一個循環(huán)體內(nèi)。這樣既可以減少圖像的存取次數(shù),又可以避免循環(huán)體過長。合并后的代碼會一次性映射入L1P內(nèi)進行宏塊運算,減少了L1P讀缺失,提高了編碼效率。
L1D的工作原理與L1P類似,如果CPU所需的數(shù)據(jù)不全在L1D中,就需要不斷地從L2或從外部存儲器讀入。L1D的優(yōu)化就是將當(dāng)前CPU所需要讀取的有用數(shù)據(jù)放在一起,而且這些數(shù)據(jù)應(yīng)該按照cache line大小進行對齊,這樣可以使L1D cache的使用效率達到最大。
(2)針對L2的優(yōu)化
由于TMS320C6416芯片的L2可以配置為片內(nèi)SRAM,也可以配置為高速緩存,針對MPEG-4編碼器,由于其程序代碼和所要處理的數(shù)據(jù)量都較大,不可能將所有的代碼和數(shù)據(jù)都放入片內(nèi)。要使程序代碼在片內(nèi)外之間傳送而不影響程序的執(zhí)行效率很難實現(xiàn),而傳輸數(shù)據(jù)則可通過優(yōu)化存儲器結(jié)構(gòu)而不影響CPU執(zhí)行時間。所以針對L2的優(yōu)化優(yōu)先保障程序代碼都放在片內(nèi),然后放置每個宏塊編碼所必需的數(shù)據(jù),余下的空間配置為cache,按此原則,將L2在SRAM/CACHE的配置比例設(shè)為960 Kbyte/64 Kbyte。
為了能將使用頻率高的代碼和數(shù)據(jù)盡量留在cache中,就要將連續(xù)的運算過程或連續(xù)存取的數(shù)據(jù)放在一起,對代碼結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)重新組織,這時利用段的設(shè)置來指定部分程序和數(shù)據(jù)的位置是很必要的。TI的代碼產(chǎn)生工具生成的目標(biāo)文件是以段的形式組織在一起的,這些段包括編譯器自動產(chǎn)生的代碼段(.text)、全局變量段(.bss)、堆棧段(.stack)等,用戶也可以自己定義段,段的地址可由*.cmd文件指定。由于MPEG-4的初始數(shù)據(jù)表較多,如DCT系數(shù)表、可變長編碼表等,可用靜態(tài)數(shù)組來定義這些表格,并把這些數(shù)組以段的形式安排在固定空間,把可能連續(xù)調(diào)用的數(shù)據(jù)放在一起。
為進一步提高CACHE命中率,還應(yīng)盡量減小代碼尺寸,不同類型變量在DSP內(nèi)部存放機制不同,char型是單字節(jié)變量,不受位置限制,short型是雙字節(jié)變量,以2的整數(shù)倍為邊界存放,int是4字節(jié)變量,以4的整數(shù)倍為邊界存放。為此對較大數(shù)組考慮能否用short型代替int型,變量定義時應(yīng)將同類型變量放在一起,以減小代碼尺寸。
TMS320C64XX的數(shù)據(jù)存儲空間從內(nèi)到外依次為CPU內(nèi)部寄存器、一級緩存L1D、二級緩存L2、片外存儲空間4個層次。各層次數(shù)據(jù)傳遞流程如圖1所示。在L2與外部存儲器之間數(shù)據(jù)傳送由EDMA完成,而在CPU與L2之間可由CPU控制存取,而L2內(nèi)部的數(shù)據(jù)傳送既可由EDMA完成,也可由CPU完成。
圖1 DSP存儲空間數(shù)據(jù)傳遞流程Fig.1 Flowchart of DSP data transmission between memories
圖2 256 pixel×256 pixel大小的圖像存儲方式示意圖Fig.2 Schematic diagram of storage way for image with size of 256 pixel×256 pixel
TMS3206416D的EDMA控制器共有64個增強通道,并且可以設(shè)置不同通道的優(yōu)先級。EDMA控制器用來處理片內(nèi)L2SRAM和片內(nèi)外設(shè)以及外部存儲空間之間的數(shù)據(jù)搬移。
針對所設(shè)計的壓縮平臺,外接SDRAM經(jīng)過FPGA掛在DSP的EMIF總線上,SDRAM的訪問方式設(shè)置成FIFO形式,對給定的起始地址,一次最少存取64 bit,每次啟動EDMA之后只能從給定的存儲器首址順序搬移一段數(shù)據(jù)。MPEG-4編碼器以宏塊為單位進行編碼,每個宏塊大小為16 pixel×16 pixel,這樣EDMA就很難按宏塊存取,為了在該硬件平臺中發(fā)揮EDMA的作用,重新安排參考圖像的存儲結(jié)構(gòu),存放格式如圖2所示,圖2(a)為256 pixel×256 pixel大小的圖像正常存放方式示意圖,圖2(b)為按宏塊順序存放示意圖。存放順序為第一個宏塊的第一行,第一個宏塊的第二行,…,第一個宏塊的第16行,然后存第二個宏塊的第一行,第二個宏塊的第二行,以此類推。這樣參考圖像可以按宏塊讀入,進行宏塊編碼時,在片內(nèi)開辟乒乓結(jié)構(gòu)的雙緩沖區(qū)。一個用于接收待編碼的數(shù)據(jù)并輸出編碼后的重構(gòu)圖像數(shù)據(jù),另一個用于對已接收的數(shù)據(jù)進行編碼,而數(shù)據(jù)的傳送采用EDMA完成。這樣,可以同時完成數(shù)據(jù)編碼和傳輸工作,有效地改善編碼效率。
編碼I幀時,當(dāng)前圖像由于不能按宏塊讀取,將圖像分成n條,每條16行,即一個宏塊的高度,每條開始時讀入該條圖像到內(nèi)存,編碼每個宏塊時,用EDMA搬移一個宏塊到乒乓緩沖區(qū),一行所有宏塊編碼完,再讀下一條16行圖像。由于不需要運動估計,所以每個緩沖區(qū)只需分配當(dāng)前圖像和重構(gòu)兩個宏塊區(qū)域。
編碼P幀時,當(dāng)前圖像仍然按條讀入,編碼每個宏塊時,用EDMA搬移一個宏塊到乒乓緩沖區(qū)。設(shè)搜索范圍為[-15,16],包括搜索范圍在內(nèi)的參考圖像大小為48 pixel×48 pixel,即9個宏塊。因此每個緩沖區(qū)的大小包括:48 pixel×48 pixel大小的參考圖像、16 pixel×16 pixel大小的當(dāng)前圖像及16 pixel×16 pixel大小的重構(gòu)圖像。由于片內(nèi)搬移比片外到片內(nèi)搬移快,每個宏塊編碼傳輸啟動5個讀通道的EDMA:1個通道搬移運算緩沖區(qū)參考圖像后32列×48行到傳送緩沖區(qū)參考圖像的前32列;3個通道EDMA從外部存儲器參考圖像區(qū)讀一個宏塊放到內(nèi)存數(shù)據(jù)傳輸區(qū)后16列;另一個通道搬移當(dāng)前圖像宏塊。每個宏塊還啟動一個寫EDMA,將重構(gòu)圖像寫到外部存儲器中。這6個EDMA通道級聯(lián),每個宏塊編碼前設(shè)置一次,EDMA會將所需的圖像數(shù)據(jù)導(dǎo)入數(shù)據(jù)傳輸緩存區(qū),同時,CPU編碼另一個緩沖區(qū)中的數(shù)據(jù)。由于CPU和EDMA都要訪問數(shù)據(jù)緩沖區(qū)中參考圖像區(qū),設(shè)置CPU的優(yōu)先級高于EDMA。宏塊編碼結(jié)束時兩個區(qū)域指針交換,兩個緩沖區(qū)交替使用來提高CPU效率。乒乓緩沖區(qū)的操作過程如圖3所示。
圖3 乒乓操作過程示意圖Fig.3 Scheme of Ping-Pang operation process
直接移植到DSP上的MPEG-4視頻編碼器遠(yuǎn)遠(yuǎn)不能達到實時的要求,因此還需要結(jié)合TMS320C64XX的特點進行優(yōu)化。程序框架和主函數(shù)采用C語言編寫,可增加程序的易讀性,一些初值的設(shè)置編譯器也能自動幫助完成,既準(zhǔn)確又不耗時。而對耗時較多的模塊采用匯編優(yōu)化,在數(shù)據(jù)安排上要考慮二級緩存特性。編碼的計算量主要集中在運動估計、離散余弦變換、量化、反量化、逆離散余弦變換和可變長編碼幾個模塊,需要利用匯編語言進行優(yōu)化,同時要考慮DSP特性。
TMS320C64XX芯片內(nèi)核具有超長指令VLIW字處理能力。每次讀取與256 bit程序總線寬度對應(yīng)的取址包,即每個取址包有8條指令,分成1~8個執(zhí)行包,每個執(zhí)行包是并行執(zhí)行的指令,送入相應(yīng)運算單元。指令以取址、譯碼和執(zhí)行的硬件流水線運行。CPU內(nèi)部的8個運算單元分為兩組,分別為(M1、D1、S1、L1和 M2、D2、S2、L2),在一個時鐘周期內(nèi)8個單元可以同時運行,但8個單元所完成的功能不盡相同,M單元的指令與其它單元不通用,只運行乘法、點積、位計數(shù)等指令。除M單元指令外,有些指令只能在某一特定的運算單元執(zhí)行,如跳轉(zhuǎn)指令只能在S單元運行,存儲器訪問指令只能在D單元運行等,但也有部分指令在D,S和L中都能運行。
在用匯編優(yōu)化程序時,除按一般編寫步驟(將C源代碼翻譯成線性匯編代碼,確定最小迭代間隔,資源分配,安排模迭代間隔和安排剩余指令)之外,還要考慮運算單元與指令之間的對應(yīng)關(guān)系,改寫代碼。
下面以幾個實例來介紹提高匯編程序效率的技巧。
(a)修改指令,盡量利用M單元
由于M單元的特殊性,如果算法不涉及乘法運算,就不能用到M單元,這樣8個可并行工作的運算單元,一次最多能并行執(zhí)行6條指令,處理能力會降低25%。為提高運算效率,應(yīng)修改指令,盡量利用M單元。例如,計算4個8位像素和,可改寫為點積方式:
另外,還可用M單元作為循環(huán)初始條件的判據(jù)。例如從存儲器讀出數(shù)據(jù)經(jīng)過計算后,將處理結(jié)果存回到存儲器幀中,由于讀指令的延時間隙不為0,開始幾次循環(huán),結(jié)果還沒計算出來,此時不應(yīng)存數(shù)據(jù),實現(xiàn)該功能一般是設(shè)一個初值為2的寄存器,每個循環(huán)減1,當(dāng)為0時,存結(jié)果,但這樣會增加DSL單元的壓力。此時可以利用寄存器賦初值為0XFFFF8000,每個循環(huán)乘2(用低16位的乘法指令MPY實現(xiàn))為0時,存數(shù)。
其中前兩條指令在進入循環(huán)體之前執(zhí)行。
(b)訪問存儲器盡量使用半字或字訪問字節(jié)型數(shù)據(jù)
由于DSP單元都是32 bit寬,許多指令也支持高低半字或4個字節(jié)分別操作,當(dāng)對8 bit的短數(shù)據(jù)或16 bit半字進行操作時,可以字為單位同時讀取,然后再用內(nèi)部函數(shù)對數(shù)據(jù)進行運算。即使不能直接使用支持高低半字或4個字節(jié)的指令,也可用其它指令將字按字節(jié)或半字分別存入寄存器組中。這樣可以減少訪問數(shù)據(jù)存儲區(qū)的次數(shù),降低D單元的壓力,相應(yīng)地提高程序的運行速度。
(c)利用C64新增加的一個單元同時做4個8 bit或2個16 bit算術(shù)運算
C64XX增加了對打包數(shù)據(jù)的處理[15],可在一條指令內(nèi)對2個16 bit或4個8 bit的數(shù)據(jù)進行運算。例如在運動估計中要計算兩個塊(8×8)的絕對差之和。如下代碼一次計算8個點。從上面幾個例子中可以看出,在匯編優(yōu)化時,通過改寫代碼,合理利用指令,平衡各單元利用率,可進一步提高CPU效率。
在TMS320C6416硬件平臺上對MPEG-4視頻標(biāo)準(zhǔn)編碼器進行移植和優(yōu)化,DSP的時鐘頻率為800 MHz,輸入圖像為 512 pixel×512 pixel的灰度圖像,SDRAM大小為32 Mbyte,分成32個1 Mbyte的塊,每塊可存一幅圖像,分別存儲輸入圖像、參考圖像及重構(gòu)圖像,F(xiàn)PGA有一個精度為1 μs的計數(shù)器,其值可由軟件清零、讀入,用以記錄每幀的編碼時間,并可隨碼流輸出。對圖4所示的室內(nèi)景物運動序列進行壓縮實驗,截取其中的40 frame,1 個I frame,39 個 P frame,壓縮信噪比為33.09,輸出碼率為1.5 Mbit/s。平均壓縮時間為30.3 ms,沒有丟幀現(xiàn)象,可以滿足實時編碼的要求。
圖4 實時采集的圖像序列(壓縮后圖像)Fig.4 Real-time images(after compression)
占用的內(nèi)存空間進行優(yōu)化;利用EDMA級聯(lián)特性在內(nèi)存開辟雙緩沖區(qū),同時完成視頻數(shù)據(jù)編碼和傳輸?shù)墓ぷ?,有效地改善了編碼效率,使該平臺具有較高的數(shù)據(jù)吞吐能力和處理速度。實驗結(jié)果表明:該編碼器可以對 512 pixel×512 pixel,30 frame/s的視頻圖像進行實時編碼,并已應(yīng)用在實際工程中。
本文在TMS320C6416平臺上對MPEG-4視頻編碼器進行了優(yōu)化,包括對8個運算單元能并行執(zhí)行的特性進行匯編優(yōu)化;根據(jù)DSP芯片兩級高速緩存的工作特點,對編碼器中代碼和數(shù)據(jù)所
[1]許廷發(fā),趙思宏,周生兵,等.DSP并行系統(tǒng)的并行粒子群優(yōu)化目標(biāo)跟蹤[J].光學(xué) 精密工程,2009,17(9):2236-2240.XU T F,ZHAO S H,ZHOU SH B,et al..Particle swarm optimizer tracking based on DSP parallel system[J].Opt.Precision Eng.,2009,19(9):2236-2240.(in Chinese)
[2]李玉文,周家銳,沈琳琳.基于DM6446平臺的實時人眼檢測系統(tǒng)[J].深圳大學(xué)學(xué)報理工版,2009,26(10):420-424.LI Y W,ZHOU J R,SHEN L L.Real time eye detection system based on DM 6446[J].J.Shenzhen University Sci.Eng.,2009,26(10):420-424.(in Chinese)
[3]安博文,潘勝達.基于FPGA+DSP的超分辨率成像系統(tǒng)設(shè)計紅外技術(shù)[J].紅外技術(shù),2010,32(9):523-526.AN B W,PAN SH D.Design of super-resolution imaging system based on FPGA+DSP[J].Infrared Technol.,2010,32(9):523-526.(in Chinese)
[4]李勝勇,姜濤,朱強華.紅外序列圖像中小目標(biāo)實時檢測系統(tǒng)設(shè)計與實現(xiàn)[J].紅外技術(shù),2010,32(8):471-474.LI SH Y,JIANG T,ZHU Q H.Design and implement a real-time system for small target detection in infrared image sequence[J].Infrared Technol.,2010,32(8):471-474.(in Chinese)
[5]楊明極,曾稹.基于DSP的WAP實時圖像瀏覽平臺的研究[J].哈爾濱理工大學(xué)學(xué)報,2010,15(10):45-48.YANG M J,ZENG ZH.Research of WAP real-time image browsing piatform based on DSP[J].J.Harbin University of Science and Technol.,2010,15(10):45-48.(in Chinese)
[6]賈浩,崔慧娟,唐昆.基于TMS320DM6437平臺的視頻系統(tǒng)設(shè)計與實現(xiàn)術(shù)[J].電視技術(shù),2010,34(11):43-47.JIA H,CUI H J,TANG K.Design and implementation of video system based on TMS320DM 6437 platform[J].Video Eng.,2010,34(11):43-47.(in Chinese)
[7]宋立鋒,戴青云.分?jǐn)?shù)像素精度運動估計的DSP優(yōu)化方法[J].通信學(xué)報,2009,30(6):114-119.SONG L F,DAI Q Y.Technique of DSP optimization on fractional-pixel-accurary motion estimation[J].Communication J.,2009,30(6):114-119.(in Chinese)
[8]趙峰,袁東風(fēng),張海霞,等.多DSP圖像壓縮實時并行處理系統(tǒng)[J].光學(xué) 精密工程,2007,15(9):1451-1455.ZHAO F,YUAN D F,ZHANG H X,et al..Multi-DSP real-time parallel processing system for image compression[J].Opt.Precision Eng.,2007,15(9):1451-1455.(in Chinese)
[9]周雅贇,徐元欣,方健,等.基于TMS320DM642的MPEG-4編碼器設(shè)計和優(yōu)化[J].電視技術(shù),2005,29(6):36-38.ZHOU Y Y,XU Y X,F(xiàn)ANG J,et al..Implementation of mpeg-4 video encoder based on TMS320DM642[J].Video Eng.,2005,29(6):36-38.(in Chinese)
[10]曾明霞.基于DSP的MPEG-4視頻編碼器研究與實現(xiàn)[D].南京:南京理工大學(xué),2007.ZENG M X.Research and implementation of MFEG-4 video coder based on the the DSP[D].Nanjing:Nanjing University Science and Technology,2007.(in Chinese)
[11]劉剛.H.264視頻編碼器在DSP上的實現(xiàn)與優(yōu)化[D].長春:中國科學(xué)院長春光學(xué)精密機械與物理研究所,2010.LIU G.Implementation and optimization of H.264 video encoder based on DSP[D].Changchun:Changchun Institute of Optics,F(xiàn)ine Mechanics and Physics,Chinese Academy of Sciences,2010.(in Chinese)
[12]沈鉦,孫義和.一種支持同時多線程的VLIW DSP架構(gòu)[J].電子學(xué)報,2010,38(2):352-358.SHEN ZH,SUN Y H.Architecture design of simultaneous multithreading VLIW DSP[J].Electronic J.,2010,38(2):352-358.(in Chinese)
[13]鐘玉琢,王琪,賀玉文.基于對象的多媒體數(shù)據(jù)壓縮編碼國際標(biāo)準(zhǔn)—MPEG-4及其校驗?zāi)P停跰].北京:科學(xué)出版社,2000.ZHONG Y ZH,WANG Q,HE Y W.Based on Video Object Multimedia Data Compress Encode International Standard-MPEG-4and Video Verification Model[M].Beijing:Science Press,2000.(in Chinese)
[14]李方慧,王飛,何佩琨.TMS320C6000系列DSPs原理與應(yīng)用[M].2版.北京:電子工業(yè)出版社,2003.LI F H,WANG F,HE P K.DSPs Principle and Applying of TMS320C6000[M].2nd ed.Beijing:Electronics Industry Press,2003.(in Chinese)
[15]TMS320C64x/c64x+DSP CPU and Instruction set reference guide[G].Dallas:Texas Instruments Incorporated,2005.