VP3 挑戰HD解碼王 (上)

Posted on October 14, 2008 
Filed Under 顯示卡Video Card, 顯示週邊Video

NVIDIA G98核心補完高畫質影片加速能力

G98是NVIDIA早在去年就推出的新核心,不過它一直隱身於GeForce 8400 GS當中,NVIDIA沒有說明這個做法的原因,但筆者猜測應該是GeForce 9系列還沒正式推出入門級產品,G98只好暫且隱藏於GeForce 8400 GS當中。但有趣的是核心裡頭還置入了NVIDIA下一代的VP3引擎,可說是補完VP2在VC-1解碼能力的缺陷。因此我們收集了內建VP1、VP2與 VP3引擎的產品,來與ATI的UVD與UVD2比個高低,看看誰才是高畫質影片解碼的硬體霸王。

G86核心的縮小版

拿到內藏G98核心的GeForce 8400 GS之後,一時之間也看不出與採用G86核心的GeForce 8400 GS有什麼差異,雖然PCB板上有些元件不同,但是還得實際拆下風扇觀察晶片,再用GPU-Z來檢查規格。

在架構方面,G98仍然與G86一樣都只有16個stream processor、四組ROP,製程方面G98是65nm,但日後正式推出時應該會是55nm,而G86核心則是較舊的80nm。雖然G98與G86的 架構差異不大,不過時脈卻有相當大的不同,G98顯示晶片時脈為576MHz、shader則是1.4GHz;G86晶片時脈是450MHz、 shader為900MHz。

由於NVIDIA尚未正式發表G98核心,再加上本篇的目地是測試高畫質影片解碼,因此在3D效能部分我們就不多著墨了。

VP1到VP3的演變

在NVIDIA陣營方面,所謂VP指的是Video Processor,它最早出現於NVIDIA的GeForce 7系列的顯示晶片當中,不過當初播放H.264格式時,只能協助播放四大步驟的其中三個步驟,剩下的還是得交由處理器運算,而這時候的VP也就是第一代的 產物。使用VP1的顯示卡,目前還潛伏於GeForce 8系列當中,像是GeForce 8800 Ultra、GTX等採用G80核心的顯示卡,所以買這些高階顯示卡的用戶,在播放高畫質影片時,若是處理器不夠強就會看到相當明顯的延遲畫面。

不過NVIDIA修正了其餘的GeForce 8系列,從GeForce 8600、8500系列開始,多加入一顆BSP(Bistream Processor)晶片,最大作用就是處理H.264格式的CABAC(Context Adaptive Variable Length Coding)與CAVLC(Context Adaptive Binary Arithmetic Coding)解碼,也就是播放H.264與VC-1影片的第一步──Bitstream Processor/Entropy Decode,而這也是VP1所不支援的功能。直到第二代的VP2與BSP晶片配合之後,就可以「完整」解碼H.264、MPEG-2格式影像,所以到了 這個階段NVIDIA的硬體解碼流程才比較完整。

不過對於VC-1影片解碼部分,bitstream processor/entropy decode還是依靠處理器進行,雖然NVIDIA不斷宣稱VP2與BSP配合之後,VC-1少了這個步驟不會讓處理器佔用率增加太多,但實際測試VC- 1格式影片,GeForce 8、9系列的VP2搭配BSP一直是輸給ATI一大截。

全新一代的G98核心號稱已經完全具備先前缺少的VC-1影片bitstream processor/entropy decode解碼能力,因此可以稱為VP3。由於G98是NVIDIA完全沒有發布的產品,我們手邊也沒有任何資料可以看出它的架構,只能夠透過實際測試 來考驗NVIDIA尚未推出的VP3能力。

NVIDIA VP2的VC-1解碼技術

VP2引擎的VC-1解碼流程中,在bistream processor/entropy decode的重要步驟是留給處理器自行處理,VP3這次會擔負起這個重要工作。

ATI一次做到位

ATI方面,從Radeon X 1000系列邁向Radeon HD 2000之後,除了顯示卡系列名稱多了「HD」的字眼,由Radeon HD 2600、2400系列開始,在顯示晶片裡頭直接塞了一顆Xilleon晶片,它的作用就是替H.264、VC-1格式影片進行bitstream processor/entropy decode解碼,而其它解碼步驟就交給顯示晶片裡的UVD,也就是Universal Video Decoder。所以,從Radeon HD 2000系列開始,ATI陣營一直在播放H.264、VC-1格式影像有極為搶眼的表現。

雖然在Radeon HD 2000系列推出之時,其3D效能並不突出,但是播放高畫質影片卻有極小的處理器佔用率,播放VC-1格式影片,更可以看到ATI與NVIDIA陣營顯示 卡會有極大差距,ATI只有極低的處理器使用率,NVIDIA則佔用頗多的處理器資源。所以HTPC玩家幾乎人人都推薦ATI顯示卡來播放高畫質影片,不 過現在有了NVIDIA的VP3來挑戰,ATI是否還能立於不敗,就要好好看下去了。

高畫質影片解碼流程說明

開始測試之前,先來瞭解一下高畫質影片解碼的流程。舉例來說,H.264與VC-1的四大解碼過程分別是:

1.Bitstream processor/entropy decode(串流資料處理/熵解碼)
2.Inverse transform or frequency transform(反轉換)
3.Motion compensation or pixel prediction(動作補償)
4.Deblocking(去分塊)

原本這四大步驟是交由處理器運算,卻會耗費許多處理器資源,尤其第一步bitstream processor/entropy decode(串流資料處理/熵解碼),更是十分吃重,因此ATI納入Xilleon晶片、NVIDIA加入了BSP晶片便可以大大減輕負擔。而其它步驟 則是靠ATI的UVD與NVIDIA的VP引擎執行。

1.串流資料處理/熵解碼

ATI、NVIDIA解碼晶片等級
ATI
UVD2 Radeon HD 4800
UVD Radeon HD 3800
Radeon HD 3600
Radeon HD 3400
Radeon HD 2600
Radeon HD 2400
UVA Radeon HD 2900
NVIDIA
VP3 GeForce 8400 GS(G98)
VP2+BSP GeForce GTX 200
GeForce 9800
GeForce 9600
GeForce 9500
GeForce 8800
GeForce 8600
GeForce 8500
GeForce 8400
GeForce 8300
VP1 GeForce 8800 Ultra、GTX

這裡的步驟就是「壓縮演算法」。例如每篇電腦王文章當中「GeForce」字串出現的機率是不一樣的,若將這些字串以相 同的長度來編碼,就會造成「使用太多位元」的情況,有些資料用的太少,例如,一篇文章只出現一次「筆者好帥」的字串,這又會形成空間的浪費,所以需要「對 不同的字串使用不同長度編碼」的壓縮演算法。

看完上面的火星文,簡單的說,壓縮演算法就是讓「經常出現的字串變短!」例如GeForce字串通通變成「G」,若是一篇文章裡有100 個GeForce字串,那麼就會形成100個「G」字串,少了六個英文字母。我們還可以再聰明點變成「(100,G)」,也就是只要記錄 「(100,G)」就代表GeForce字串出現一百次,這樣就變成更短的字串資料,而所謂壓縮的精神就是「變化長度」。

前面提到CABAL、CAVLC等等,指的就是高畫質影片壓縮演算法的種類,例如H.264與MPEG-2格式影像,在同樣畫質下 H.264勢必會有更低的檔案容量,而同樣的壓縮比例下,H.264將提供更好的影像品質,H.264或VC-1可以提高壓縮能力,就是因為使用比以往更 複雜的編碼架構,所以播放時就需要特別多的硬體解碼資源。

2.反轉換

在這個部分,NVIDIA稱之為inverse transform、ATI則是稱作frequency transform。不管怎麼稱呼,這裡的流程就是「離散餘弦變換」,英文簡稱DCT 、全名則是Discrete Cosine Transform。由於牽涉一些數學公式,筆者這個數學白痴就不多談,想深入瞭解的讀者可以直接拜一拜Google大神。

簡單的說,就是將影片上的「色彩」資訊轉為「頻率」資訊,例如一張焰陽高照的畫面上,強烈的「太陽光線」就會轉成為「高頻」,而其它顏色較 不強烈的則會轉成「低頻」。所以當你在看一台汽車的畫面,透過DCT轉成後高頻的部分就形成車體「邊框」,而其餘低頻部分則是呈現車體顏色,如果低頻愈 「平緩」地由高至低,畫面上就會看到「層次」更豐富的車體。

很多網路上下載的影片效果很差,其中一個很大的原因就是DCT處理時把低頻的部分砍掉,因此畫面上都「只見形體、不見細節」了,這也是一種影片壓縮的方式。

3.動作補償

這個流程NVIDIA與ATI也有不同的說法,NVIDIA稱作motion compensation,而ATI則是稱為pixel prediction,比較多人採用NVIDIA的用詞。

動作補償也是一種影片壓縮的手法,例如拍攝一段影片,把攝影鏡頭對準一顆大樹,而在攝影當中樹上的樹枝有些會隨風搖晃、有些不會,若是拍攝時間只有一秒,在這一秒之內有24張圖片,接下來的壓縮方法就很簡單了。

首先只要取一張圖片作為基準點,而接下來的圖片和它「對照」,例如畫面上沒動的樹枝,第二張圖片就不「不儲存」,但是會動的樹枝就儲存下來,以便呈現樹枝搖晃的狀態。

不過這種比對畫面的做法,並不是一張一張全區域比較的,而是把畫面分成區塊,像是H.264從16×16、8×8、4×4 mode都有(8×16、4×8的mode也有),這樣可以讓H.264更準確呈現區塊中的移動與變化。例如分成區塊後的圖片(第三張,A區),會去比較 前後張的圖片(第二、四張,A區)。這種「記錄變動」也是一種很好的影片壓縮方法。當然,愈新的VC-1、H.264等格式就能比較愈多的前後畫面以及張 數。

4.去分塊

上一步的動作補償,畫面已經被畫分成許多區塊,這裡就是要回復畫面,以免播放時變成「棋盤式」的畫面,也就是所謂「去分塊」。這個步驟與其它部份相比,已經是非常輕鬆的流程,完全交給顯示晶片去做都沒問題。

PChomeAdvance電腦王

VP3 挑戰HD解碼王 (上)

Comments

Leave a Reply