2024. április 20., szombat

Gyorskeresés

HD filmek, x264, DXVA, HDMI audio

DXVA, a CUDA, VDAPU(Ubuntu) valamint a CPU mint lejátszó fog szóba kerülni, több szerző közös cikke.

[ ÚJ TESZT ]

CUDA - Mi a csuda az a cuda?

Második rész:
Ezt a cikket a cudáról Band1103 írta, köszönöm.

A VPD-k és a driverek fejlődése miatt már nincs feltétlen szükség a CUDA használatára.

A cikk ezen része nem IT szakemberekhez szól csak azoknak akik szeretnének bármilyen HD tartalmat lejátszani de még nem hallottak, vagy nem eleget a CUDA-ról, és tartalmaz pár tesztet is hogy lássuk van-e értelme a Cuda-s HD lejátszás gyorsításának.

Ugye azt már tudjuk hogy ha szeretnénk hogy a videokártyánk dogozzon a CPU helyett ahhoz olyan VGA vagy IGP kell aminek a GPU-ja tartalmaz VPD-t (Video Processing Device) mivel alapesetben ez végzi a HD filmek dekódolását. Az AMD/ATI saját VPD fejlesztését UVD-nek, az nVidia a sajátját pedig VP-nek nevezte el de különböző GPU magok különböző fejeltségű VPD-t tartalmazhatnak amelyeket a gyártók számozással különböztetnek meg. Pl.: UVD1;+;2;2.2 illetve VP1;2;3
Ezek az egységek a GPU magon belül találhatóak de csak egy kis területét alkotják a GPU-nak. Mi lenne ha a GPU minden porcikáját használatba lehetne venni erre a célra (is)?
Itt meg kell jegyeznem hogy sokan úgy mondják hogy "megy a DXVA" vagy "nem DXVA-s a film" pedig ez így pontatlan hisz az AMD VPD-jének DXVA határértékei alacsonyabbak mint az nVidia-nál, tehát az nVidia VPD szélesebb tartományban tud DXVA-t használni (CUDA-tól függetlenül), így több HD videót tud gyorsítani mint az AMD.

Az igazi áttörést a DirectX 10 által megkövetelt egyesített shader architektúra (Unified Shading Architecture) hozta meg, amely leváltotta a külön feladatokra specializálódott pixel és Vertex shader processzorokat. Az NVIDIA G80 és AMD R600 kódnevű lapkák voltak az első grafikus magok, amelyek az említett felépítésnek megfelelően készültek akárcsak a jelenleg forgalomban lévő G92, GT200 és RV770 magok. Bár ezek az "új" magok már megérdemlik azt hogy GPGPU-nak (általános célú [General Purpose] grafikus processzorok [GPU] nevezzük őket.

A két nagy gyártó nem meglepő módon saját utakon kezdett bele a GPGPU-képességek kiaknázásába, ennek hála saját rendszerfejlesztői készletet fejlesztettek a programozók számára. Az ATI Stream-nek az nVidia CUDA-nak nevezte el a saját gyermekét de olybá tűnik, a CUDA nagyobb népszerűségre tett szert már csak azért is mert az nV most gyorsabban lépet mint az ATI.

Tehát a CUDA az nV által kifejlesztet rendszerfejlesztői készlet (továbbiakban SDK) melyet GPGPU-képességek kiaknázására hozott létre.

Hogy is működik ez valójában? Mi kell hozzá? Mit kell tennem ha használni szeretném ezt a CUDA-t a HD tartalmak lejátszására?

Mint említettem nem fogok mélyenszántó leírásba kezdeni mellyel a CUDA minden algoritmusát kivesézném.
Csak röviden:
A filmek lejátszása esetében a CUDA használatára felkészített player vagy codec számára ez az SDK valójában egy "mankó" amely közvetlenül tudja a GPU shader processzorait használni olyan feladatokra is amire eddig nem volt képes. Úgy használja a GPU-t mintha az egy egyszeres pontosságú, 32-bites lebegőpontos számításokra képes CPU lenne.
Tehát az olyan filmek lejátszásánál ahol a lejátszó program a nem tudja DiretcX -et igénybe venni ott a a Cuda-t használja megfelelő GPU és megfelelő driver és megfelelő codec megléte esetén.

Mit is lehet tapasztalni egy régebbi driver esetén ami nem tartalmaz CUDA-t? Ekkor az MPCHC csak azon filmeket tudja rendesen lejátszani amik kódolása megengedi hogy a VPD-t igénybevevő DXVA működni tudjon. Tehát pl.: ha egy 1080p-s mkv filmet úgy készítettek el hogy a film ref frames értéke kevesebb mint 4 akkor az újabb MPCHC állapot sorában megjelenik egy (DXVA) felírat. Amennyiben ez a ref. frames érték pl.:6 vagy több akkor már nem tud működni a DXVA és ezért nem lesz jelzés az állapot sorban.

Amennyiben viszont egy újabb drivert teszünk fel ami már tartalmaz CUDA-t. akkor azt tapasztalhatjuk hogy az eddig pl.:11 ref frames-el rendelkező 1080p-s filmet amit gyenge CPU esetén nem tudtunk megfelelően lejátszani, immáron teljes sebességgel élvezhetjük, - dacára annak hogy a GPU-ba épített videó dekódoló egység nem tud működni - hiszen ekkor a player egy alkalmas codec által a CUDA-t használva már a GPU processzorait használja. Erről a MPCHC tájékoztat is minket úgy hogy ismét megjelenik az állapotsorban a (DXVA) felírat. Tehát Cuda jóvoltából már 98% hogy nem lesz olyan HD videó ami kifogna az nVidia VGA kártyánkon IGP-n.

A mai nap és már egy ideje az nVidia driverei beépítve tartalmazzák a CUDA-t amennyiben az adott VGA kari megfelelő GPU-val van ellátva. Ezek Cuda-s VGA-k.

Tehát a teendők::
1. legyen Cuda alkalmas VGA-d vagy IGP-d
2. Legyen fent a legújabb driver
3. Olyan Codec legyen fent ami tartalmaz CUDA támogatást. Tipp: CoreAVC 1.9.5w az eddigi legjobb bárnem ingyenes.
4. DXVA képes és több CPU magot használni tudó playert használj. Tipp: MPCHC aminek a beálítása csak kicsit tér el a cikkben már leírtaktól.
5. NE installálj semmilyen video codeccsomagot vagy olyan videó codec-et ami nem CUDA-s, sőt ha idővel lesz több CUDA-s codec akkor is csak az egyiket tedd fel mert csak bekavarhatnak.

Beállítások:

A CoreAVC beállító paneljának így kell kinéznie:

Az MPCHC-nél csak annyiban változik a beállítása a playernek hogy a "Belső szűrők" oldalon a "Dekódoló szűrők oszlopában Vegyük Ki a Pipát a H264/AVC(FFmpeg) és a VC1(FFmpeg) szűrők elöl, majd a "Külső szűrők" oldalán a "szűrő hozzáadása..." gombot használva az előugró listából adjuk hozzá a CoreAVC-t. Ez után ügyeljünk arra hogy a "Értékesség beállítása" legyen kijelölve melynek értéke alapesetben:00800200
Ezzel azt értük el hogy a CoreAVC csak akkor fog dolgozni amikor a DXVA a VPD által már nem képes gyorsítani.

Oké rendben! De mi a helyzet az AMD-vel és a HDxxxx kártyáival IGP-ivel? Hogy lehetne ezek GPU-inak processzorait befogni a munkába hogy valóban minden HD filmet a GPU-val számoltassak ne csak az UVD egység által gyorsíthatóakat?
Jelenleg nincs olyan kezdeményezés amivel az AMD Stream SDK-ját lehetne használni HD tartalmak gyorsításához. De elkeseredni nem szabad. Ugyanis a legújabb 11 -es DirectX-nek - ami a win7-el debütál - része lesz a Compute Shader ami valójában egy API-hoz kötött GPGPU-támogatás.
Erről nem sokat tudok de merem remélni hogy azt jelenti hogy megfelelő DX11-es driver esetén akár filmek lejátszásához is lehet használni bármilyen DX11-es VGA-t (HD5xxx). És persze remélem hogy lesz a HD5xxx karikból is belépőszint, mint az előző 4-es szériában a jó kis HD4350-es illetve jó kis 5-ös szériás IGP-k is meg fognak jelenni jó árú lapokban.

Tapasztalatok tesztek:

Szeretem tesztelni a manapság megjelenő MKV HD filmeket. Ekkor már nem csak azokat a filmeket töltöm le amik érdekelnek hanem valóban mindent ami megjelenik. Ekkor olyan tapasztalatokkal leszek gazdagabb amikel nem találkoznék akkor ha csak azokat a filmeket tölteném le amik valóban érdekelnek. Ezek a tapasztalatok pedig mindig ledöbbentenek. Vagyis a jelenleg megjelent filmek VPD ready-k -e vagy sem.

AMD-nél:
Döbbenet hogy 43 db 1080p-s filmből 16 film nem felel meg az UVD követelményeinek mert túl magas ref.frames értékkel lettek elkészítve. A legdurvább film a:

trinity-madagascar.escape.2.africa.720p ami bár csak 720p de nem kevesebb mint 16 ref.frames-t alkalmaztak. Továbbá
Cars.2006.BluRay.1080p.x264.DTS.Hun-iLL-arpi 11-es értékével illetve a
Ice.Age.2.The.Meltdown.1080p.BluRay.Dual.x264-PREtorians a maga 9-es ref frames értékével is durva eltérés a határértékektől.
1080p-n a megengedett érték max. 4 lenne. 720p-n pedig max 11

nVidiánál:
Már sokkal rózsásabb a helyzet. Itt már szinte minden film ment DXVA-val, de csak szinte hiszen:
trinity-madagascar.escape.2.africa.720p ahol nem kevesebb mint 16 ref.frames-t alkalmaztak ugyancsak megakasztotta a VP2-es VPD-t.

De nem csak "régi" filmeket kódoltak el!
Ilyen pl. még a 2008-as You.Dont.Mess.with.the.Zohan
vagy a szintén 2008-as Saw.V is.

Most pedig egy kis teszt alapú összehasonlítás:

A fent említett 43 1080p-s filmek egyikét sem lehet pusztán CPU-val lejátszani az alábbi CPU-val:

AMD x2 4000+ (2100Mhz)
op.rendszer : Windows xp Prof. SP3

Viszont a HD3200-es IGP-vel a VPD ready (tehát ahol az UVD egység képes a gyorsításra) filmeket
2-8% de max 15%-os CPU terheltséggel le lehet játszani úgy hogy közben aktív a C&Q (vagyis az XP csak egy 1000Mhz-es x2-es CPU-t lát).

De a HD3200-as a cikk írásakor még nem tudott olyan filmeket gyorsítani amik nem UVD ready filmek.
Ekkor jön jól hogy beszereltem egy módosított magos így CUDA képes GF8400gs-t.

Ekkor a CUDA-val már a magas ref frames értékű filmeket is le tudom játszani aktív C&Q-val (vagyis az XP továbbra is csak egy 1000Mhz-es x2-es CPU-t lát) Ebben az esetben a működő CUDA-val a CPU terhelség: 10-15% de max 28% nem több.

További tesztek ezzel a 8400GS-el: (a %-ok a CPU terhelést jelzik a fent már említett rendszerben)

1. Film adatai: sample-cars.1080.hun-ill-arpi.mkv
23,976fps - AVC - 10,6 Mbps - 1920*800 - 11 ref.frames

CoreAVC Cuda: 10-28% (C&Q aktív)
CoreAVC(CUDA off):32-59% folyamatos lejátszás (C&Q kikapcsolt)

MPC(DXVA):9-22% (C&Q aktív)
MPC(FFMPEG):58-77%-on ritkán megáll - nem folyamatos (C&Q kikapcsolt)

Film adatai: Planet_Earth_From Pole_to_Pole_1080p_sample_16ref.mkv
23,976fps - AVC - 18,6 Mbps - 1920*1080 - 16 ref.frames

CoreAVC Cuda: 53-95% csak a részletes és mozgalmas képeknél szaggatbe - nem folyamatos
CoreAVC(No CUDA): u.a.

MPC(DXVA): Kép nem jelenik meg
MPC(FFMPEG):Folyamatosan szaggat, lassú, meg-meg áll nézhetetlen

Minden segítőkész fórumtársnak köszönöm a segítséget de
külön köszönet CPT.Pirk-nek, Imavericknek valamint Stevve és Pumba fórumtársaknak :R

A cikk még nem ért véget, kérlek, lapozz!

Hirdetés

Copyright © 2000-2024 PROHARDVER Informatikai Kft.