
本發(fā)明涉及視頻編解碼技術(shù),具體涉及VP9解碼器流水線改進(jìn)方法。
背景技術(shù):
:隨著網(wǎng)絡(luò)通信技術(shù)的快速發(fā)展,網(wǎng)絡(luò)視頻業(yè)務(wù)的需求日益增長,網(wǎng)絡(luò)視頻數(shù)據(jù)占據(jù)了互聯(lián)網(wǎng)數(shù)據(jù)的絕大部分。2010年,谷歌開始推行WebM工程,致力于開發(fā)下一代開放、免授權(quán)費(fèi)的視頻壓縮標(biāo)準(zhǔn)VP9。2013年2月21日,第一個(gè)支持VP9解碼技術(shù)的谷歌Chroma網(wǎng)頁瀏覽器發(fā)布了。VP9在編碼率上較上一代編解碼標(biāo)準(zhǔn)VP8和H.264提高了30%~50%,同時(shí)也與新一代的標(biāo)準(zhǔn)HEVC不相上下,但是卻是以更大的計(jì)算量為代價(jià)的。因此,優(yōu)化VP9解碼流程成了改善VP9視頻編解碼技術(shù)的一個(gè)重要研究方向。目前,國內(nèi)外有關(guān)于VP9視頻編解碼的研究工作少之又少,本發(fā)明將為VP9解碼器提供一種是是可行的優(yōu)化方案,并且為以后關(guān)于最新一代編碼標(biāo)準(zhǔn)的技術(shù)提供參考。技術(shù)實(shí)現(xiàn)要素:本發(fā)明針對VP9解碼器現(xiàn)有技術(shù),提出一種VP9解碼器并行流水線任務(wù)劃分方法,具體技術(shù)方案如下。一種VP9解碼器并行流水線任務(wù)劃分方法,其包括如下步驟:(1)利用熱點(diǎn)函數(shù)的運(yùn)行時(shí)間來分析VP9解碼器中熵解碼、反量化、反變換、幀內(nèi)預(yù)測、幀間預(yù)測、去塊濾波以及像素自適應(yīng)補(bǔ)償各階段的計(jì)算量,從而明確每個(gè)階段中最耗時(shí)的計(jì)算部分;所述熱點(diǎn)函數(shù)是各階段中占用運(yùn)行時(shí)間最長的一個(gè)或多個(gè)函數(shù),包括復(fù)雜的計(jì)算模塊或者重復(fù)調(diào)用許多次的計(jì)算模塊;進(jìn)而得到VP9解碼器中熵解碼、反量化、反變換、幀內(nèi)預(yù)測、幀間預(yù)測、去塊濾波以及像素自適應(yīng)補(bǔ)償各階段占整個(gè)解碼過程的時(shí)間比例,為后面的流水線劃分提供基礎(chǔ);(2)對VP9解碼器的各個(gè)階段進(jìn)行拆分和分級流水線分配,根據(jù)占整個(gè)解碼過程的運(yùn)行時(shí)間最長的階段所進(jìn)行的運(yùn)動(dòng)補(bǔ)償拆分成并行的三個(gè)子模塊,去塊濾波拆分成兩個(gè)子模塊即垂直方向去塊濾波和水平方向去塊濾波,形成5級流水線結(jié)構(gòu),分別是熵解碼作為第一級,三個(gè)子模塊并行的運(yùn)動(dòng)補(bǔ)償為第二級,幀內(nèi)預(yù)測和反量化以及反變換構(gòu)成第三級,垂直方向去塊濾波為第四級,水平方向去塊濾波為第五級。進(jìn)一步地,步驟(1)所述的利用熱點(diǎn)函數(shù)的運(yùn)行時(shí)間來分析VP9解碼器的各階段計(jì)算量中,通過在程序中埋點(diǎn)來測量熱點(diǎn)函數(shù)運(yùn)行時(shí)間,根據(jù)熱點(diǎn)函數(shù)的時(shí)間來計(jì)算VP9解碼器中各階段的運(yùn)行時(shí)間。進(jìn)一步地,步驟(2)所述對VP9解碼器的各個(gè)階段進(jìn)行拆分和分級流水線分配中,以熵解碼階段的計(jì)算量占整個(gè)解碼過程的比例作為基準(zhǔn),設(shè)計(jì)5級流水線,使每一級流水線運(yùn)行時(shí)間相當(dāng)且均控制在8%到12%之間,流水線無阻塞地運(yùn)行。進(jìn)一步地,步驟(2)所述對VP9解碼器的各個(gè)階段進(jìn)行拆分和分級流水線分配中,將運(yùn)動(dòng)補(bǔ)償拆分成三個(gè)并行的子模塊:水平方向插值1/2像素點(diǎn)計(jì)算模塊、垂直方向插值1/2像素點(diǎn)計(jì)算模塊、1/4像素點(diǎn)計(jì)算模塊,通過這三個(gè)模塊的并行計(jì)算提高解碼效率。進(jìn)一步地,步驟(2)所述對VP9解碼器的各個(gè)階段進(jìn)行拆分和分級流水線分配中,將去塊濾波拆分成垂直去塊濾波和水平去塊濾波兩個(gè)子模塊作為兩個(gè)串行運(yùn)作的流水級,使這兩級的運(yùn)行時(shí)間與前面流水級時(shí)間相當(dāng),從而提高解碼效率使流水線達(dá)到分級效果。與現(xiàn)有技術(shù)相比,本發(fā)明的優(yōu)點(diǎn)與積極效果在于:1、本發(fā)明的方法首先采用熱點(diǎn)函數(shù)的運(yùn)行時(shí)間來分析VP9解碼器的各階段計(jì)算時(shí)間,從而明確每個(gè)階段中最耗時(shí)的計(jì)算部分。由程序局部性原理,10%的代碼占用了系統(tǒng)90%的運(yùn)行時(shí)間。那么發(fā)現(xiàn)和解決這10%代碼中存在的問題,就能對90%的運(yùn)行時(shí)間進(jìn)行優(yōu)化。而且,程序運(yùn)行時(shí)的瓶頸大部分存在于熱點(diǎn)函數(shù)中,所以解決瓶頸問題也需要對熱點(diǎn)函數(shù)加以剖析。熱點(diǎn)函數(shù)分析就是拋開那些次要的冗余代碼,著重分析程序中關(guān)鍵路徑上的代碼,這樣有助于發(fā)現(xiàn)性能問題。2、本發(fā)明的方法對VP9解碼器的各個(gè)階段進(jìn)行拆分和分級流水線分配,根據(jù)占整個(gè)解碼過程的運(yùn)行時(shí)間最長的階段所進(jìn)行的運(yùn)動(dòng)補(bǔ)償拆分成并行的三個(gè)子模塊,去塊濾波拆分成兩個(gè)子模塊,即垂直方向去塊濾波和水平方向去塊濾波,與其余的模塊形成流水線。形成5級流水線結(jié)構(gòu),分別是熵解碼作為第一級,三個(gè)子模塊并行的運(yùn)動(dòng)補(bǔ)償為第二級,幀內(nèi)預(yù)測和反量化以及反變換構(gòu)成第三級,垂直方向去塊濾波為第四級,水平方向去塊濾波為第五級。本發(fā)明的流水線每一級的計(jì)算時(shí)間都彼此相當(dāng),這樣,在同一時(shí)刻,各模塊并行工作,處理任務(wù)在時(shí)間上相互重疊。數(shù)據(jù)流按一定的規(guī)則被分成宏塊,各模塊以宏塊為單位對數(shù)據(jù)進(jìn)行并行處理。附圖說明圖1是VP9解碼器運(yùn)行時(shí)間分布圖。圖2是VP9解碼器流水線設(shè)計(jì)圖。圖3是具體任務(wù)并行劃分方案圖。圖4是流水線工作示意圖。具體實(shí)施方式下面結(jié)合附圖對本發(fā)明的具體實(shí)施方式做進(jìn)一步說明,但本發(fā)明的實(shí)施和保護(hù)范圍不限于此。如圖2所示是本發(fā)明基于VP9解碼器各階段的VP9解碼器流水線設(shè)計(jì)圖。通過在程序中埋點(diǎn)來測量熱點(diǎn)函數(shù)運(yùn)行時(shí)間,根據(jù)熱點(diǎn)函數(shù)的時(shí)間來計(jì)算VP9運(yùn)行分布時(shí)間,由各部分運(yùn)行時(shí)間的分布知道,熵解碼所占的計(jì)算量為8%,這一部分的計(jì)算無法進(jìn)行并行或流水加速,因此在設(shè)計(jì)流水線的時(shí)候每級的計(jì)算量都應(yīng)該在8%左右。另外在運(yùn)動(dòng)補(bǔ)償時(shí),需要用到參考幀中的像素值作為參考,也就是說在幀級別的數(shù)據(jù)流中存在幀間預(yù)測這個(gè)大的數(shù)據(jù)反饋通路,這個(gè)反饋涉及到從運(yùn)動(dòng)補(bǔ)償,重構(gòu)到去塊濾波。因此為了保證數(shù)據(jù)流的單向性,將熵解碼(VLD)設(shè)為第一級,所有后續(xù)模塊為第二級,2級之間以宏塊為單位傳遞數(shù)據(jù)。在前面有關(guān)計(jì)算量的統(tǒng)計(jì)知道,熵解碼僅占整個(gè)計(jì)算量的8%左右,而后續(xù)所有階段(包括幀內(nèi)預(yù)測、反變換反量化、運(yùn)動(dòng)補(bǔ)償和去塊濾波)占74%左右,因此兩個(gè)流水級的計(jì)算量極不平衡,必須將后續(xù)模塊的加速并行。通過對數(shù)據(jù)流的分析,我們知道所有后續(xù)部分間的數(shù)據(jù)流在宏塊級別基本上存在單向的數(shù)據(jù)流,唯一的數(shù)據(jù)反饋出現(xiàn)在幀內(nèi)預(yù)測和重構(gòu)像素,這是由于幀內(nèi)預(yù)測時(shí)需要用到當(dāng)前幀內(nèi)之前已經(jīng)重構(gòu)的像素作為參考,因此為了避免這一反饋對流水線的破壞,我們將幀內(nèi)預(yù)測和重構(gòu)像素放到一個(gè)大的模塊中劃分為一個(gè)流水級,這樣就保證了這個(gè)大的模塊對于其上端模塊和下端模塊都具有單向的數(shù)據(jù)相關(guān)性。至此,后續(xù)部分中共有4個(gè)模塊,分別是運(yùn)動(dòng)補(bǔ)償模塊,反變換反量化模塊,幀內(nèi)預(yù)測與重構(gòu)模塊以及去塊濾波模塊,這4個(gè)模塊可以作為流水線的4個(gè)流水級。但是,從流水線各流水級計(jì)算量的均衡角度來看,這樣劃分流水級并不是合理的。這四個(gè)模塊的計(jì)算量大概分別占41%,8%,8%,23%,為了使計(jì)算量均衡可以將第二、第三個(gè)模塊合并為一個(gè)模塊(幀內(nèi)預(yù)測反變換反量化重構(gòu)模塊),這樣三個(gè)模塊的計(jì)算量分別為:運(yùn)動(dòng)補(bǔ)償模塊41%,幀內(nèi)預(yù)測反變換反量化重構(gòu)模塊16%,去塊濾波23%。另外,考慮到流水線的第一級也就是熵解碼的計(jì)算量為8%,后續(xù)部分中宏塊級別的流水線結(jié)構(gòu)即使性能達(dá)到最好,計(jì)算量也是很不均衡的,因此必須要加速后續(xù)模塊。對于運(yùn)動(dòng)補(bǔ)償模塊,從前面對數(shù)據(jù)流的分析我們知道,雖然分像素插值的三個(gè)部分的數(shù)據(jù)流具有單向性可以實(shí)現(xiàn)宏塊級的三級流水,但是對于每個(gè)像素而言,數(shù)據(jù)流并不是都經(jīng)過這3個(gè)部分,所以這種流水線的設(shè)計(jì)方案是不劃算的。在進(jìn)行像素內(nèi)插計(jì)算時(shí),像素間的計(jì)算沒有相關(guān)性,因此,根據(jù)這種計(jì)算的無相關(guān)性,可以在3個(gè)任務(wù)上并行加速運(yùn)動(dòng)補(bǔ)償模塊,使每個(gè)任務(wù)的計(jì)算量達(dá)到13%左右。對于幀內(nèi)預(yù)測反變換反量化重構(gòu)模塊,由于存在幀內(nèi)預(yù)測和重構(gòu)像素這個(gè)反饋回路,也不能實(shí)現(xiàn)流水線結(jié)構(gòu),只能根據(jù)塊內(nèi)數(shù)據(jù)的無相關(guān)性在2個(gè)核上進(jìn)行并行加速,使1個(gè)任務(wù)的計(jì)算量達(dá)到8%左右,另一個(gè)任務(wù)的計(jì)算量為8%左右。對于去塊濾波,從數(shù)據(jù)流分析中我們知道,在宏塊級別去塊濾波的二維方向上可以實(shí)現(xiàn)二級流水,每級的計(jì)算量為12%左右。因此,在后續(xù)的流水線級別劃分中,我們可以劃分為4個(gè)流水級,第一級為運(yùn)動(dòng)補(bǔ)償模塊,第二級為幀內(nèi)預(yù)測反變換反量化重構(gòu)模塊,第三級為垂直方向去塊濾波模塊,第四級為水平方向去塊濾波模塊,這些流水級之間的數(shù)據(jù)以宏塊為單位傳遞。如圖3所示是本發(fā)明對于流水線中各項(xiàng)任務(wù)的具體分配,第一級的熵解碼使用一個(gè)線程來進(jìn)行完成,第二級的運(yùn)動(dòng)補(bǔ)償劃分為三個(gè)任務(wù)線程,第三級的幀內(nèi)預(yù)測和反量化以及反變換構(gòu)則分配到兩個(gè)線程上執(zhí)行,最后的第四級和第五級流水線則分配到一個(gè)線程上。如圖4所示是基于宏塊的流水線示意圖。在同一時(shí)刻,各模塊并行工作,處理任務(wù)在時(shí)間上相互重疊。數(shù)據(jù)流按一定的規(guī)則被分成數(shù)據(jù)塊,各模塊以數(shù)據(jù)塊為單位對數(shù)據(jù)進(jìn)行并行處理。表1指標(biāo)性能CPUIntel(R)Xeon(R)E5-2660核心數(shù)8主頻2.20GHzL3緩存20MB內(nèi)存24GB操作系統(tǒng)Windows7專業(yè)版編譯器微軟VS2010平臺(tái)v100編譯器表2解碼器的輸入視頻時(shí)間比VP9(foreman_480x272)68.9%VP9(Mobile_848x480)75%VP9(Ducks_1280x720)66.6%如表1所示是用于本發(fā)明用于驗(yàn)證的仿真平臺(tái)環(huán)境。表2所示是解碼效率性能測試結(jié)果。從結(jié)果可知,本方法對三種不同分辨率的視頻序列下(480x272,848x480,1280x720)的解碼時(shí)間均有減少,因此本發(fā)明所提出的VP9解碼器并行流水線任務(wù)劃分方法對解碼效率有較大提升。當(dāng)前第1頁1 2 3