
Existuje široká škála způsobů, jak optimalizovat svůj grafický kód Metal, abyste dosáhli špičkového výkonu. Zde je návod, jak začít s lepším tvarem kódu pro rámec Metal.
Architektura GPU Apple
GPU Apple jsou Odložené vykreslovací moduly založené na dlaždicích – což znamená, že používají dva hlavní průchody: dlaždice a vykreslování. Celkový postup vykreslování je uveden níže.
Tyto dvě fáze si můžete představit jako jednu, když se vypočítává a vytváří geometrie, a druhou, když se zpracovává veškeré vykreslování pixelů.
Ve většině moderního softwaru Apple GPU je geometrie vypočítána a rozdělena na sítě a polygony, poté vykreslena na obraz založený na pixelech, jeden obraz na snímek.
Moderní GPU Apple mají v každém jádru specifické podsekce, které se zabývají shadery, texturami, pixelovým backendem a vyhrazenou pamětí dlaždic. Každé jádro používá tyto čtyři oblasti během vykreslování.
Během vykreslování každého snímku se používá více průchodů běžících na více jádrech GPU, přičemž každé jádro zpracovává více úloh. Obecně platí, že čím více jader, tím lepší výkon.
Čítače GPU
Chcete-li měřit tento výkon, Čítače GPU Jsou používány.
Čítače GPU sledují zatížení každého GPU a měří, zda má nebo nemá dostatek práce. Nacházejí také úzká místa výkonu.
A konečně, čítače GPU optimalizují příkazy, které trvají nejdéle, aby se urychlil výkon.
Existuje více než sto padesát typů počítadel výkonu GPU Apple a jejich pokrytí je nad rámec tohoto článku.
Existuje problém, jak dát smysl všem datům čítače výkonu. K tomu použijte Metal System Trace a Metal Debugger zabudované do Xcode a Instruments.
Existují čtyři kovové čítače GPU, které zahrnují důležité způsoby optimalizace kovu ve vašich aplikacích a hrách. Oni jsou:
- Omezovače výkonu
- Šířka pásma paměti
- Obsazenost
- Odstranění skrytého povrchu
Omezovače výkonunebo omezovače čítače měřit aktivitu více subsystémů GPU vyhledáním prováděné práce a nalezením blokování, které může blokovat nebo zpomalit paralelní provádění.
Moderní GPU provádějí matematické, paměťové a rasterizační práce paralelně (současně). Omezovače výkonu pomáhají identifikovat úzká místa výkonu, která zpomalují váš kód.
Aplikaci Apple Instruments můžete použít k optimalizaci kódu pomocí omezovačů výkonu. V Instruments je půl tuctu různých omezovačů výkonu.
aplikace Apple Instruments.
Čítače šířky pásma paměti
Šířka pásma paměti GPU čítače měří přenosy mezi GPU a systémovou pamětí. GPU přistupuje k systémové paměti při každém přístupu k vyrovnávací paměti nebo texturám.
Uvědomte si však, že lze spustit také mezipaměti systémové úrovně, což znamená, že si občas můžete všimnout malých návalů vyšší propustnosti paměti, než je skutečná přenosová rychlost DRAM. To je normální.
Pokud vidíte čítač šířky pásma paměti s vysokou hodnotou, pravděpodobně to znamená, že přenos zpomaluje vykreslování. Pro zmírnění těchto úzkých míst můžete udělat několik věcí.
Jedním ze způsobů, jak snížit zpomalení šířky pásma paměti, je snížit velikost pracovních sad dat. To vše urychluje, protože se ze systémové paměti přenáší méně dat.
Dalším způsobem je načíst pouze data potřebná pro aktuální vykreslovací průchod a ukládat pouze data potřebná pro budoucí vykreslovací průchody. To také snižuje celkovou velikost dat.
Můžete také použít kompresi blokové textury (ASTC) ke zmenšení velikosti podkladu textury a bezztrátovou kompresi pro textury generované za běhu.
Obsazenost měří, kolik vláken se aktuálně spouští z celkového fondu vláken. 100% obsazenost znamená, že daný GPU je aktuálně na maximum, pokud jde o počet vláken a celkovou práci, kterou zvládne.
The Počítadlo obsazenosti GPU měří procento celkové kapacity vlákna využívané GPU. Tento součet je součtem obsazenosti výpočtu, vrcholu a fragmentu.
Odstranění skrytého povrchu se obvykle vyskytuje někde uprostřed každého renderovacího průchodu před zpracováním fragmentu – krátce poté, co je Tiled Vertex Buffer odeslán do GPU k rastrování.
Vyrovnávací paměti hloubky a odstranění skrytých povrchů se používají k odstranění jakýchkoli povrchů, které nejsou v aktuální scéně viditelné pro kameru pohledu. To zrychluje výkon, protože tyto povrchy není třeba kreslit.
Například povrchy na zadní straně neprůhledných 3D objektů není nutné kreslit, protože je kamera (a divák) nikdy nevidí – takže nemá smysl je kreslit.
Odstraní se také povrchy skryté jinými 3D objekty před nimi vzhledem ke kameře.
Čítače GPU lze použít během odstraňování skrytého povrchu k nalezení celkového počtu rastrovaných pixelů, počtu fragmentových shaderů (ve skutečnosti počtu volání fragmentových shaderů) a počtu uložených pixelů.
Čítače GPU lze také použít k minimalizaci prolnutí, což také znamená náklady na výkon.
Chcete-li optimalizovat kreslení s odstraněním skrytého povrchu, budete chtít kreslit objekty podle pořadí stavu viditelnosti – konkrétně testování, zda jsou objekty neprůhledné, testování podle průsvitnosti a pokusu vyhnout se prokládání neprůhledných a neprůhledných sítí.
Zdroje
Chcete-li začít s optimalizací Metal, nezapomeňte se podívat na videa WWDC Optimalizujte aplikace a hry Metal pomocí počítadel GPU z WWDC20, Spojte GPU s kovem také z WWDC20 a Poskytování optimalizovaných metalových aplikací + her z WWDC19.
Dále čtěte Zachycení pracovní zátěže Metal v Xcode a Typy ladění kovů na stránkách Metal Debugger na webu Apple Developer Documentation.
Existuje také Analýza vaší pracovní zátěže Metal v dokumentaci Metal Debugger.
Určitě budete chtít strávit spoustu času s dokumentací Xcode Metal Debugger a Trace, abyste se do hloubky naučili, jak fungují různé počítadla GPU a grafy výkonu. Bez nich nemůžete získat detailní pohled na to, co se skutečně děje ve vašem kódu kovu.
U komprimovaných textur také stojí za to si přečíst Adaptivní škálovatelná komprese textur (ASTC) a jak to funguje v moderních renderovacích kanálech.
Optimalizace výkonu kovů je rozsáhlé a komplikované téma – sotva jsme začali a toto téma dále prozkoumáme v budoucích článcích.
Zdroj: appleinsider.com