Gränssnitten öppnar upp

I och med att AMD har haft stöd för asynkrona beräkningar i flera år är det lätt att fråga sig varför tekniken inte har utnyttjats tidigare. Svaret är att det har den, på konsolsidan det vill säga.

DOOM_spel_liten.jpg

Med Doom visade Id Software att Vulkan kan ge en rejäl prestandaknuff på hårdvara med asynchronous compute-stöd.

Ashes_2016-02-24 09-09-02-63.jpg

Ashes of the Singularity var det första spelet byggt med Mantle och DirectX 12 som grund.

Både Playstation 4 och Xbox One använder specialanpassade gränssnitt för att dra nytta av hårdvaran från AMD. På PC-sidan har detta däremot inte varit möjligt då DirectX 11 och OpenGL inte stöder parallell asynkron exekvering av uppgifter från olika beräkningsköer, något som AMD:s Robert Hallock lyfter fram under vårt samtal.

DirectX har använt en seriell exekveringsmodell från version nio fram till version elva. Om du har ett grafikjobb, eller ett compute-jobb eller ett datakopieringsjobb, måste de turas om i grafikkretsens shader-motor oavsett om hårdvaran är asynchronous compute-kapabel eller ej. Du kan helt enkelt inte köra saker parallellt. Med början i Mantle och sedan Vulkan och DirectX 12 kan dessa saker köras parallellt, och det är det folk syftar på när det pratas om asynkrona beräkningar.

Problemet med den linjära exekveringsmodellen hos äldre versioner av OpenGL och DirectX bekräftas även av Rok Erjavec, som menar att det har varit möjligt att utnyttja tillgängliga hårdvaruresurser på ett effektivt sätt tidigare, men att det är något som få utvecklare i realiteten klarar av.

Spelmotorerna har utvecklats på ett sätt som gör att en stor del av grafikprocessorns resurser kan vara inaktiva vid olika tidpunkter i exekveringsprocessen. Drivrutiner och hårdvaran kan sköta en viss optimering av fördelning av resurser i bakgrunden, men det kan inte uträtta några mirakel i en seriell exekveringsmodell.

Det har varit möjligt att hålla nästan alla tillgängliga resurser utnyttjade tidigare, men det har medfört en komplex design som inte alla bemästrar, och dessutom en komplexitet som inte kan garantera förbättrad prestanda i alla lägen. Och då är det svårt att motivera att lägga så pass mycket resurser på det som krävs i en seriell exekveringsmodell.

En kod för alla

Med allt prat om Asynchronous Compute, hur det först blivit tillgängligt på AMD:s hårdvara och sedan följts av de nya utvecklargränssnitten DirectX 12 och Vulkan, blev vi nyfikna på hur situationen ser ut för utvecklare som numera ska producera spel på flera plattformar. Är det någon större skillnad på att ta fram kod som ska köras asynkront på hårdvara från Nvidia eller AMD, utnyttja DirectX 12 eller Vulkan och lanseras för både spelkonsoler och PC?

uncharted.jpg

Föregående generations spelkonsoler med Playstation 3 i spetsen tvingade utvecklare att dela upp spelmotorn i en mängd små parallella arbetsuppgifter.

När det gäller frågan om att utveckla kod som ska exekveras asynkront är det ingen skillnad mellan de olika grafikkortsleverantörerna. Kod skrivs för att kunna exekveras parallellt och stöder grafikkortet eller utvecklargränssnittet inte detta körs instruktioner seriellt. Att bryta upp koden i en mängd små jobb, som relativt enkelt kan parallelliseras, lyfter Rok Erjavec fram som något utvecklare har ägnat sig åt i många år.

Att ändra utvecklingen från den tidigare monolitiska utvecklingsmodellen till en mer modulär struktur har varit ett pågående paradigmskifte. Modellen med att dela upp koden i en mängd olika småjobb tog sin början under Playstation 3-/Xbox 360-eran, och det krävdes i princip hela den generationen för att det skulle mogna.

Det återstår fortfarande arbete att göra, men idag har vi det mer på plats och det gör koden som utvecklas idag mogen för att användas tillsammans med asynchronous compute. Att utnyttja den kräver förvisso en icke-trivial insats från utvecklaren om det gäller mjukvarusystem som inte utvecklats med asynchronous compute i åtanke redan från start.

På frågan om hur mycket av koden i en modern spelmotor som kan lastas av till Asynchronous Compute säger AMD:s Robert Hallock att det i värsta fall handlar om 5–10 procent av arbetsbelastningen, medan det i bästa fall kan handla om 30–35 procent. Avlastning syftar på konsolplattformarna, men han förväntar sig att något liknande börjar sprida till PC framöver. Rok Erjavec menar att i princip all kod kan utformas för att dra nytta av Asynchronous Compute, men att det i dagsläget mest är traditionella grafik- och logikjobb som avlastas.