Není to zase tak dlouho, co jsem v souvislosti s testem dvou HD 7970 v CrossFire zase vytáhl na světlo problém microsttuteringu, tedy drobného zadrhávání obrazu při hraní.
Celý problém jsem se pokoušel podrobněji vysvětlit v předchozím článku, pokud si dokonale nevybavujete, o čem je řeč, proč a jak k němu dochází a proč jsou kvůli tomu výsledky srovnání jednoprocesorových a víceprocesorových karet a řešení nekorektní, určitě si jej projděte:
Ve stručnosti jen připomenu, že potíž je s tím, že se při microstutteringu v krátkém sledu za sebou střídají pomalu a rychle renderované snímky, či chcete-li jinak, každý druhý snímek zůstává na obrazovce déle než ten předchozí.
Člověk to pak vnímá podobně, jako by byla snímková frekvence podstatně nižší, než ve skutečnosti je. A tak zatímco vám z testu vypadne průměrná frekvence 35 fps, při hraní máte dojem, jako by to bylo jen 25.
Microstuttering je asi nejotravnější a nejzákeřnější věc, se kterou se u grafických karet setkáme. Běžně používané metodiky pro srovnání karet využívají pro hodnocení průměrné skóre, ve kterém se vliv microstutteringu neprojeví – průměr se počítá z pomalých i rychlých snímků.
Víceprocesorová řešení z nedokonalosti metodik pro testování bohužel hodně těží, v průměru dosahují fantastických výsledků a téměř dvojnásobných výkonů oproti svým jednoprocesorovým obdobám, jen málokdo ale zároveň upozorní na nedokonalost používané metodiky a na to, že průměrné skóre není všechno.
Na způsobu testování se jen stěží v dohledné době něco změní, oproti běžně používaným průměrům je práce s řádově přesnějšími daty s rozlišením na jediný snímek podstatně náročnější nejen na čas, ale i na zpracování.
A zase Vsync
Vertikální synchronizace je jednou z možností, jak (v ideálním případě) microstuttering zlikvidovat, nebo alespoň potlačit. Vyžaduje to ale, aby karta zvládala vykreslovat snímky rychleji než monitor a tak mohl snímek čekat nachystaný na další překreslení.
Další věc je, že nejde dohromady s měřením výkonu – jakmile jej zapnete, bude karta dosahovat maximálně zobrazovací frekvence mointoru.
Testům s vertikální synchronizací na Radeonech jsem věnoval poslední stránku.
GeForce GTX 690 a Frame rate metering: konec microstutteringu?
S příchodem GeForce GTX 690 Nvidia představila i novou technologii frame rate metering, která by měla microstuttering coby největšího zabijáka výkonných víceprocesorových grafických řešení, zneškodnit. Abych pravdu řekl, ze všech novinek, technologií a pozlátek, se kterými se Nvidia chlubila, mě u GTX 690 tahle mimochodem zmíněná „drobnost“ zaujala nejvíc.
GeForce GTX 690 má mít „měřící mechanismus“, který reguluje plynulost toku jednotlivých snímků. Monitorováním a vyhlazováním nerovnoměrností by prý měl být výstup na monitoru hladší, framerate stabilnější a konzistentnější.
Podrobnosti Nvidia zatím nezveřejnila, a na technologii samotné se stále intenzivně pracuje a zatím se mi k ní nepovedlo sehnat ani podrobnější dokumentaci.
Do srovnání grafických karet v Maxe Payne 3 jsem už GTX 690 přihodit nestihl, stejně tak bych neměl nic do srovnání. A konečně, v rámci srovnání karet bychom stejně nemohli jít tak do hloubky.
Co ve grafech najdete?
Pro grafy jsem použil logy z měření pomocí FRAPSu. Hodnoty průměrných fps s rozlišením na sekundy jsou z logů s průběhem průměrných snímkových frekvencí (názvy končí na fps.csv).
Hodnoty pro jednotlivé snímky pak z podstatně podrobnějšího souboru s časy vyrenderování jednotlivých snímků (názvy končící na frametimes.csv). Jde o tytéž hodnoty, které obvykle najdete v těch pár testech zabývajících se microstutteringem.
V nich bývají jsou podobné grafy:
Na ose X bývá číslo snímku, na ose Y doba, jak dlouho trvalo jeho vyrenderování.
Já jsem tyto hodnoty vzal jen jako výchozí surovinu a převrátil je tak, aby získaly podobu, na kterou jsme z grafů s průběhy snímkových frekvencí zvyklí. V grafech v tomto článku tedy hodnota na ose Y v daném bodě odpovídá snímkové frekvenci ve fps (snímcích za sekundu).
Grafy vypadají zdánlivě jako klasické spojnicové, ve skutečnosti jde ale o to, čemu se v Excelu říká „bodový XY se spojnicemi“. Každý bod má souřadnice X a Y a jimi určenu polohu na vodorovné i svislé ose. Na detailním zvětšení je u modré datové řady vidět, že ve vodorovném směru nejsou vzdálenosti mezi body stejné, ale posouvají se o vzdálenost odpovídající trvání vykreslení snímku v milisekundách.
Na ose Y je potom hodnota aktuální snímkové frekvence ve fps, které to odpovídá. Zjednodušeně řečeno, pokud vykreslení snímku trvá 16 ms, odpovídá to snímkové frekvenci 1000/16=62,5 fps.
Zdůrazňuji to proto, aby bylo jasné, že modrá křivka není jen nějaké podobnější dělení třeba po deseti milisekundách, ale jsou na ní zanesené všechny vyrenderované snímky tak jak šly za sebou a FRAPS jejich časy zaznamenal.
V grafech jsou většinou tři datové řady – modrá, což je snímková frekvence ve fps (snímcích za sekundu) na každý vyrenderovaný snímek, dále červená, což je zprůměrovaná hodnota modré křivky, která je uváděná v logu z FRAPSu s průměrnými fps po sekundách (průběhy snímkové frekvence tak jak je znáte z testů nejčastěji) a konečně zelená křivka, která odpovídá průměrným snímkovým frekvencím u jednoprocesorové obdoby testovaného řešení (byť ne zcela přesně odpovídající).
Měření probíhalo za stejných podmínek jako při srovnání grafických karet v Max Payne 3. Není přílš dlouhé, trvalo jen kolem 38 s. O moc víc už ve hře nerušeně stejně neujdete.
I přesto může být kvůli relativně vysokým snímkovým frekvencím i pro takto krátký úsek výsledkem až pět tisíc hodnot na jedno měření.
V první sadě grafů jsou u každé scény a nastavení vždy tři grafy. V prvním jsou výsledky GeForce GTX 690 (pro jednotlivé snímky a průměr, ve druhém pak pro kontrolu pouze jeden Radeon HD 7970 (protože snímky vykresluje jen jedno jádro, křivka by měla kopírovat průměr) a ve třetím je pak CrossFire ze dvou Radeonů HD 7970.
Výsledky testů – Chapter V, checkpoint 2
" width="620" height="349" frameborder="0">
V první skupině je první testovaná lokace v rozlišení 1920 × 1080 bodů. U GeForce GTX 690 se drží snímkové frekvence v nevelké vzdálenosti od průměru, jen výjimečně se objeví špička. Minima jsou poměrně dost vysoko nad průměrem jedné GTX 680. U GTX 690 to tedy zafungovalo.
Opravdu divný je výsledek ve druhém grafu (a opakované měření dopadlo obdobně). Přestože jde o jedinou HD 7970,v úvodu i závěru se snímková frekvence rozsypala, rozptyl hodnot byl dokonce větší než u dvou karet v CrossFire. Vysvětlení pro to nemám.
A konečně ve třetím grafu je dvojice HD 7970 v CrossFire, a tam už je microstuttering vidět v plné parádě. V některých úsecích se s každým druhým snímkem výkon dokonce propadá pod úroveň jedné karty.
Detailnější čtysekundový úsek od 5. do 9. sekundy.
Obdobné je to v rozlišení 2560 × 1600 bodů, jen hodnoty jsou nižší.
Surround a Eyefinity
Nepříjemně mě ale překvapila trojice monitorů v režimu Surround. I u GTX 690 už je snímková frekvence hodně nepravidelná a k zadrhávání dochází, evidentně jde o obvyklý problém se synchronizací obou čipů.
A je to o to smutnější, že právě trojice monitorů je pro karty s výkonem GTX 690 nebo dvou HD 7970 v CrossFire v současnosti ideální.
Nedokážu říci, jestli jde o hardwarový problém, nebo jen o nedořešené ovladače a Nvidia časem problémy odstraní i u třímonitorového řešení. Podle ní se totiž na vývoji frame rate meteringu stále intenzivně pracuje.
Výsledky testů, chapter VII, checkpoint 2
" width="620" height="349" frameborder="0">
U druhé scény už nebyl u žádné z testovaných konfigurací problém tak výrazný. Otázka je, co by se dělo, kdyby mohl být měřený úsek delší. Skoro se zdá, že něco podobného funguje i u Radeonů. Když se podíváme na charakter modré datové řady, zjistíme, že zatímco u GTX 590 jsou hodnoty rozsypány sice trochu chaoticky, ale jinak v opět celkem pravidelných vzdálenostech a povětšinou opět výrazně nad zelenou čarou odpovídající jedné GTX 680.
U jednoho Radeonu už žádné šílenosti nejsou. U dvou Radeonů se kupodivu také příliš nevzdalujeme od průměru, ale opět se střídají silnější a slabší úseky a v těch slabších je pomalejší snímek zase jen kousek nad výkonem jedné karty.
Ve vyšším rozlišení 2560 × 1600 bodů je u CrossFire ze dvou HD 7970 ještě podstatně větší, v prvním úseku se už dost často u pomalejších snímků pohybujeme jen kousek nad zelenou křivkou a občas prakticky na ní, což znamená, že každý druhý snímek sype CrossFire ze dvou karet rychlostí srovnatelnou s jednou kartou.
V Eyefinity či Surroundu už obě karty v první části „lížou“ zelenou křivku, GeForce se v druhé polovině v náročnější pasáži zklidní (otázka je, do jaké míry je to jen shoda okolností) , Radeon ale stále osciluje poblíž zelené křivky. A kontrolní měření s jednou HD 7970 uprostřed má průběh naprosto vzorný.
Co mě opravdu mile překvapilo pak byly výsledky ve 3D Vision. Tam je střídání jader takřka ideální, nepoznáte rozdíl od jednoprocesorové karty.
Výsledky testů - vertikální synchronizace vypnutá, zapnutá při 60 Hz a při 120 Hz
Osvědvčeným postupem, jak snímkovou frekvenci srovnat, je zapnutí vertikální synchronizace. A protože tu mám 120Hz montior, vyzkoušel jsem kromě obvyklých 60 rovnou i 120 Hz.
GeForce GTX 690 už byla při tomto nastavení relativně bezproblémová, v grafech je teda tentokrát pouze dvojice Radeonů HD 7970 v CrossFire a dvě měření, první červenou a druhé modrou barvou. V prvním grafu je frekvence 120 Hz se zapnutou vertikální synchronizací. Ve druhém je standardních 60 Hz se zapnutou vertikální synchronizací a konečně ve třetím je s vsync off.
Jak je z grafů vidět, na první scéně to zafungovalo při 60 Hz naprosto skvěle, a něco se dělo i na 120 Hz (v grafech jsou zřetelné jisté odstupňované úrovně, na kterých se snímkové frekvence drží). Jenže při 120 Hz dochází k propadům na hodnoty podstatně nižší oproti průměru stejně jako bez Vsync.
Teoreticky by přitom minima měla být lepší, protože se monitor překresluje dvakrát rychleji a karta by nemusela čekat. Napadá mě snad jediné rozumné vysvětlení – prostě že vertikální synchronizace na 120 Hz nefungovala.
Závěrem
Na základně jedné hry zatím asi nemůžeme vyvozovat nějaké obecně platné a velké závěry.
Minimálně na jednom monitoru a v Max Payne ale frame rate metering evidentně funguje, průběhy snímkových frekvencí jsou podstatně vyrovnanější, a i když občas obraz stále trochu zadrhává, ve srovnání s běžným multi-GPU je to alespoň na průbězích snímkových frekvencí nebe a dudy.
Tam, kde by to bylo potřeba nejvíc, tedy na rozlišení 5760 × 1080 bodů na třech LCD, ale stabilizátor snímkové frekvence alespoň zatím nezabral. Uvidíme, co na to po konzultaci ještě řekne Nvidia a jestli se v dohledné době o samotné technologii dozvíme něco víc a jestli se nedočkáme dalších změn s novějšími ovladači.
Jinak jsou dosahované snímkové frekvence v případě Max Payne už dost vysoké na to, abych dokázal říct, že jsem pozoroval nějaké výrazné zlepšení plynulosti. GTX 690 a microstutteringu se určitě budeme ještě věnovat. Na důkladné prověření to bude chtít vyzkoušet ještě pár delších her, měření a zpracování výsledků ale bohužel není záležitost na jedno odpoledne.