AMD: Primitive Shader v GPU Vega nezvýší výkon automaticky. Jen jako explicitní funkce

28. 1. 2018

Sdílet

 Autor: Redakce

Stále dost diskusí vyvolávají nové funkce v grafické architektuře Vega, respektive otázka, jestli něco dělají, nebo ne. Asi nejdůležitější vlastností Vegy jsou výpočty s poloviční přesností FP16 (pravda, v APU Raven Ridge s nižší propustností RAM by mohlo být významnější dlaždicové vykreslování, „draw stream binning rasterizer“). Ovšem v poslední době se na fórech zdá se nejvíc řešilo ne FP16, ale tzv. Primitive Shader, a zdá se, že se nyní objevily nové informace ke stavu této technologie.

Primitive Shadery jakožto novinka ve výbavě GPU Vega (u Nvidie pokud vím inzerována není) byly vyvinuté za účelem zvýšení geometrického výkonu. Jejich účelem je odstraňování nepotřebných prvků („primitiv“) z celého procesu vykreslování už ve fázi výpočtu geometrie. Typicky jde o objekty, které nejsou ve finální scéně viditelné. Zvláštností zde ale je, že je tato operace prováděna pomocí výpočetních jednotek, programovatelnými shadery.

Proč je Primitive Shader kontroverzní? Jelikož jde o použití shaderových programů, logicky je případné využití této funkce na bedrech vývojářů her, nebo alespoň primárně. V diskusích o této funkci se ovšem také objevily přísliby, že by ovladače pro Vegu mohly Primitive Shadery používat automaticky – tedy že by GPU interně neboli implicitně generovalo Primitive Shadery optimalizující tímto způsobem geometrické výpočty. Pro taková očekávání existují i nějaké oficiální indicie, i když v době, kdy byla architektura Vega odhalována (na jaře 2017 a pak během uvedení GPU) to spíš vypadalo, že tato funkce se uplatní jen tehdy, když ji programátor explicitně vyvolá a nikoliv automaticky. „Implicitní“ využívání by ale bylo vděčnější, protože by teoreticky mohlo zlepšovat výkon všude.

Semináře k ovladačům GPU Vega na CES

Během CES 2018 se zdá se stav „primitivních“ shaderů konečně vyjasnil. Z toho, co AMD uvádělo na semináři před veletrhem, vyplývá, že implicitní použití Primitive Shaderu pro automatické zvýšení výkonu zřejmě nenastane. Ovladače budou tuto funkci používat jen explicitním způsobem, tedy tak, že ji vývojáři her sami ve svém kódu vyvolají. Implicitní způsob použití bez asistence programátora naopak patrně padá.

Slajd AMD k nových technologiím GPU architektury Vega (CES 2018) Slajd AMD k nových technologiím GPU architektury Vega (CES 2018)

Jedním z důvodů, proč byla implicitní podpora opuštěna, by mohlo být riziko chyb. Protože stávající hry nebyly proti hypotetickým implicitně běžícím geometrickým shaderům nikdy testovány, mohlo by u řady her nastávat nepředvídané chování, vyvolávající chyby v obraze. AMD ale naznačilo ještě druhý důvod. API pro explicitní Primitive Shadery údajně nelze implementovat jen tak, čistě jako vnitřní záležitost ovladačů. Tyto funkce totiž bude nutné nějak začlenit do grafických API, a pravděpodobně jen do těch nových, DirectX 12 a Vulkan. Je možné, že tato bariéra komplikuje i implicitní použití Primitive Shaderů.

bitcoin_skoleni

Primitive shader mění fungování geometrické pipeline, zda se uchytí, těžko říct Primitive Shader: popis technologie ze slajdů zveřejněných v létě 2017

GPU Culling je analogie Primitive Shaderu

Ovšem je také třeba podotknout, že ani explicitní Primitive Shader zatím není dostupný, právě kvůli tomu, že bude muset čekat na podporu ve Vulkanu/DX12. Ovladače pro něj také ještě nemají API, pomocí kterého by ho vývojáři mohli vyvolávat. Tato funkce se tedy zatím v ovladačích neprojevuje a logicky optimalizace na tuto programovatelnou geometrii neexistují ani ve hrách. Je ale zajímavé, že podobný efekt, tedy eliminaci geometrických prvků pomocí shaderů, lze částečně implementovat i mimo rámec programovatelného geometrického enginu Vegy. Ve hře Wolfenstein II: The New Colossus je analogie Primitive Shaderu implementována pomocí Compute Shaderů (což jsou shadery zavedené v DirectX 11 pro obecné výpočty). Tato možnost se v nastavení hry označuje „GPU Culling“.

wolfenstein-ii-the-new-colossus-bundleOvšem podobné obecné řešení asi nebude tak efektivní. Jak u této techniky, tak u reálného Primitive Shaderu je však také otázka, jak často budou hry tato vylepšení využívat. Jelikož jde o práci navíc, nebude asi každý vývojář ochoten Primitive Shader využívat. Pokud ovšem povede k větším nárůstům výkonu, mohla by tato funkce být atraktivní, a to, že bude nějak začleněna do celého standardního API Vulkan nebo DirectX, by mohlo v popularitě pomoci.