新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 巧用多內(nèi)核處理器的并行編程功能實(shí)現(xiàn)視頻代碼轉(zhuǎn)換

巧用多內(nèi)核處理器的并行編程功能實(shí)現(xiàn)視頻代碼轉(zhuǎn)換

作者: 時(shí)間:2014-03-12 來源:網(wǎng)絡(luò) 收藏


運(yùn)動估計(jì)

運(yùn)動估計(jì)是很有價(jià)值的。一般需要發(fā)現(xiàn)將像素從輸入圖像中的一個(gè)位置挎貝到融合后的圖像上的這種融合,以便融合后的圖像與該幀實(shí)際圖像間的差異盡可能小。首先,像素塊之間的相似性指標(biāo)需要被定義,通常是SSD(差值平方和)或SSA(絕對差值和)。然后使用這種相似性指標(biāo)測試各個(gè)候選源塊的位置,以確定良好的匹配。

有兩點(diǎn)需要注意。第一,如果有較強(qiáng)的運(yùn)算能力,那么可以測試較多的候選位置,從而可能找到更好的匹配,并提高壓縮率??梢杂眠\(yùn)算能力的增強(qiáng)來降低帶寬要求,反之亦然。其次,相似性指標(biāo)是非線性的。這意味著使用多分辨率等技巧來加快相似性匹配速度是不合適的。低分辨率時(shí)的最佳匹配不一定是高分辨率時(shí)的最佳匹配。

這里有兩個(gè)基本點(diǎn):數(shù)據(jù)位置和并行體系。首先,GPU是具有很高性能的處理器,但目前位于PCI Express卡上,這些卡有自己的存儲器。因此為了壓縮視頻流,數(shù)據(jù)需要傳送到視頻卡上的存儲器中,然后將壓縮結(jié)果傳回來。這一過程需要以流的形式完成,而這種流式處理與運(yùn)算隨時(shí)交疊,因此數(shù)據(jù)傳送不會成為瓶頸。平臺正常情況下可自動管理數(shù)據(jù),而且(能在內(nèi)部硬件API支持的地方)提供深層分析功能來管理這種重疊式流處理。GPU存儲器架構(gòu)的其它意義還在于互相依賴的一系列步驟應(yīng)盡可能保持在相同的存儲器空間中。


最大程度的加速

通常在考慮一個(gè)應(yīng)用是否能被加速時(shí),人們首先會分析應(yīng)用程序的各個(gè)單元,判斷每個(gè)單元上需花多長時(shí)間,并利用阿姆達(dá)爾定律估計(jì)可能的加速程度。

舉例來說,考慮到某個(gè)應(yīng)用程序在單元A上要花10%的時(shí)間,在單元B上要花75%的時(shí)間,單元C上花5%的時(shí)間,單元D上花10%的時(shí)間。該應(yīng)用程序的流程是A運(yùn)行一次,然后B和C輪流多次反復(fù)運(yùn)行(取決于彼此關(guān)系),最后才是運(yùn)行D。

同時(shí)假設(shè)單元A估計(jì)能加速1.5倍,B能加速20倍,C能加速2倍,D不能做任何加速。

這樣理論上的最大時(shí)間縮短值是:

0.1/1.5+0.75/20+0.05/2+0.1/1=0.23

相當(dāng)于加速1/0.23(正好超過4)倍。值得注意的是,雖然單元B(75%的運(yùn)行時(shí)間)的加速系數(shù)達(dá)到了很大的20,但只有使所有加速步驟對總運(yùn)行時(shí)間的影響比較接近的情況下才能取得最好的效果。

事實(shí)上,如果只是以B為目標(biāo),并設(shè)法使之無限加速,但總的性能仍將受限于其余單元。

使用GPU

進(jìn)一步考慮使用GPU。大家可以看到B和C是反復(fù)進(jìn)行的。如果只是在GPU上加速B,而讓C留在主機(jī)上,那么需要不斷地從主機(jī)那兒來回傳送數(shù)據(jù),從而嚴(yán)重影響性能。因此,即使單元C的加速幅度很小,但根據(jù)阿姆達(dá)爾定律,它對總的加速效果影響也很小。事實(shí)上,我們可能也想把C移動到GPU上以避免這些傳送。

這正是視頻編碼所面臨的境況。即使運(yùn)動估計(jì)是視頻壓縮中最昂貴的成分,我們也不能忽略其它因素,尤其是單幀壓縮和解壓縮,因?yàn)檫\(yùn)動估計(jì)的其它階段還需要這些結(jié)果。在考慮這些因素后,階段優(yōu)化工作量就需要正比于它對總體性能的影響程度。

平臺

平臺能夠用來快速實(shí)現(xiàn)和測試算法,并將算法應(yīng)用于GPU或?qū)嶋H上多內(nèi)核的CPU。如果有大量依附于數(shù)據(jù)的算法單元,Rapid實(shí)現(xiàn)就相當(dāng)重要,因?yàn)樗袉卧仨氁苿拥郊铀倨鞯拇鎯臻g,以避免出現(xiàn)上述數(shù)據(jù)搬移問題。然而,根據(jù)它們的總體影響,優(yōu)化所有這些單元可能不具成本效益,或沒有太大作用。優(yōu)化工作容易使代碼復(fù)雜化,并且更難維護(hù)。

RapidMind通過公共特性集向所有支持的硬件目標(biāo)提供可移植性。僅使用這組公共特性也可能獲得優(yōu)異的性能。然而,RapidMind還提供了深層機(jī)制來訪問特殊硬件特性,這種深層機(jī)制對優(yōu)化可能有用,但也會影響可移植性。因此推薦的做法是軟件項(xiàng)目首先只用公共特性實(shí)現(xiàn)所有必要的單元,然后(在實(shí)現(xiàn)完整功能后)對單元進(jìn)行剖析以確定瓶頸及最有可能的改進(jìn)之處,最后調(diào)整特殊單元,可能的話調(diào)整應(yīng)保持在內(nèi)核可移植功能集中。如果有必要進(jìn)行特殊硬件的深層分析,使用RapidMind的提取功能可以隔離它的影響,原始的內(nèi)核特性參考實(shí)現(xiàn)也可以用于實(shí)現(xiàn)可移植性。

上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉