一種用于多核并行視頻編碼和解碼的共享內(nèi)存接口的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明設(shè)及視頻編碼技術(shù)領(lǐng)域,特別設(shè)及運(yùn)用多核數(shù)字信號(hào)處理器DSP忍片完成 高清視頻編解碼及傳輸?shù)亩嗪瞬⑿幸曨l編碼和解碼方法W及多核并行時(shí)高速緩存的優(yōu)化 措施。
【背景技術(shù)】
[0002] 上世紀(jì) 80 年代 3C(Computers,Communications,ConsumerElectronics)的相互 滲透與融合催生了多媒體技術(shù)并且推動(dòng)多媒體技術(shù)飛速發(fā)展與普及。視頻編碼是多媒體技 術(shù)中的關(guān)鍵技術(shù)。近年傳輸視頻清晰度不斷提升,同時(shí)視頻編碼標(biāo)準(zhǔn)頻繁更新?lián)Q代,還不 斷涌現(xiàn)新內(nèi)容。2002年CIFH. 263在會(huì)議電視設(shè)備中尚占據(jù)主流。2005年就出現(xiàn)了 720P H. 264。到2009年1080P會(huì)議電視設(shè)備已為市場(chǎng)主推產(chǎn)品。運(yùn)個(gè)時(shí)刻離1080P隨SonyPS2 游戲機(jī)和藍(lán)光產(chǎn)品上市的時(shí)刻并不遙遠(yuǎn)。存儲(chǔ)介質(zhì)和雙向?qū)崟r(shí)網(wǎng)絡(luò)傳輸兩類(lèi)應(yīng)用對(duì)視頻編 碼提出的壓縮比和實(shí)時(shí)性要求相差甚遠(yuǎn),僅單純實(shí)時(shí)解碼和實(shí)時(shí)編解碼就相差2倍W上運(yùn) 算量。運(yùn)么短時(shí)間一下邁上運(yùn)么高臺(tái)階,完全得益于處理器忍片技術(shù)的飛躍!目前實(shí)時(shí)傳 輸雙向的S路1080P@60化比264達(dá)到SonyPS3高清晰度的會(huì)議電視終端上市后,接下來(lái) 的內(nèi)容自然是4K、8K超高清視頻和最新視頻編碼標(biāo)準(zhǔn)肥VC/H. 265。
[0003] 一路 1080P@30Hz視頻的圖像數(shù)據(jù)量達(dá)到 746, 496,OOObit/s。WmJ-RBT. 1120 格式傳輸時(shí)速率達(dá)I. 485Gbit/s。壓縮為I~8Mbit/s的H. 264碼流,編碼、解碼各需要2 片、1片32位定點(diǎn)處理能力96億次/秒的TIC6455@l. 2GHz數(shù)字信號(hào)處理器DSP忍片。視 頻編碼技術(shù)對(duì)于處理器忍片性能要求不斷躍進(jìn)。IntelPentium4@4GHz處理器忍片上市 失敗后,傳統(tǒng)的提升處理器忍片性能的手段遇到阻滯,多核結(jié)構(gòu)包括同構(gòu)多核和異構(gòu)多核 已經(jīng)成為提升處理器忍片性能的最主要手段。在DSP忍片領(lǐng)域數(shù)麻省理工學(xué)院MIT教授 AnantAgarwal創(chuàng)立的Tilera公司推出的64核屯、DSP忍片Tile64最引人注目。其中最顯 著優(yōu)勢(shì)為iMesh片內(nèi)核間高速互連網(wǎng)絡(luò),呈8x8網(wǎng)格狀,網(wǎng)格節(jié)點(diǎn)為64個(gè)相同的64位定點(diǎn) 處理器核屯、,包含5套獨(dú)立物理線(xiàn)路,包交換,支持?jǐn)?shù)據(jù)包組播和廣播。TI公司則在C6455 忍片達(dá)到傳統(tǒng)單核屯、DSP性能頂峰后推出3核屯、TCI6487/6488和6核屯、TCI6486忍片,片 內(nèi)分別包含3個(gè)、6個(gè)C6455核屯、,雖然沒(méi)有Tile64那么引人注目,但是牢牢占據(jù)高端DSP 忍片市場(chǎng)。TI最新最強(qiáng)的DSP為C6678,包含8個(gè)浮點(diǎn)處理器核屯、W及TeraNet片內(nèi)高速 互連網(wǎng)絡(luò)。
[0004] 在娃片上復(fù)制n份處理器核屯、簡(jiǎn)單易行。難度和關(guān)鍵在于如何讓n個(gè)核屯、在應(yīng) 用中表現(xiàn)出期待的n倍性能!除了依靠核間通信技術(shù),最主要還是依賴(lài)軟件包括操作系統(tǒng) OS和應(yīng)用軟件?,F(xiàn)時(shí)DSP所用實(shí)時(shí)操作系統(tǒng)RTOS包括Linux嵌入式發(fā)行版本和TIDSP/ BIOS。版本號(hào)高于2. 6. 10的Linux支持對(duì)稱(chēng)多處理器SMP,具有調(diào)度多核間負(fù)荷分布的能 力。鑒于目前計(jì)算機(jī)應(yīng)用領(lǐng)域內(nèi)標(biāo)量過(guò)程的單一任務(wù)在多處理上均衡的技術(shù)解決狀況,運(yùn) 用RTOS提供的多進(jìn)程和多線(xiàn)程設(shè)置多任務(wù)是RTOS有效均衡多核負(fù)荷的情景和前提條件。 也就是現(xiàn)有RTOS對(duì)標(biāo)量過(guò)程的單一任務(wù)運(yùn)行于多核的自動(dòng)調(diào)度負(fù)荷分布的作用很微弱。
[0005] 本發(fā)明設(shè)及領(lǐng)域恰恰正是運(yùn)種情況:一路高清視頻數(shù)據(jù)量巨大,編碼和解碼運(yùn)算 量巨大,雙向?qū)崟r(shí)網(wǎng)絡(luò)傳輸時(shí)更甚,需要拿出多個(gè)核屯、去應(yīng)付;視頻編碼和解碼都是順序執(zhí) 行的上下文的標(biāo)量過(guò)程,前一步未完就走不到后一步;在時(shí)間、空間上也存在很強(qiáng)的運(yùn)算與 數(shù)據(jù)的關(guān)聯(lián)與依賴(lài)。緣于視頻編碼本身就是計(jì)算時(shí)間、空間相關(guān)性W去除表達(dá)冗余減少數(shù) 據(jù)量。視頻編碼技術(shù)的壓縮比越高,時(shí)間、空間相關(guān)的范圍和程度也越大,相應(yīng)運(yùn)算量據(jù)增。 此時(shí)RTOS已無(wú)意義,唯有依靠應(yīng)用軟件。n個(gè)核屯、表現(xiàn)出n倍性能即要求并行加速比達(dá)到 n。在軟件上提高并行加速比的途徑、措施是調(diào)整負(fù)荷在多核的分布達(dá)到均衡、減少并行等 待和相互阻塞、優(yōu)化高速緩存。
[0006] 在Tile64 上首先嘗試用文獻(xiàn)一巧rikB.vanderTol,etal.MappingofH. 264 decodingonamultiprocessorarchitecture.ProceedingsofSPIEConference onImageandVideoCommuincations,Vol. 5022,PP. 707 一 718,Jan. 2003)的水邊線(xiàn) Waterhont多核并行解碼方法實(shí)現(xiàn)H. 264解碼,見(jiàn)于文獻(xiàn)二(管輝.基于同構(gòu)多核處理器 的H. 264并行解碼算法研究.哈爾濱工業(yè)大學(xué)碩±學(xué)位論文.2009.下裁于中國(guó)知網(wǎng)www. cnki.net)。步驟簡(jiǎn)述如下:
[0007] (1)安排Tile64的1個(gè)核屯、#0處理一帖圖像碼流解析,5個(gè)核屯、#1~5處理一 帖圖像重建W及去方塊環(huán)路濾波。
[000引 (2)核屯、#0在共享內(nèi)存中為全部共享圖像數(shù)據(jù)、圖像重建隊(duì)列和去方塊濾波隊(duì)列 的結(jié)構(gòu)體變量開(kāi)辟空間malloc,對(duì)運(yùn)些隊(duì)列和處理狀態(tài)數(shù)組所帶的互斥鎖Mutex做初始 化,把位于左上頂點(diǎn)坐標(biāo)(0,0)的第一個(gè)宏塊排入圖像重建隊(duì)列。
[0009] (3)用雙緩沖區(qū)方法(也稱(chēng)兵鳥(niǎo)緩沖方法)使核屯、#0的碼流解析與核屯、#1~5 的圖像重建W及去方塊環(huán)路濾波并行執(zhí)行。即從核屯、#0操作緩沖區(qū)#0開(kāi)始。核屯、#0完 成后把緩沖區(qū)#0交給核屯、#1~5操作,接著操作緩沖區(qū)#1 ;緩沖區(qū)#0和#1的操作都完成 后,通過(guò)指針輪換交換緩沖區(qū),核屯、#0操作緩沖區(qū)#0同時(shí)核屯、#1~5操作緩沖區(qū)#1 ;…。
[0010] (4)核屯、#1~5每個(gè)核屯、執(zhí)行W下步驟:
[0011] (41)循環(huán)讀先進(jìn)先出FIFO的隊(duì)列queue直到從中取出一個(gè)宏塊(mb_y,mb_x)為 止,每次循環(huán)先讀帶互斥鎖的圖像重建隊(duì)列,如果遇空再讀帶互斥鎖的去方塊環(huán)路濾波隊(duì) 列;
[0012] (42)宏塊(mb_y,mb_x)圖像重建或者去方塊環(huán)路濾波,完成后寫(xiě)帶互斥鎖的宏塊 (mb_y,mb_x)的處理狀態(tài)為已完成圖像重建或者已完成去方塊環(huán)路濾波;
[0013] (43)讀帶互斥鎖的下一行相鄰的左下宏塊(mb_y+l,mb_x-l)和下方宏塊(mb_ y+l,mb_x)的處理狀態(tài),判斷能否執(zhí)行圖像重建或者去方塊環(huán)路濾波;
[0014] (44)更新帶互斥鎖的圖像重建隊(duì)列和去方塊環(huán)路濾波隊(duì)列,把可處理的0/1/2個(gè) 宏塊排入隊(duì)列;
[0015] (45)處理完一帖圖像全部宏塊的圖像重建W及去方塊環(huán)路濾波,退出循環(huán);否 貝1J,跳到(41)繼續(xù)循環(huán)執(zhí)行。
[0016] (5)核屯、#0碼流解析完成與核屯、#1~5的圖像重建W及去方塊環(huán)路濾波完成的 同步。
[0017] (6)跳到(4)繼續(xù)循環(huán)執(zhí)行下一帖圖像碼流的解碼,直到碼流終止。
[0018] W上方法和程序的效果十分糟糕:對(duì)于化reman序列CIFH. 264碼流,Tile64單 核運(yùn)行PC機(jī)算法驗(yàn)證模型的H. 264解碼軟件C代碼(未經(jīng)任何針對(duì)Tile64平臺(tái)的優(yōu)化), 解碼平均帖頻20多ms/f;分?jǐn)偟?個(gè)核后慢得非常多;最后完成代碼優(yōu)化工作,主要包括 32位單指令多數(shù)據(jù)操作SIMD、循環(huán)拆解、條件分支替代等措施,也僅達(dá)到23ms^。也就是 說(shuō)優(yōu)化后在6個(gè)核上跑,比未優(yōu)化在一個(gè)核上跑還慢。曾經(jīng)將解碼軟件的可執(zhí)行文件交給 Tilera公司分析,答復(fù)是片內(nèi)高速緩存cache緩存的數(shù)據(jù)絕大部分為非母核數(shù)據(jù),數(shù)據(jù)存 取效率過(guò)低。
[0019]Ti1e64片內(nèi)高速緩存C址Ce分散到64個(gè)核屯、內(nèi)部,每個(gè)核屯、配備全速的8K 字節(jié)一級(jí)數(shù)據(jù)緩存LlD和8K字節(jié)一級(jí)指令緩存L1P,還有半速的64K字節(jié)二級(jí)緩存L2 化che。LlD和L2Cache只緩存由本核屯、開(kāi)辟空間malloc的片外主內(nèi)存數(shù)據(jù),稱(chēng)為母核 Cache-homing,不緩存其它核屯、開(kāi)辟空間的片外主內(nèi)存數(shù)據(jù)。當(dāng)核屯、A訪(fǎng)問(wèn)非母核數(shù)據(jù)時(shí), 首先由該數(shù)據(jù)的母核B緩存至L2化che,再由核屯、A通過(guò)iM