hevc CTB并行
H265/HEVC中采用了波前并行處理(WPP)算法來進(jìn)行CTB級(jí)的并行,對(duì)于CABAC熵編碼,當(dāng)entropy_coding_sync_enabled_flag為1時(shí),CABAC上下文模型會(huì)在每一行的結(jié)尾處進(jìn)行更新,這使得熵編碼和熵解碼的CTB級(jí)并行成為可能,當(dāng)進(jìn)行波前并行處理時(shí),多行CTB被分別送到不同的運(yùn)算單元中進(jìn)行處理,但是由于相鄰CTB之間的依賴性,這些運(yùn)算單元不能同時(shí)開始運(yùn)行,除了解碼第一行CTB的線程外,每一個(gè)線程都要比上一個(gè)線程落后兩個(gè)CTB進(jìn)行解碼,這也就意味著所有的運(yùn)算單元不可能同時(shí)結(jié)束,這會(huì)造成并行效率的降低,尤其時(shí)當(dāng)運(yùn)算單元數(shù)較多的時(shí)候更為明顯。
盡管在線程數(shù)量較多的時(shí)候,CTB級(jí)別的并行的效率有所降低,但是CTB級(jí)并行處理相對(duì)于其它并行方式還是有很多的優(yōu)點(diǎn),首先CTB級(jí)并行有較好的擴(kuò)展性,隨著圖像分辨率的增加,CTB級(jí)并行的線程數(shù)也可以很方便的增加,其次,相對(duì)于其它層級(jí)的并行方式,CTB級(jí)并行的線程數(shù)也可以更好的實(shí)現(xiàn)負(fù)載均衡,由于分配給各個(gè)運(yùn)算單元的數(shù)據(jù)信息量是較少的,因此各運(yùn)算單元的運(yùn)算時(shí)間不會(huì)有太大的差異,因此很容易實(shí)現(xiàn)負(fù)載均衡。
然而CTB級(jí)的并行也存在一些缺點(diǎn),首先是熵解碼的上下文模型更新的問題,在進(jìn)行熵解碼之前,CTB單元是無法區(qū)分的,因此必須先進(jìn)行熵解碼,再進(jìn)行之后的圖像處理,但是CABAC熵解碼的概率模型需要參考從上一個(gè)更新點(diǎn)以后所有的碼流信息,而我們無法保證在每一行CTB的開頭都有一個(gè)更新點(diǎn),這樣波前并行處理算法就無法在CABAC熵解碼部分實(shí)現(xiàn),我們只能分別進(jìn)行熵解碼和并行處理,根據(jù)CABAC上下文模型的更新位置,我們可以確定CTB級(jí)并行的起始位置。如果CABAC上下文模型在Slice開頭處更新,那么我們就可以將該Slice送入并行過程,該Slice的不同CTB行被交給不同的運(yùn)算單元,利用波前并行處理算法進(jìn)行解碼,直到該Slice的解碼結(jié)束。
其次是CTB級(jí)并行無法保證輸出碼率的穩(wěn)定性,根據(jù)波前并行處理算法,在并行處理開始時(shí),滿足依賴關(guān)系可以進(jìn)行解碼的CTB數(shù)目是較少的,碼率較低。隨著解碼的進(jìn)行,越來越多的運(yùn)算單元啟動(dòng),碼率開始增大,直到達(dá)到最大值,在解碼 達(dá)到尾聲時(shí),解碼運(yùn)算單元又會(huì)逐個(gè)終止,這樣碼率優(yōu)惠逐漸減小到0,這樣以來,CTB級(jí)并行處理就無法達(dá)到恒定的碼率,而且還會(huì)造成并行效率的下降。
針對(duì)上述問題,人們提出了一種叫做重疊波前并行的方法,來減少并行過程中由于線程增加和減少所帶來的并行效率下降。在最初的波前并行算法當(dāng)中,如果一個(gè)運(yùn)算單元處理完一行CTB之后,在當(dāng)前圖像中在整幅圖像解碼完成之前,該運(yùn)算單元會(huì)一直處于等待狀態(tài),之后,對(duì)于下一幅圖像,波前并行算法會(huì)重新開始,而在重疊波前并行算法中,在圖像的運(yùn)動(dòng)矢量足夠小的情況下,一個(gè)運(yùn)算單元處理完一行CTB之后,如果當(dāng)前圖像中沒有剩余的CTB行可以交給它進(jìn)行處理,該運(yùn)算單元可以直接開始對(duì)下一幅圖像的處理而不用等待整幅圖像解碼的完成。
共有6個(gè)運(yùn)算單元來對(duì)當(dāng)前圖像進(jìn)行波前處理,當(dāng)線程T4完成對(duì)分配給它的CTB行的解碼后,會(huì)發(fā)現(xiàn)當(dāng)前圖像中已經(jīng)沒有滿足條件的提前運(yùn)動(dòng)矢量要足夠小,對(duì)于前一幅圖像,前4行CTB時(shí)解碼完成了的,因此它們可以作為后幅圖像的參考,后幅圖像的最大運(yùn)動(dòng)矢量不能超出這4行CTB的范圍,否則可能會(huì)導(dǎo)致后幅圖像解碼時(shí)缺少參考信息。重疊波前并行處理不能完全使得并行解碼時(shí)的線程數(shù)恒定,但是它可以較為有效的解決由于線程數(shù)增加和減少所帶來的并行效果下降的問題。
T5 | |||||||
T6 | |||||||
T2 | |||||||
從數(shù)據(jù)結(jié)構(gòu)上來看,CTB級(jí)并行和Tile級(jí)的并行可以是同時(shí)實(shí)現(xiàn)的,可以將一幅圖像劃分為4個(gè)Tile,每個(gè)Tile交給一組運(yùn)算單元來處理,而每組運(yùn)算單元按照CTB級(jí)并行的方式可以并行處理3行CTB,這在理論上來說是比單純進(jìn)行CTB級(jí)并行或者Tile級(jí)并行效率更高。但是同時(shí)實(shí)現(xiàn)將會(huì)造成線程數(shù)大幅增加,復(fù)雜度和碼率都會(huì)急劇上升。過多的運(yùn)算單元之間進(jìn)行通信將會(huì)占用較多的資源,而且,就每個(gè)運(yùn)算單元來看,其所分到的數(shù)據(jù)信息量將會(huì)很少,負(fù)載均衡難以實(shí)現(xiàn),利用率降低,因此H265/HEVC中沒有提出CTB級(jí)和Tile級(jí)同時(shí)并行的方案。
總結(jié)
以上是生活随笔為你收集整理的hevc CTB并行的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器人仿真控制(以ABB为例)
- 下一篇: 如何利用matlab做BP神经网络分析(