基于龍芯3B的H.264解碼器的向量化
4 實(shí)驗(yàn)結(jié)果
4.1 ffmpeg各函數(shù)加速比
本文分別對(duì)向量化后的各個(gè)函數(shù)進(jìn)行了測(cè)試,并且與未向量化之前的函數(shù)進(jìn)行了比較,各個(gè)函數(shù)向量化優(yōu)化后的加速比如圖3所示。其中圖中橫坐標(biāo)所示函數(shù)序號(hào)與表2中的各個(gè)函數(shù)一一對(duì)應(yīng)。
圖3中的函數(shù)的加速比所跨越的范圍較大,比如6號(hào)函數(shù)的加速比約有23.9左右,而最后一個(gè)函數(shù)的加速比只有1.2左右。之所以會(huì)出現(xiàn)上述情況,除了與改進(jìn)后的函數(shù)所使用的向量指令的數(shù)量和修改代碼的比重有關(guān)以外,也與運(yùn)算所使用的操作數(shù)的類型有關(guān)。對(duì)于6號(hào)函數(shù),其循環(huán)內(nèi)的運(yùn)算所使用的操作數(shù)的類型為字節(jié)類型,因而僅僅使用向量指令進(jìn)行優(yōu)化,理論加速比就可以達(dá)到32,不過(guò)本文僅僅對(duì)該函數(shù)的內(nèi)層循環(huán)進(jìn)行了向量化,而向量化后的內(nèi)層循環(huán)一次僅僅處理了 16個(gè)字節(jié)類型的數(shù)據(jù),即并未充分使用256位的向量寄存器。因而理論的加速比應(yīng)該為16,但是由于結(jié)合了循環(huán)展開(kāi)和指令調(diào)度等其他優(yōu)化策略,因而實(shí)際的加速比可以達(dá)到23.9左右。同樣,對(duì)4號(hào)、5號(hào)和6號(hào)這三個(gè)同類型的函數(shù)進(jìn)行分析,我們也可以發(fā)現(xiàn):后一個(gè)函數(shù)的加速比均約為前一個(gè)函數(shù)加速比的兩倍。這是因?yàn)閷?duì)于4號(hào)函數(shù),內(nèi)層循環(huán)向量化后一次可以同時(shí)計(jì)算4個(gè)字節(jié)類型的數(shù)據(jù),而5號(hào)函數(shù)可以同時(shí)計(jì)算8個(gè)字節(jié)類型的數(shù)據(jù),因而理論上的加速比也應(yīng)該是兩倍的等比數(shù)列形式,而實(shí)際結(jié)果與理論分析是一致的。
對(duì)于3.3.2小節(jié)中重點(diǎn)介紹的7號(hào)函數(shù)和8號(hào)函數(shù),其原函數(shù)無(wú)法進(jìn)行簡(jiǎn)單向量化,而本文使用了掩碼以及矩陣轉(zhuǎn)置等優(yōu)化方法,使其能夠使用龍芯3B的向量擴(kuò)展指令,因而盡管性能提升不大,但是加速比也分別有3.2和5.5。
4.2 不同平臺(tái)上的向量化比較
本文同樣將ffmpeg解碼器分別在不同的平臺(tái)上進(jìn)行了測(cè)試,使用的兩個(gè)測(cè)試視頻分別為是“問(wèn)道武當(dāng)002.mkv”(視頻A)和“walk_vag_ 640x480_qp26.264”(視頻B)。其中視頻A是問(wèn)道武當(dāng)視頻(720p)中截取的片段,而后者是通過(guò)x264對(duì)walk_vag.yuv(480p)編碼生成的,編碼時(shí)選用的qp值為26。而測(cè)試平臺(tái)則分別選擇了AMD和Intel處理器平臺(tái)。
從表3的測(cè)試結(jié)果可以看出對(duì)于視頻A,在龍芯3B上的性能提升比其他兩個(gè)平臺(tái)上都高很多;而對(duì)于視頻B,在龍芯3B上的性能提升也與其它兩個(gè)平臺(tái)接近。實(shí)驗(yàn)結(jié)果表明:在龍芯3B上實(shí)現(xiàn)ffmpeg解碼器的向量化,對(duì)性能提升有很大幫助,而且解碼某些視頻時(shí),性能的提升甚至高于性能優(yōu)越的商用處理器。而通過(guò)與表1中使用GCC向量化編譯的結(jié)果進(jìn)行比較,也可以看出:手工對(duì)ffmpeg解碼器進(jìn)行向量化比使用GCC進(jìn)行向量化,性能有更大的提升。
5 總結(jié)和展望
本文實(shí)現(xiàn)了ffmpeg解碼器到龍芯3B的移植,并針對(duì)龍芯3B實(shí)現(xiàn)了對(duì)向量擴(kuò)展指令支持的特點(diǎn),對(duì)ffmpeg解碼器進(jìn)行了手工向量化。實(shí)驗(yàn)結(jié)果表明:手工向量化后的ffmpeg解碼器的性能比使用GCC向量化編譯后的ffmpeg解碼器性能要好很多,而且性能的提升也比Intel和 AMD平臺(tái)更多。
本文僅僅從代碼級(jí)實(shí)現(xiàn)了針對(duì)龍芯3B的ffmpeg解碼器的向量化移植,為了進(jìn)一步提高性能,還需要從整個(gè)算法層面上進(jìn)行優(yōu)化。另外,由于龍芯3B的多核特性,還可以考慮使用多核進(jìn)行解碼。
本文引用地址:http://www.ex-cimer.com/article/202493.htm
評(píng)論