許昌滿1陳兆龍21.上海應(yīng)用技術(shù)學(xué)院 2.巢湖學(xué)院
?
基于Tilera平臺(tái)的AVS視頻編碼器的研究與實(shí)現(xiàn)
許昌滿1陳兆龍2
1.上海應(yīng)用技術(shù)學(xué)院2.巢湖學(xué)院
摘要:Tile處理器是Tilera公司研發(fā)的一種新型的多核處理器,文章在介紹Tilera平臺(tái)的多核處理器的基礎(chǔ)上,根據(jù)該處理器的架構(gòu)特點(diǎn),在該平臺(tái)上實(shí)現(xiàn)了AVS和H.264的標(biāo)清/高清實(shí)時(shí)視頻編碼器。
關(guān)鍵字:AVS Tilera 多核處理器 視頻編碼 H.264
Tile處理器是Tilera公司研發(fā)的一種新型的多核處理器,它能夠在一顆高度集成的芯片上提供前所未有的高性能,靈活性以及低能耗,它主要由一個(gè)二維的計(jì)算引擎陣列組成,每個(gè)計(jì)算引擎可以看作一個(gè)tile核,并且每個(gè)tile都支持c語(yǔ)言編程,同時(shí)每 個(gè)tile都被一個(gè)二維的網(wǎng)絡(luò)結(jié)構(gòu)相互連接起來(lái)。這種結(jié)構(gòu)可擴(kuò)展性很強(qiáng),可以做成8×8,可以做成 10×10,他們之間通過(guò)二維網(wǎng)狀網(wǎng)絡(luò)達(dá)到連接的效果,它克服了傳統(tǒng)的以一維總線架構(gòu)做的多核處理 器的信號(hào)通信方面的瓶頸,因?yàn)檫@種多核處理器當(dāng)核的個(gè)數(shù)超過(guò)了8個(gè)核或者16個(gè)核的時(shí)候,一維總線就會(huì)非常繁忙,這樣會(huì)使得數(shù)據(jù)傳輸與交換緩慢,大大的影響了處理器的性能。在處理器芯片上,Tile 處理器結(jié)合外部緩存和I/O接口組成了完備的可編程的多核處理器,外部緩存和I/O接口也是通過(guò)iMesh 技術(shù)與tile進(jìn)行相連通信的。TILEPro64就是Tilera的 一個(gè)8*8的64核的處理器。每一個(gè)tile都是一個(gè)強(qiáng)大的,性能完備的計(jì)算系統(tǒng),都可以獨(dú)立的運(yùn)行一個(gè)操作系統(tǒng),例如SMP Linux操作系統(tǒng)等。每一個(gè)tile有一個(gè)32位的整數(shù)處理器引擎,這個(gè)處理器引擎中包含一個(gè)3通道的超長(zhǎng)指令字架構(gòu),該架構(gòu)有自己的指令計(jì)數(shù)器(PC), 高速緩沖存儲(chǔ)器(cache)和DMA子系統(tǒng)。每一個(gè)獨(dú)立的tile在一個(gè)時(shí)鐘周期都最多能執(zhí)行三條指令。Tilera處理器中有配合該硬件設(shè)備的特定指令集來(lái)處理視頻編碼或者網(wǎng)絡(luò)數(shù)據(jù)處理的一些復(fù)雜的計(jì)算,這些指令集使得運(yùn)算的效率更高,這些指令集包括:差的絕對(duì)值的和的計(jì)算(SAD),搜索與計(jì)數(shù),加擾,SIMD指令,不對(duì)齊的數(shù)據(jù)的訪問(wèn)等。
Tilera處理器的每個(gè)tile都有自己獨(dú)立的cache,并且有和其它的tile相連的共享內(nèi)存,每個(gè)tile都包括一個(gè)一級(jí)的數(shù)據(jù)cache(L1D),一個(gè)一級(jí)的指令cache(L1I)和一個(gè)共享的二級(jí)cache(L2)。Tile通過(guò)訪問(wèn)L1I來(lái)讀寫(xiě)指令,在執(zhí)行指令的過(guò)程中都會(huì)檢查 L1D和L2來(lái)讀取或者更新數(shù)據(jù),如果指令需要的數(shù)據(jù)在這個(gè)tile中沒(méi)有找到,則tilera的內(nèi)存系統(tǒng)就會(huì)在旁邊相連的tile中尋找數(shù)據(jù)。I/O接口:Tile處理器采用了軟I/O結(jié)構(gòu),這種結(jié)構(gòu)使得原本通常在硬件中實(shí)現(xiàn)的一些應(yīng)用,通過(guò)在一些tile上運(yùn)行一些代碼來(lái)實(shí)現(xiàn)。
基于Tilera平臺(tái)的視頻編碼器的架 構(gòu)主要由5部分組成,即采集模塊,視頻編碼模塊,音頻編碼模塊,碼流復(fù)用模塊和碼流輸出模塊。
2.1模塊
(1)采集模塊:該模塊的功能是接收標(biāo)清SDI 的信號(hào)或者高清SDI信號(hào),采集視頻和音頻的數(shù)據(jù),將SDI信號(hào)中的視頻數(shù)據(jù)轉(zhuǎn)換成一幀一幀的YUV數(shù)據(jù)存在Tile的共享內(nèi)存中,同時(shí)將SDI附屬數(shù)據(jù)中的音頻數(shù)據(jù)解析成音頻的PCM數(shù)據(jù)存在Tile的共享內(nèi)存中。
(2)視頻編碼模塊:該模塊的功能是實(shí)現(xiàn)高清/標(biāo)清的AVS[4](PAL/NTSC)或者H.264[5](PAL/NTSC)的實(shí)時(shí)編碼,它通過(guò)共享內(nèi)存,讀取采集模塊采集到的視頻的YUV數(shù)據(jù),將YUV數(shù)據(jù)編碼壓縮成為符合AVS1.0標(biāo)準(zhǔn)的ES流或者編碼壓縮成為符合H.264標(biāo)準(zhǔn)的ES流,同時(shí)將這些視頻ES流存入到Tile的共享內(nèi)存中。
(3)音頻編碼模塊:該模塊的功能是實(shí)現(xiàn)音 頻的MPEG-1 layer2的實(shí)時(shí)編碼,它通過(guò)共享內(nèi)存, 讀取采集模塊采集到的音頻的PCM數(shù)據(jù),將PCM數(shù) 據(jù)編碼壓縮成為MPEG-1 layer2的ES流,并且將這些音頻ES流存入到Tile的共享內(nèi)存中。
(4)碼流復(fù)用模塊:該模塊的功能是從共享內(nèi)存中讀取輸入的AVS視頻ES流或者H.264視頻ES 流和MPEG-1音頻ES流,將這些數(shù)據(jù)實(shí)時(shí)的復(fù)用成符合13818-1標(biāo)準(zhǔn)的TS流,并且將這些TS流數(shù)據(jù)存在Tile的共享內(nèi)存中。
(5)碼流輸出模塊:該模塊的功能是將碼流 復(fù)用模塊中輸出的TS流,通過(guò)IP接口實(shí)時(shí)輸出傳輸 流或者通過(guò)ASI接口實(shí)時(shí)輸出TS流。
(6)管理控制模塊:該模塊主要包括兩個(gè)部分,即網(wǎng)絡(luò)控制模塊和LED液晶面板控制模塊,網(wǎng)絡(luò)控制模塊的功能是接收用戶(hù)通過(guò)網(wǎng)絡(luò)發(fā)過(guò)來(lái)的啟動(dòng)編碼器或者停止編碼器,以及設(shè)置編碼器的一些參數(shù)的命令,然后根據(jù)命令啟動(dòng)或者關(guān)閉其它軟件模塊,LED液晶面板控制模塊是用戶(hù)通過(guò)設(shè)置前面板對(duì)編碼器的編碼參數(shù)以及編碼器的開(kāi)啟與關(guān)閉進(jìn)行設(shè)置和管理。
2.2模塊間的通訊和CPU的分配
(1) 每個(gè)模塊之間的通訊與數(shù)據(jù)傳輸 從2.1節(jié)中編碼器的每個(gè)模塊的介紹中,我們可以看出,模塊間的數(shù)據(jù)傳輸是通過(guò)Tile提供的共 享內(nèi)存來(lái)實(shí)現(xiàn)的。每個(gè)模塊之間的通訊是通過(guò)Linux的信號(hào)傳輸來(lái)完成的。
(2)每個(gè)模塊的CPU的分配與綁定
Tile平臺(tái)提供了一些讓Linux下的任務(wù)進(jìn)程與該平臺(tái)的某些CPU綁定的函數(shù),這樣被綁定的線程函數(shù),就只能在其個(gè)CPU或者某個(gè)CPU集合上運(yùn)行。
3.1基于Tilera平臺(tái)的AVS視頻編碼器中多線程的管理
任務(wù)實(shí)時(shí)調(diào)度模塊完成任務(wù)隊(duì)列的創(chuàng)建、銷(xiāo)毀,以及向隊(duì)列添加、刪除任務(wù),還有線程的創(chuàng)建,任務(wù)的執(zhí)行,線程與tile處理器的綁定等功能;這里的任務(wù)的優(yōu)先級(jí)我們分為兩級(jí),一級(jí)是幀級(jí)的編碼,一級(jí)是Slice的編碼,幀級(jí)的編碼的優(yōu)先級(jí)高于Slice的編碼,當(dāng)有空閑得CPU,該CPU就會(huì)去任務(wù)欄中尋找可以執(zhí)行的任務(wù),先尋找優(yōu)先級(jí)高的任務(wù),再尋找優(yōu)先級(jí)較低的任務(wù)。為了在保證圖像編碼質(zhì)量的情況下,提高編碼的速度,我們對(duì)I幀和 B、P幀采取了不同的編碼架構(gòu),I幀是單slice的 編碼,B幀和P幀采用了多slice的編碼方式。
3.2基于Tilera平臺(tái)的AVS視頻編碼器中的內(nèi)存 的管理與平衡
(1)共享內(nèi)存的申請(qǐng)與使用
(2)Tilera平臺(tái)的4個(gè)內(nèi)存控制器的平衡
Tile處理器有四個(gè)獨(dú)立的DDR2內(nèi)存控制器, 64個(gè)核分成四個(gè)象限,每個(gè)象限都有一個(gè)內(nèi)存控制器,同時(shí)每一個(gè)控制器都可以分別控制外部的DRAM部件,Tile處理器有內(nèi)存striping的功能,這個(gè)功能可以自動(dòng)的平衡四個(gè)內(nèi)存控制器中的內(nèi)存訪問(wèn)頻率。
在H.264/AVS的視頻編碼的CPU的分配過(guò)程中, 我們根據(jù)Tile的內(nèi)存控制器的結(jié)構(gòu),將4路標(biāo)清編碼,每一路的進(jìn)程分配在了同一個(gè)象限中。
3.3基于Tilera平臺(tái)的AVS視頻編碼器的優(yōu)化
AVS視頻編碼性能優(yōu)化主要從以下幾個(gè)方面進(jìn)行:
(1)編譯選項(xiàng)參數(shù)優(yōu)化為了獲得更好的性能,提高指令在緩存中的命中率,編譯選項(xiàng)設(shè)置為-o3進(jìn)行最優(yōu)級(jí)別的優(yōu)化。
(2)緩存的存取模式 AVS視頻編碼為多線程、多任務(wù)的應(yīng)用,系統(tǒng)默認(rèn)緩存模式是Hash-for-home(Distributed L3 Cathing), Hash-for-home 允許定義一個(gè)CPUs的集合作為分配的緩存L3,當(dāng)L2Cache不能命中時(shí),也不需要去訪 問(wèn)DRAM,而是轉(zhuǎn)到了L3.
(3)任務(wù)的同步tmc庫(kù)提供了經(jīng)過(guò)優(yōu)化的一些用于線程同步的API,系統(tǒng)的pthread_mutex_lock()相比,性能有明顯提高。在進(jìn)行任務(wù)同步的時(shí)候,我們采用了 tmc_spin_mutex_unlock()函數(shù)替代pthread_ mutex_lock(),這樣提高了編碼的速率。
(4)指令集的應(yīng)用 指令集方面的優(yōu)化主要是兩個(gè)方面的優(yōu)化,一方面是SIMD指令的使用,Tilera處理器的SIMD(單指 令多數(shù)據(jù)流)指令可將同一寄存器中的高十六位與低十六位作為兩個(gè)半字整形進(jìn)行處理,甚至可將它細(xì)分成4個(gè)8位整形。這樣就可以在一條指令中執(zhí)行4個(gè)8位加法,或移位等操作。我們對(duì)AVS/H.264的視頻編碼的量化與反量化模塊,DCT與IDCT模塊,CAVLC模塊,運(yùn)動(dòng)估計(jì)模塊和Deinterlace模塊的優(yōu)化中都使用SIMD語(yǔ)句,應(yīng)用SIMD語(yǔ)句讀寫(xiě)或計(jì)算一組數(shù)據(jù)可以顯著提高執(zhí)行效率。
另一方面是一些預(yù)處理指令的使用,例如預(yù)取指令prefetch,在Tilera平臺(tái)中,L1I高速緩沖支持硬件預(yù)取指令引擎,這可以在cache中預(yù)測(cè)取出最有可能執(zhí)行的下一條指令,對(duì)于要處理的數(shù)據(jù)也是如此,我們通過(guò)prefetch指令給硬件一些暗示,讓處理器能夠提前知道這些數(shù)據(jù)下面要處理了。
AVS是具有我國(guó)自主知識(shí)產(chǎn)權(quán)的視頻壓縮標(biāo)準(zhǔn),在保證與國(guó)際先進(jìn)標(biāo)準(zhǔn)相當(dāng)?shù)木幋a性能的同時(shí),顯著降低了算法復(fù)雜度,加之專(zhuān)利費(fèi)用較低,在各種數(shù)字多媒體應(yīng)用領(lǐng)域或者廣播電視領(lǐng)域有廣泛的應(yīng)用前景,H.264是目前替代MPEG-2標(biāo)準(zhǔn)的已被廣泛使用的標(biāo)準(zhǔn),本文在Tilera的多核的平臺(tái)上,實(shí)現(xiàn)了一路AVS/H.264高清或者多路AVS/H.264標(biāo)清編碼器的研發(fā),編碼器的輸入為SDI信號(hào),輸出為 ASI信號(hào)或者傳輸流通過(guò)網(wǎng)絡(luò)UDP輸出。實(shí)驗(yàn)結(jié)果證明,該平臺(tái)具有計(jì)算能力強(qiáng),性能穩(wěn)定等特點(diǎn),在該平臺(tái)上實(shí)現(xiàn)了AVS和H.264的標(biāo)清/高清實(shí)時(shí)視頻編碼器。
參考文獻(xiàn)
[1]Tile Processor User Architecture Manual March 2011 TILERA CORPORATION;
[2]Application Libraries Reference Manual April 2011 TILERA CORPORATION;
[3]Programming The Tile Processor March 2011 TILERA CORPORATION;
[4]GB/T 20090《信息技術(shù)先進(jìn)音視頻編碼第二部分:視頻》;