Nástroje pro snížení latencí
V minulé kapitole jsme si ukázali několik scénářů závislosti rychlosti CPU a GPU, se kterýma se můžeme setkat při hraní počítačových her. S ohledem na vysoké latence je pak pro nás klíčovým scénářem GPU bound, tedy scénář, ve kterém procesor připravuje snímky mnohem rychleji, nežli nám je grafická karta stačí renderovat a při kterém nám tak v grafické pipeline vstupuje do hry také ten největší viník vysokých latencí - Render queue. V této kapitole se tak budeme bavit o věcech, které se týkají výhradně právě tohoto scénáře a nástrojích, které se snaží Render queue z grafické pipeline eliminovat.
Framerate limiter
Jedním z nejdostupnějších nástrojů na eliminaci Render queue je framerate limiter. Ale pozor, musí se jednat framerate limiter, který je implementován přímo ve hře a který omezuje snímkovou frekvenci na straně enginu hry (tedy CPU)!!! Pokud byste využili externí framerate limiter (například ten v MSI Afterburner), snížení latencí se nedočkáte, ten totiž „brzdí“ jen grafickou kartu a tak díky vyšším frametimes na GPU vám latence naopak naroste.
CPU |
Frame 2 |
idle |
Frame 3 |
idle |
Frame 4 |
idle |
|
Render queue |
|
|
|
GPU |
Frame 1 |
Frame 2 |
Frame 3 |
Frame 4 |
Při nastavování framerate limiteru je však velmi důležité, abyste zvolili tu správnou hodnotu, na kterou vám pak engine hry uzamkne snímkovou frekvenci. Obecně se dá říci, že snímková frekvence pro uzamčení by se měla rovnat (nebo být o chlup nižší) snímkové frekvenci generované grafickou kartou (frametime). Pokud se vám podaří snímkovnou frekvenci framerate limiterem uzamknout na správné hodnotě, místo toho, aby procesor připravoval nové snímky do Render queue, bude čekat (idle) a Render queue se tak vůbec nevyužije. Vy se tak dočkáte nižší latence.
Nevýhodou in-game framerate limiteru je pak omezená snímková frekvence v celé hře. Jak jistě víte, snímková frekvence se ve hrách pohybuje dynamicky podle toho, jak náročná je scéna na rendering. V některých scénách se může pohybovat kolem 100 fps a v jiných zas třeba jen 80 fps. Pokud si tedy pomocí framerate limiteru nastavíte snímkovou frekvenci na 80 fps, vyšších FPS se pak ve hře již nedočkáte a přes to nepojede vlak.
Pokud by se ve hře jednalo o nějaké markantní rozdíly ve snímkové frekvenci, nejenže přijdete o FPS, ale může se stát také to, že i latence ve scénách s nejvyšší snímkovou frekvencí budou s framerate limiterem dokonce vyšší, nežli byste ho neměli zapnutý vůbec. V počítačových hrách s velkými rozdíly snímkové frekvence tak framerate limiter pro potlačení Render queue a snížení latencí raději vůbec nepoužívejte!
AMD Radeon Anti-lag a NVIDIA Ultra Low Latency (NULL)
Jak společnost AMD, tak také NVIDIA mají přímo ve svých ovladačích implantovanou funkci, která se snaží eliminovat využití Render queue na minimum. Zatímco Radeon Anti-lag by měl teoreticky fungovat s valnou většinou her, řešení společnosti NVIDIA je vázáno pouze na tituly pod grafickým rozhraní DirextX 11. Pro hry s DirectX 12 má NVIDIA přichystánu jinou technologii s názvem NVIDIA Reflex, o které si ale podrobně povíme až za chvilku.
Výhodou obou těchto technologií je jejich snadné a jednoduché zapnutí přímo v ovladačích, nevýhoda je pak celkem nabíledni. Protože jsou technologie Radeon Anti-lag i NULL implementovány „pouze“ v ovladačích grafické karty a nemají tak přístup k samotnému engine hry (a tedy i k práci CPU), jejich účinnost tedy bude zřejmě docela omezená.
NVIDIA Reflex
Není to zas až tak dávno, co společnost NVIDA představila svého asi největšího bojovníka proti vysokým latencím s názvem Reflex. Na rozdíl od NULL se však Reflex musí implementovat přímo do enginu hry, což sice není tak jednoduché a vyžaduje to spolupráci s vývojáři her, na druhou stranu mu to však poskytuje také mnohem větší možnosti při eliminaci Render queue, protože tak může účině řídit také práci CPU (simulaci). Pokud bych měl Reflex v krátkosti nějak osvětlit, pak se jedná o jakýsi inteligentní in-game framerate limiter, který pracuje na stejném principu (omezuje snímkovou frekvenci v enginu hry), avšak s tím rozdílem, že je dynamický a neomezuje tak snímkovou frekvenci na jedinou předem danou pevnou hodnotu. Reflex sleduje časy potřebné na přípravy snímků i časy na jejich rendering a podle toho také rozhoduje, ve který okamžik je nejlépe zahájit práci na simulaci následujího snímku procesorem tak, aby nebyla zbytečně naplňována Render queue.
CPU |
idle |
Frame 2 |
idle |
Frame 3 |
idle |
Frame 4 |
idle |
Frame 5 |
Render queue |
|
GPU |
Frame 1 |
Frame 2 |
Frame 3 |
Frame 4 |
Na rozdíl od klasického in-game framerate limiteru, si můžete povšimnout, že v případě Reflex je práce CPU na simulaci cíleně odložena tak, aby ihned po jeho ukončení co možná nejplynuleji navazoval samotný rendering, což vede k nejnižší možné latenci. Stav nečinnosti (idle) CPU tak předchází práci na simulaci a simulace tedy pracuje také s nejaktuálnější stavem vstupních periferií (myš, klávesnice atd.). Opět tedy další úspora latence.
Nevýhoda NVIDIA Reflex je pak zřejmá, nutnost implementace přímo do enginu hry a tak tuto technologii docela jistě neuvidíme v úplně každé počítačové hře.
AMD Radeon Boost
AMD Radeon Boost je takový technologický samorost, který se vymyká všemu, co jsme si tu doposud říkali. Technologie Radeon Boost totiž primárně necílí na vyprázdnění Render queue, či optimalizaci práce CPU a GPU, místo toho se jen snaží snížit latenci renderingu v době, kdy je nízká latence ve hře vyžadována.
Radeon Boost sleduje vstupní zařízení (myš, klávesnice, gamepad…) a při jeho větší aktivitě dá pokyn grafické kartě, aby snímky začala renderovat vyšší rychlosti (s kratší frametime), avšak na úkor nižší kvality obrazu. V herních titulech založených na předchůdcích DirectX 12 je tak snímek renderován v nižším rozlišení dané parametrem Minimální rozlišení, u počítačových her podporujících DirectX 12 v kombinaci s grafickými kartami generace RDNA 2 je pak k renderingu snímku využita technologie VRS (Variable Rate Shading). „Ošizeného“ obrazu by si pak hráč v bitevní vřavě všimnout neměl. Výsledkem tedy je vyšší snímková frekvence na straně GPU (kratší frametime) a tím i nižší latence. S nižší latencí na straně GPU je pak grafická pipeline tlačena blíže ke scénáři CPU bound a tedy více či méně eliminována také i Render queue.
AMD Radeon Boost je sice stejně jako Radeon Anti-lag implementován přímo v ovladačích grafických karet, avšak na rozdíl od něj není automaticky funkční ve všech hrách. Radeon Boost musí daná hra podporovat ve svém engine, což je také jeho hlavní nevýhodou.
Pokud bych měl nějak hodnotit všechny výše uvedené nástroje, pak nejvíce se mi zamlouval NVIDIA Reflex, kterým je inteligentně řízena práce enginu hry i grafické karty. Doufám tedy, že NVIDIA Reflex uvidíme v co možná nejvíce hrách.
Zajímavě vypadá také nová verze technologie Radeon Boost, která využívá nových možností VRS (Variable Rate Shading) na grafických kartách RDNA2. Uvidíme tedy, jestli a jak se Boost v počítačových hrách rozšíří a pak si to ještě pořádně otestujeme.