Windows 10: nová správa paměti pro grafické karty!
8.9.2015, Pavel Šantrůček, recenze
Windows 10 nepřinášejí pro hráče pouze nové DirectX 12, ale také novou verzi WDDM (Windows Display Driver Model). Zatímco na hry využívající DX12 si budeme muset ještě nějakou tu chvilku počkat, z výhod WDDM 2.0 můžeme u současných her těžit už nyní.
Kapitoly článku:
Každý z vás, kdo si již nainstaloval nový operační systém Windows 10 od Microsoftu a spustil si nějakou hru, určitě zaznamenal trochu jiné chování své grafické karty. U grafických karet Nvidia vám monitorovací nástroj (jako je třeba MSI AfterBurner) hlásí, že využíváte více videopaměti, než kolik jí je fyzicky na grafické kartě opravdu k dispozici. Majitelé grafických karet od AMD pak zase paradoxně zjišťují, že jim dříve pod Windows 7 nebo Windows 8 monitorovací nástroje hlásily využití VRAM vyšší. Nezávisle na výrobci grafického čipu pak uživatelé Windows 10 hlásí plynulejší hraní her, zejména pak na grafických kartách s menší velikostí VRAM.
Co je příčinnou takovéhoto nového chování grafických karet pod Windows 10? Je to nový Memory Management a Virtual Memory!
Windows 10, respektive WDDM 2.0 (Windows Display Driver Model) s sebou přináší nový druh správy paměti pro grafické karty. Dřívější model „Physical mode“, který byl součástí předchozích verzí WDDM, byl u WDDM 2.0 doplněn dalším, novým modelem s názvem „Virtual mode“.
Abychom vysvětlili, oč tu vlastně běží, proč vůbec podpora virtuální paměti pro WDDM 2.0 vznikla a jak to vlastně celé funguje, pokusíme se vše demonstrovat na jednoduchém příkladu. Základem našeho příkladu bude technologie nazvaná Tile Resources.
Představte si počítačovou hru, v které pobíháte panáčkem po zeměkouli a střílíte padouchy. Vaším úkolem je vystřílet všechny padouchy v jednotlivých státech světa. Pokud se padouchů zbavíte v jednom státě, přejdete do státu dalšího a pokračujete ve svém běsnění tak, že nakonec na celé zeměkouli nezbude padouch žádný a vy jste vyhráli.
Abyste pro tuto hru vytvořili 3D zeměkouli, musíte vymodelovat kouli (sphere), na kterou následně namapujete obrovskou texturu světa o velikosti třeba až několika GB. Viditelná oblast ve hře však ale bude pouze část této textury – stát, ve kterém aktuálně ty zloduchy střílíte.
Při klasickém renderingu hry by si grafická karta stáhla do své videopaměti (VRAM) texturu světa celou, čímž by si vyčerpala značnou část své kapacity a na další zdroje (resources) by už mnoho místa nezbylo. Takto renderovaná hra by se vám následně trhala, protože by se v jejím průběhu musely potřebné zdroje neustále rozdělovat, přesouvat, znovu natahovat/odstraňovat z/do VRAM. Určitě si myslíte, že by to šlo udělat trochu chytřeji a máte pravdu. Proč pracovat s celou texturou zeměkoule, když viditelná část ve hře je řekněme pouze 1 % její plochy?
Uděláme to tedy chytřeji, do VRAM nebudeme stahovat texturu celou, ale pouze její viditelnou část plus nějaké to další nejbližší okolí. Řekněme třeba, že ty padouchy střílíme zrovna v Česku. Do VRAM GPU bychom tedy chtěli stáhnout pouze tu část textury, na které je umístěno Česko a pro jistotu také okolní státy (Slovensko, Rakousko, Německo a Polsko). Nyní ve VRAM GPU máme pouze zlomek původní obrovské textury a nám tak zbývá i pro ostatní zdroje (třeba další textury) dost místa pro hladký rendering.
Hrajeme tedy hru, zloduši v Česku padají jak mouchy a za malou chvilku je od nich celá naše země osvobozena. Jdeme tedy na pomoc našim přátelům na Slovensko. Texturu (její část) Slovenska už ve VRAM umístěnu máme, takže přechod do jiného státu bude bezproblémový a plynulý. Jakmile překročíme hranici Česka, středem zájmu se stává Slovensko, a proto budeme chtít do VRAM natáhnout zase všechny jeho sousední státy – Rakousko, Česko a Polsko už ve VRAM uhnízděné máme, zbývá tedy dotáhnout pouze mapu Ukrajiny, ale také z ní odstranit zase Německo, které aktuálně potřebovat nebudeme, čímž si zase část paměti uvolníme.
Vidíte, že k naprosto bezproblémovému renderingu hry bychom vlastně nikdy texturu celou (surface) nepotřebovali, ale stačí nám pouze její část, která je nezbytná pro rendering daného snímku s nějakou tou rezervou (working set).
Rendering tak bude nejen bezproblémový a hladký, ale také k němu nebudete potřebovat ani příliš velkou video paměť (VRAM). V průběhu renderingu jsou sice další textury nebo spíše pouze její části ve VRAM nově alokovány, ale také některé další (nebo jejich části) jsou zase z paměti odstraňovány.
Díky lepší plynulosti hry nad všemi padouchy samozřejmě lehce zvítězíme a z našeho hrdiny se tak stává zachránce světa.
Naše imaginární hra „Zabij padoucha“ by se jistě asi žádným velkým trhákem nestala, nicméně jako příklad pro vysvětlení technologie Tile Resources je snad celkem dostačující. Problém je v tom, že pro Tile Resources je potřeba podpora přímo ve hře. Šel by ale nějaký takovýto systém napodobit tak, aby byl univerzální pro všechny hry bez nutnosti explicitní podpory aplikace?
Odpověď zní ANO, vlastně už tu takový jeden systém máme a přináší nám ho právě Windows 10 v podobě nového WDDM 2.0.
Co je příčinnou takovéhoto nového chování grafických karet pod Windows 10? Je to nový Memory Management a Virtual Memory!
Windows 10, respektive WDDM 2.0 (Windows Display Driver Model) s sebou přináší nový druh správy paměti pro grafické karty. Dřívější model „Physical mode“, který byl součástí předchozích verzí WDDM, byl u WDDM 2.0 doplněn dalším, novým modelem s názvem „Virtual mode“.
Abychom vysvětlili, oč tu vlastně běží, proč vůbec podpora virtuální paměti pro WDDM 2.0 vznikla a jak to vlastně celé funguje, pokusíme se vše demonstrovat na jednoduchém příkladu. Základem našeho příkladu bude technologie nazvaná Tile Resources.
Představte si počítačovou hru, v které pobíháte panáčkem po zeměkouli a střílíte padouchy. Vaším úkolem je vystřílet všechny padouchy v jednotlivých státech světa. Pokud se padouchů zbavíte v jednom státě, přejdete do státu dalšího a pokračujete ve svém běsnění tak, že nakonec na celé zeměkouli nezbude padouch žádný a vy jste vyhráli.
Abyste pro tuto hru vytvořili 3D zeměkouli, musíte vymodelovat kouli (sphere), na kterou následně namapujete obrovskou texturu světa o velikosti třeba až několika GB. Viditelná oblast ve hře však ale bude pouze část této textury – stát, ve kterém aktuálně ty zloduchy střílíte.
Při klasickém renderingu hry by si grafická karta stáhla do své videopaměti (VRAM) texturu světa celou, čímž by si vyčerpala značnou část své kapacity a na další zdroje (resources) by už mnoho místa nezbylo. Takto renderovaná hra by se vám následně trhala, protože by se v jejím průběhu musely potřebné zdroje neustále rozdělovat, přesouvat, znovu natahovat/odstraňovat z/do VRAM. Určitě si myslíte, že by to šlo udělat trochu chytřeji a máte pravdu. Proč pracovat s celou texturou zeměkoule, když viditelná část ve hře je řekněme pouze 1 % její plochy?
Uděláme to tedy chytřeji, do VRAM nebudeme stahovat texturu celou, ale pouze její viditelnou část plus nějaké to další nejbližší okolí. Řekněme třeba, že ty padouchy střílíme zrovna v Česku. Do VRAM GPU bychom tedy chtěli stáhnout pouze tu část textury, na které je umístěno Česko a pro jistotu také okolní státy (Slovensko, Rakousko, Německo a Polsko). Nyní ve VRAM GPU máme pouze zlomek původní obrovské textury a nám tak zbývá i pro ostatní zdroje (třeba další textury) dost místa pro hladký rendering.
Hrajeme tedy hru, zloduši v Česku padají jak mouchy a za malou chvilku je od nich celá naše země osvobozena. Jdeme tedy na pomoc našim přátelům na Slovensko. Texturu (její část) Slovenska už ve VRAM umístěnu máme, takže přechod do jiného státu bude bezproblémový a plynulý. Jakmile překročíme hranici Česka, středem zájmu se stává Slovensko, a proto budeme chtít do VRAM natáhnout zase všechny jeho sousední státy – Rakousko, Česko a Polsko už ve VRAM uhnízděné máme, zbývá tedy dotáhnout pouze mapu Ukrajiny, ale také z ní odstranit zase Německo, které aktuálně potřebovat nebudeme, čímž si zase část paměti uvolníme.
Vidíte, že k naprosto bezproblémovému renderingu hry bychom vlastně nikdy texturu celou (surface) nepotřebovali, ale stačí nám pouze její část, která je nezbytná pro rendering daného snímku s nějakou tou rezervou (working set).
Rendering tak bude nejen bezproblémový a hladký, ale také k němu nebudete potřebovat ani příliš velkou video paměť (VRAM). V průběhu renderingu jsou sice další textury nebo spíše pouze její části ve VRAM nově alokovány, ale také některé další (nebo jejich části) jsou zase z paměti odstraňovány.
Díky lepší plynulosti hry nad všemi padouchy samozřejmě lehce zvítězíme a z našeho hrdiny se tak stává zachránce světa.
Naše imaginární hra „Zabij padoucha“ by se jistě asi žádným velkým trhákem nestala, nicméně jako příklad pro vysvětlení technologie Tile Resources je snad celkem dostačující. Problém je v tom, že pro Tile Resources je potřeba podpora přímo ve hře. Šel by ale nějaký takovýto systém napodobit tak, aby byl univerzální pro všechny hry bez nutnosti explicitní podpory aplikace?
Odpověď zní ANO, vlastně už tu takový jeden systém máme a přináší nám ho právě Windows 10 v podobě nového WDDM 2.0.