Odhalení: Eyefinity má problémy s Vsync (test)

18. 1. 2012

Sdílet

 Autor: Redakce

Při měření Crysis 2 se dvěma HD 7970 v CrossFire do připravovaného testu Eyefinity jsem zjistil, že plynulost vykreslování zdaleka neodpovídala průměrné snímkové frekvenci. I když se průměr podle hodnoty udávané FRAPSem pohyboval kolem 35 FPS, subjektivní dojem z plynulosti hry tomu ani zdaleka neodpovídal. Asi tušíte, že jsem začal okamžitě podezřívat microstuttering. Obecně známá (a dost zavádějící) poučka říká, že „microstuttering zmizí, pokud zapnete vertikální synchronizaci“. Proto jsem se pokusil vertikální synchronizaci zapnout, a nestačil jsem se divit.

Starým bardům se předem omlouvám, ale hlavně kvůli mladším ročníkům v krátkosti a jednoduše přiblížím, co je vsync, v-sync, neboli vertikální synchronizace. Soudě dle diskuzí kolem tohoto tématu, na které jsem narazil, to už dnes spousta lidí neví.

V časech monitorů CRT sloužila vertikální synchronizace k tomu, aby grafika počkala s vykreslováním dalšího snímku na vhodný okamžik. Ten nastal, když paprsek, který po jednotlivých „bodech“ postupně vykresloval obraz, dokončil aktuální snímek a přesunul se zase na začátek obrazu. Až v tom okamžiku začala grafika do monitoru posílat další snímek a paprsek začínal malovat nový obraz.

Bez vertikální synchronizace podsouvala grafická karta monitoru nový obraz ihned, jakmile dokončila jeho rendering. Výsledek? Další pěkný efekt zvaný nehezky nečesky „tearing“, který by se dal do češtiny v daném kontextu převyprávět jako „odtržení“.

Paprsek, který byl někde uprostřed vykreslování staršího snímku, začal najednou vykreslovat snímek nový. Pokud se u nového snímku scéna nějak změnila, výsledkem bylo to, že byl na části obrazu starý a na části nový snímek. Spodní část potom vypadala odtržená od horní a postupně vykreslovaný obraz na sebe nenavazoval.

foto-0007

 

Vsync a měření výkonu nejde dohromady

Při zapnuté vertikální synchronizaci se karta s monitorem domlouvá nejen na tom, kdy se bude vykreslovat, ale i na tom, aby grafika nerenderovala zbytečně snímky, které by monitor stejně nemohl vykreslit. Výsledkem je nižší zatížení karty a nížší spotřeba. Protože by ale s takovou byl výkon ve hrách omezený jen tím, co monitor dokáže vykreslovat (v případě běžných LCD je to 60 Hz), při srovnávání výkonu grafických karet by to bylo maximálně 60 FPS. Aby tento limit nezkresloval výsledky a nebránil grafikám v rozletu, pro měření výkonu grafických karet se vertikální synchronizace vypíná. S vypnutím vertikální synchronizace se automaticky objevuje tearing.

Nejspíš kvůli tomu, že je tearing bez vertikální synchronizace běžnou záležitostí, mu při testování výkonu nikdo nevěnuje pozornost. Jinak si nedokážu vysvětlit, že se v recenzích s Eyefinity neobjevuje zmínka o jedné z klíčových nevýhod Eyefinity, která mě dost vykolejila.

Tearing i s vertikální synchronizací? Jak to?

Protože jsem při testování Crysis 2 kvůli horší plynulosti hry vytušil, že dochází k microstutteringu, vyzkoušel jsem zapnout vertikální synchronizaci. Výsledek? Nepozorovatelný. Ale hlavně, k mému velkému údivu a přes veškerou snahu o vynucení vsync (ať už ze samotné hry nebo přes ovladače) docházelo i přes aktivaci vsync k tearingu.

Nejprve jsem za strůjce potíží považoval aktivní adaptér z DisplayPortu na DVI. Po zapojení třetího monitoru přímo na DisplayPort ale problém přetrvával.

S trochou hledání jsem zjistil, že majitelé Eyefinity s Radeony HD 5000 i HD 6000 zpozorovali problémy s vertikální synchronizací už dávno. Jenže v podobě trochu jiné, než jsem myslel. Po chvíli experimentování se mi povedlo ověřit a zdokumentovat, že vertikální synchronizace pohromadě s Eyefinity skutečně nefunguje, jak by měla. Pokud k Radeonům připojíte na standardní výstupy trojici monitorů do skupiny pro Eyefinity a použijete přitom kombinaci konektorů DVI a DisplayPort, nefunguje vertikální synchronizace buď na panelech s DVI nebo u připojení přes DisplayPort. Vsync funguje pouze na výstupech, přes které se před vytvořením skupiny Eyefinity zobrazovala primární plocha.

Zpátky ke Crysis 2. Věděl jsem, že tearing můžu čekat minimálně na jednom monitoru. Bohužel se i po zapnutí vertikální synchronizace objevoval i na dvou či dokonce na všech třech monitorech. A k něčemu podobnému dochází i v dalších hrách. Přes veškerou snahu se mi nepovedlo vertikální synchronizaci vynutit, přestože jsem zkoušel rozličné kombinace – lhostejno, zda jsem zkoušel vynucení přes ovládací panel Catalyst Control Center, nebo přímo ve hře, nebo kombinaci obojího – v Crysis, Mafii II, Metru, Call of Duty: Black Ops a dalších hrách se mi nepovedlo vertikální synchronizaci zprovoznit vůbec. Tearing byl pozorovatelný na všech monitorech a ani limit snímkové frekvence, která by se měla zarazit na 60 FPS, nefungoval. V tomto případě ale netuším, jsou-li na vině ovladače, které jsou zatím ve velmi rané fázi, nebo samotný režim Eyefinity a problémy se synchronizací monitorů zapojených přes jiné konektory, Radeon HD 7970 nebo hry samotné.

Kvalita fotografií je horší kvůli výraznému šumu. Protože bylo zapotřebí fotit s krátkými časy, jsou focené při vysokém ISO. Ke zdokumentování uvedeného jevu ale myslím stačí bohatě. Neděste se ani mírného posunutí monitorů na výšku, pravý má o palec větší úhlopříčku a o dva centimetry vyšší nohu. Rozlišení je ale u všech panelů stejné a na funkci Eyefinity to nemá vliv.

foto-0005
originál

foto-0006
originál

 

Z her, které jsem vyzkoušel, se při zapnuté vertikální synchronizaci korektně choval pouze Dirt 3. Při vertikální synchronizaci aktivované ve hře jsem si na dvou „primárních“ monitorech tearingu nevšiml, na třetím panelu zapojeném přes DisplayPort se dle očekávání objevoval, a konečně snímková frekvence odpovídala 60 FPS.

foto-0003
originál

foto-0004
originál

Co to vše znamená? Pokud tearing nesnášíte a chcete na některém z drtivé většiny modelů Radeon s referenčními výstupy připojit tři monitory, nemáte dnes prakticky jinou možnost, než kombinovat DisplayPort a DVI. Problém je v tom, že na kartě jsou jen dva výstupy DisplayPort a kombinace DVI/HDMI, na které připojíte také nejvýše dva monitory. Můžete tedy zapojit dva monitory přes DVI/HDMI a třetí na DisplayPort, nebo dva na DisplayPort a třetí na DVI/HDMI.

AMD HD 7970 reference design-0013
originál

Pokud je takto připojíte, minimálně na jednom nebo na dvou ze tří monitorů nebude fungovat vertikální synchronizace, a to dokonce ani v obyčejném desktopu s režimem Aero.

Na fotografii je prostřední (DVI) a pravý monitor (DP) a přetahování okna. V prvním případě byl před vytvořením skupiny pro Eyefinity jako primární prostřední monitor, ve druhém monitor připojený přes DisplayPort.

foto-0001
foto-0002
originál | originál

A nějak takto to vypadá zachyceno na videu v akci:

 

Nový rozměr pak tento jev dostává při zapojení tří monitorů v režimu portrét (tedy na výšku), kdy se obraz kvůli otočení monitorů nerozjíždí ve vodorovném, ale ve svislém směru – pokud část obrazu na některém z monitorů ustřelí, přestanou na sebe panely navazovat a celý obraz se v daný okamžik rozsype.

Při této příležitosti někdo v diskuzích zmiňoval, že právě problémy se synchronizací monitorů připojených najednou přes různá rozhraní je důvodem, proč AMD alespoň pro profi sféru vypustilo synchronizační modul S400 (viz tisková zpráva). Do jaké míry je to pravda vám ale nepovím, s S400 se dají vyvádět podstatně větší „zvrhlosti“, než je synchronizace tří monitorů zapojených k jedné grafické kartě a její existence nemusí znamenat, že vsync na třech monitorech nefunguje ani na profi grafikách.

Jak na Eyefinity a Vsync na všech monitorech?

Protože lze na Radeony na klasické výstupy připojit nejvýše dva monitory přes DVI nebo HDMI, je jedinou možností, jak dosáhnout toho, aby vertikální synchronizace fungovala na více než dvou monitorech, zapojit všechny přes DisplayPort. A protože má většina Radeonů maximálně dva DisplayPorty, máte při požadavku na vsync funkční na všech monitorech v současnosti jen následující možnosti:

Možná by vás ještě napadlo, že pořídíte dvě karty do CrossFire a jeden monitor připojíte na druhou kartu. Bohužel, u CrossFire jsou aktivní pouze výstupy na primární kartě.

A jak z toho jednoduše ven? HD 6990 nebo GeForce ve SLI!

Jak to majitelé tří monitorů řeší v případě, že tearing nesnesou a požadují výkon vyšší než nabízí jednoprocesorové karty? Pořízením Radeonu HD 6990, nebo paradoxně tím, že se zbaví Radeonu i s tolik propagovaným Eyefinity a místo něj pořídí dvě GeForce do SLI. V případě konkurenční Nvidia Surround se všechny monitory připojí na konektory DVI nebo HDMI a k problémům s vertikální synchronizací nedochází.

A pokud nechcete kupovat dvě karty nebo drahý (a v současnosti už určitě nerentabilní) Radeon HD 6990? Nezbude vám, než monitor, na kterém k tearingu dochází, dát na stranu, kde tearing tolik nevadí a spokojit se se synchronizací na prostředním a jednom z bočních monitorů.

Další možností je provozovat režim rozšířené plochy (extended desktop), při kterém k tearingu nedochází. Jenže při této konfiguraci už se tři monitory ve hře netváří jako jednolitá plocha s rozlišením (v případě 3× full HD) 5760 × 1080 bodů.

Pokud myslíte, že problém obejdete tak, že na DisplayPort zapojíte aktivní adaptér a tím dostanete připojení tří monitorů přes DVI, vězte, že ani tím si nepomůžete. A podle zmínek v diskuzích si nepomůžete ani se speciálními edicemi karet s více výstupy DVI/HDMI (např. Radeony z edice Flex od Sapphire). I v jejich případě by mělo jít jen o obdobu aktivních adaptérů z DisplayPortu, která je osazená přímo na kartě. Ostatně něco podobného můžu zanedlouho ověřit v praxi, na otestování u mě čeká hned dvojice karet od Sapphire z edice Flex.

bitcoin_skoleni

Nevím, do jaké míry jde o hardwarový problém, který se nedá obejít jinak než změnou koncepce samotného Eyefinity. AMD musí vědět o tom, že tyto potíže, které by už dnes nikdo nepředpokládal, existují po několik generací a půlgenerací karet podporujících Eyefinity. Řada lidí, která na tearing narazila, se pozastavuje nad tím, proč AMD u poslední generace karet z řady HD 7970 tento problém nevyřešilo alespoň tím, že by nahradilo konektor HDMI třetím DisplayPortem, ze kterého by v případě potřeby druhý DVI nebo HDMI vytáhl jednoduše pomocí adaptéru. Díky tomu by bylo možné připojit všechny tři panely přes DisplayPort a problém se synchronizací výstupů by odpadl.

Pořád se mi nechce věřit, že by jedna ze základních funkcí, jakou je při komunikaci mezi monitorem a grafickou kartou vertikální synchronizace, nefungovala u Eyefinity korektně, a nikdo se tím nezabýval a málokdo si toho všiml. Žádné rozhřešení jsem ale neobjevil. Je možné, aby k tomuto jevu docházelo jen u někoho a za nějakých specifických podmínek? Zkoušeli jste Eyefinity? Všimli jste si tearingu? Nebo snad dokonce máte recept na to, jak se s tím vypořádat? Podělte se v diskuzi.