Měření výkonu gpu podle latencí
Při
testování výkonu grafických karet za účelem jejich následného porovnávání se
donedávna používala prakticky výhradně hodnota průměrné snímkové frekvence
(average frame rate). Na to, že srovnávání grafických karet podle této průměrné
(nebo minimální) snímkové frekvence není tím nejlepším a ani nejspravedlivějším
řešením, poukázal ve svém článku Scott Wasson na www.techreport.com.
Systém (cpu+gpu) totiž renderuje snímky v rozdílných časových intervalech
(latencích), jejichž variabilita může způsobovat nepříjemné poruchy při vnímání
plynulosti pohybu ve hře (frame drop, stuttering, mikro stuttering atd.).
Výsledkem pak je to, že ačkoliv gpu renderuje snímky ve vysokém průměrném frame
rate, plynulost hry odpovídá snímkové frekvenci daleko nižší. Příkladem mohou
být multi-gpu řešení, jejichž průměrná snímková frekvence je sice vysoká, ale
díky mikro-stutteringu je vjem plynulosti pohybu v mnoha případech horší než u
řešení s jedním gpu (které takové frame rate nedosahuje). Pokud bychom naměřené
hodnoty latencí zanesly do grafu, průběhová křivka by vypadala nějak takto:
Obrázek 1.
Scott Wasson se na Techreportu pokusil zavést nové metody do měření výkonu gpu,
ve kterých by vzal v úvahu také variabilitu latencí a stuttering. Jednalo se
zejména o využití 99-té percentile a zkoumání času, který gpu při renderování
snímku tráví nad určitou časovou hranicí (time spent). Ačkoliv se jednalo o
poměrně revoluční skok při posuzování výkonu gpu a jeho měření, tyto přístupy a
metody mají také své slabiny. Pro komparaci různých gpu je nutné použít pouze
veličinu jedinou. Scott jako komparační hodnotu zvolil 99-tý percentile, který v
sobě sice určitou míru variability latencí zahrnuje, nicméně je to do jisté míry
hodnota náhodná a třeba pro určení mikro stutteringu naprosto imunní.
Ačkoliv tyto metody Scotta převzaly také další weby, které se testování gpu
věnují, já osobně jsem k těmto metodám spíše skeptický. Proto jsem se pokusil
vytvořit alternativu, jejímž výsledkem by byla jedna jediná hodnota, obsahující
v sobě jak variabilitu latencí, tak také stuttering a mikro stuttering.
Analýza křivky průběhu latencí
Metoda spočívá v postupné analýze křivky, která nám vzniká ze souboru naměřených
latencí (obr.1). Pokud by se nám povedlo vytvořit pomocnou spojitou křivku,
která by procházela pomyslným středem vynesených hodnot latencí a byla
dostatečně "hladká", mohli bychom si analýzu rozdělit do tří následujících
skupin.
Obrázek 2.
- Hrubý výkon gpu - vzdálenost přímky průměrné latence od osy X (žlutá barva)
- Variabilita scény - odchylka "hladké" křivky latencí od přímky průměrné latence
(červená barva)
- (Mikro)Stuttering - odchylky jednotlivých hodnot latencí od "hladké" křivky
(modrá barva)
Primárním úkolem tedy je vytvořit onu pomocnou hladkou křivku (červená), která
prochází středem vynesených latencí a od které se odvíjí následné analýzy. Pro naši
potřebu je tato středová křivka vytvořena vyhlazením původní neuspořádané křivky
naměřených hodnot latencí pomocí "klouzavého průměru". Technika klouzavého
průměru funguje v podmínkách poměrně velkého počtu vstupních dat velmi
spolehlivě a není náročná na výpočet. Při správném zvolení vstupních parametrů
(šířka a hloubka) si klouzavý průměr poradí i s vyhlazením hodně "exotických"
křivek.
Hrubý výkon
Přímka průměrné latence nám popisuje hrubou sílu gpu v měřeném úseku. Jedná se o
totožnou veličinu, podle které porovnáváme výkon gpu dnes - průměrná latence
(převrácením této hodnoty vznikne ještě běžnější výraz "průměrné fps").
Obrázek 3.
Čím blíže k ose X bude tato přímka umístěna, tím vyšším průměrným výkonem bude
gpu disponovat a samozřejmě naopak. Pro naši celkovou analýzu bude tato hodnota
použita jako základní složka ukazující hrubou sílu gpu. Samozřejmě, jak už bylo
řečeno, hodnota průměrné latence neříká vůbec nic o variabilitě latencí nebo
stutteringu.
Variabilita scény
Pokud testujeme gpu v nějakém úseku hry nebo benchmarku je jisté, že v tomto
úseku není gpu vytěžováno rovnoměrně. V některé části měřeného úseku může být
scéna více komplexní (efekty, hodně objektů a geometrie), kterou gpu musí
renderovat s latencemi vyššími. V dalším úseku pak zase může být scéna naprosto
triviální a gpu ji může renderovat s latencemi nízkými. Samozřejmě velmi záleží
na tom, jak dobře si s těmito zvýšenými nároky scény (efekty) poradí
mikroarchitektura konkrétní gpu. V praxi se pak tato variabilita komplexnosti
scény projevuje nežádoucí variabilitou snímkové frekvence (frame drop/gain).
Obrázek 4.
V každém případě, tato variabilita latencí daná komplexností scény se nám v grafu
projevuje tak, že se křivka latencí obtáčí v různých vzdálenostech kolem svého
těžiště (přímky průměrné latence). V určitých úsecích se křivka dostane nad své
těžiště (scéna je pro gpu komplexní) a v dalších úsecích zase pod své těžiště
(scéna není pro gpu tak náročná). Rozhodujícím faktorem toho, jak dobře gpu
zvládá celý měřený úsek je tedy dán velikostí odchylky křivky od svého těžiště.
Čím víc se křivka vzdaluje svému těžišti, tím je variabilita snímkové frekvence
vyšší a plynulost snímkové frekvence hry v měřeném úseku klesá.
Příklad: Máme dvě gpu, jejichž naměřené průměrné frame rate je stejné 60 fps
(průměrná latence 16,7ms). První gpu má v měřeném úseku variabilitu od 30 do 90
fps a druhé gpu pak od 50 do 70 fps. Pokud bychom si mohli vybrat, favoritem pro
nás by byl gpu č.2, protože renderuje snímky stabilněji a vyšší plynulost hraní
je tak zaručena více, než u gpu č.1.
Pro naší analýzu bude tedy třeba matematicky vyjádřit, jak moc se nám křivka
latencí odchyluje od svého těžiště (přímky průměrné latence). K tomuto účelu nám
poslouží vzorec pro výpočet směrodatné odchylky.
Vypočtená směrodatná odchylka tedy udává průměrnou odchylku hodnot latencí od
jejich aritmetického průměru (průměrné latence). Čím vyšších hodnot odchylka
nabývá, tím větší je variabilita snímkové frekvence v celém úseku měření a
naopak. Pokud by byla tato odchylka nulová, znamenalo by to, že gpu renderuje
snímky s konstantní latencí (frame rate) v celém úseku měření (pro nás ideální
stav).
Standardní odchylka jako veličina má ještě jednu poměrně významnou výhodu a tou
je její jednotka. Jednotka je totiž totožná s jednotkou dat v souboru, ze
kterých je odchylka počítána. V našem případě je tedy jednotkou standardní
odchylky opět ms (milisekundy).
Stuttering
Na rozdíl od křivky variability komplexnosti scény, která vykazuje v čase poměrně
pozvolnou změnu hodnot latencí, je stuttering charakteristický změnou náhlou a
okamžitou. Tento jev způsobuje nepříjemné poruchy vjemu plynulého pohybu ve hře
tím, že je pohyb nerovnoměrný a trhavý.
Obrázek 5.
V našem grafu je stuttering okem patrný (modrá). Jedná se odchylky jednotlivých
naměřených hodnot latencí od námi vytvořené vyhlazené "středové" křivky pomocí
klouzavého průměru (červená).
Výpočet bude opět realizován pomocí směrodatné odchylky. Na rozdíl od výpočtu
odchylky u variability scény, kde byla tato odchylka odvozena od přímky průměrné
latence, zde budeme odchylku odvozovat od vyhlazené křivky variability scény
(červená). Opět zde platí, čím více jsou naměřené hodnoty latencí vzdáleny od
vyhlazené křivky variability scény, tím je směrodatná odchylka vyšší a
stuttering významnější. Samozřejmě také naopak, pokud by byla vypočtená odchylka
nulová znamenalo by to, že gpu renderuje snímky bez jakéhokoliv stutteringu
(ideální stav). Protože počítáme směrodatnou odchylku, její jednotkou jsou opět
ms (milisekundy).
Výsledné skóre
Analýza křivky je prakticky hotova. Z naměřených hodnot jsme vypočítali průměrnou
latenci, pomocí klouzavého průměru vytvořili hladkou křivku variability scény,
vypočetli její směrodatnou odchylku a následně od ní odvodili odchylku
stutteringu. Zbývá tedy jediné - zhodnotit tyto tři vypočtené hodnoty jako
celek. Protože všechny tři vypočtené hodnoty mají totožnou jednotku v ms
(milisekundy), výsledné skóre tedy může být prostým součtem těchto hodnot.
Výsledné skóre [ms] = hrubá síla [ms] + variabilita scény [ms] + stuttering
[ms]
V praxi to znamená následující:
- Výsledné skóre (v milisekundách) nemůže být nikdy nižší, než je hodnota průměrné
latence!
- Výsledné skóre může nabývat pouze stejné nebo vyšší hodnoty než průměrná latence
(stejná hodnota značí ideální stav).
- O kolik bude skóre vyšší než průměrná latence záleží na tom, jaká bude odchylka
variability scény a odchylka stutteringu. Stručněji řečeno, jak kvalitně bude
gpu snímky renderovat (bez propadů a stutteringu).
Protože jednotkou finálního skóre jsou také milisekundy, prostým převrácením této
hodnoty dostaneme snímkovou frekvenci, která může být označena jako "porovnatelné
fps" (což je pro většinu lidí lépe popisnější).
Porovnatelné frame rate [fps] = 1000 / Výsledné skóre [ms]
Porovnatelné fps je tedy definováno jako vypočtená hodnota snímkové frekvence při
které, u daného gpu a v daném úseku měření, nedochází k žádné variabilitě fps
ani stutteringu. Jedná se samozřejmě o teoretickou hodnotu, která slouží
výhradně ke vzájemné komparaci gpu.
Pro lepší pochopení problému jsem vytvořil malou demonstrační aplikaci, ve které
si můžete sami nastavovat vlastnosti křivky (funkce cosinu) a zjišťovat
závislost jednotlivých odchylek na zvolených parametrech křivky.
Aplikaci FLAC Demo můžete stahovat zde
Pokud bych chtěl výsledek analýzy k něčemu přirovnat, tak vhodným kandidátem by
bylo krasobruslení. Krasobruslař jede svou sestavu v určité obtížnosti (průměrná
latence). Díky horšímu technickému provedení (variabilita scény) a chybám v
sestavě (stuttering) mu jsou ze známky za obtížnost strženy "trestné" body. Na
rozdíl od krasobruslení, kde je strhávání bodů vysoce subjektivní záležitostí,
se ale zde jedná o matematiku.
Nezanedbatelnou výhodou vypočteného skóre (nebo porovnatelného fps) je také to, že
může být jednoduše použito ke vzájemnému porovnávání gpu bez ohledu na jejich
zařazení ve výkonnostních třídách (lowend, mainstream, highend).
Nevýhodou toho způsobu porovnávání výkonu gpu je pak jeho poměrně vysoká náročnost
na výpočet. Provádění výpočtu odchylek a generování hladké křivky pomocí
klouzavého průměru při velkém počtu dat je v Excelu docela náročným úkolem.
Z tohoto důvody jsem vytvořil poměrně jednoduchou aplikaci s názvem FLA
Calculator (frame latency analyzer), která všechny tyto výpočty provede za vás,
bez nutnosti tyto výsledky těžkopádně získávat pomocí Excelu.