Door Wout Funnekotter

Hoofdredacteur

De prestaties van Windows 10

Snelheid, accuduur en DX12

DirectX 12

Het gros van de Windows-games maakt gebruik van Microsofts DirectX-api voor het renderen van graphics. De game 'praat' tegen DirectX en DirectX 'praat' vervolgens tegen de driver van AMD, Nvidia of Intel, afhankelijk van wat voor gpu je hebt. Dat is anders dan bij gameconsoles, waar ontwikkelaars de hardware direct kunnen aanspreken. Een dergelijke aanpak is bij pc's natuurlijk ondenkbaar, omdat dan rekening gehouden moet worden met een ontelbaar aantal combinaties van cpu's, gpu's en geheugenconfiguraties. Een api als DirectX, die ontwikkelaars bepaalde zaken uit handen neemt, is dus broodnodig.

DirectX moet daarvoor wel allerlei zaken bijhouden met betrekking tot de commando's die de game naar de grafische kaart stuurt: state changes van objecten, volgorde van instructie-executie en geheugenallocatie, om een paar voorbeelden te noemen. Daarbij worden opdrachten vaak niet direct verstuurd, maar eerst verzameld en in batches afgevuurd. Dat kost allemaal cpu-tijd en veel cpu-tijd is er niet. Als je een game op 60fps wil draaien, is per frame 16,6ms beschikbaar waarin alles moet gebeuren.

Heb je een moderne game-pc met een rappe cpu, dan is dat geen groot probleem. De cpu is dan snel genoeg om geen knelpunt te vormen. Bij systemen met tragere cpu's kun je echter tegen het probleem aanlopen dat de gpu bij het renderen van een frame eerder klaar is dan de cpu, waardoor de cpu wel een knelpunt vormt.

De oplossing

DirectX 12 moet dat voor een deel oplossen, vergelijkbaar met hoe AMD's Mantle dat eerder al deed. De nieuwe versie van Microsoft graphics-api's geeft programmeurs meer controle over de aansturing van de gpu. Dat betekent dat zij taken die eerst door de api afgehandeld werden nu zelf moeten doen, zoals resource tracking, maar doordat de programmeur zelf meer weet heeft van wat er allemaal gebeurt, kan dat wel efficiënter. Daarnaast wordt aan de validatiekant van de data veel tijdwinst geboekt, omdat de api die checks nu efficiënter aanpakt.

Behalve dat er dus minder cpu-cycles nodig zijn voor communicatie met de driver en videokaart, is het in DirectX 12 ook mogelijk om die opdrachten vanaf verschillende cpu-cores aan te leveren, in plaats van vanaf een enkele, zoals dat bij DirectX 11 nog het geval was.

Het effect

Alle wijzigingen hebben tot gevolg dat er minder load op de cpu komt, waardoor je ook met een tragere cpu kunt gamen zonder dat zich een knelpunt vormt. Op systemen met minder krachtige cpu's moeten games met DirectX12 in verhouding dus sneller draaien. Op papier verandert er helemaal niets voor systemen die wel over genoeg cpu-kracht beschikken; daarbij moet je geen grote prestatiewinst verwachten. Datzelfde zagen we overigens al bij Mantle.

Natuurlijk kunnen gameontwikkelaars ervoor kiezen om die vrijgekomen cpu-cycles aan andere zaken te besteden, zoals geavanceerdere physics-berekeningen.

De praktijk

Wat DirectX 12 in de praktijk voor pc-gaming gaat doen is nog niet te zeggen, want er zijn nog geen games die de api ondersteunen. Overigens hebben veel grote ontwikkelaars al wel aangegeven ermee aan de slag te gaan en de veelgebruikte Unreal Engine heeft bijvoorbeeld al DirectX 12-support.

De enige test die vooralsnog beschikbaar is, is de api-overheadtest van 3DMark. Deze kijkt hoeveel draw calls uitgevoerd kunnen worden onder DirectX 11, Mantle en DirectX12, en geeft daarmee een indruk van de efficiëntieverbeteringen in de nieuwe DirectX-versie.

Elke keer als een game iets wil veranderen aan de scene op het scherm, kost dat één of meerdere draw calls. Denk daarbij aan het renderen van geometrie, het tekenen van een texture of aanbrengen van een shader. Het is daarom zaak om zoveel mogelijk van die calls in een bepaald tijdsbestek te kunnen doen. Dat wordt bij DirectX 12 dus bereikt door de overhead sterk terug te dringen en ervoor te zorgen dat alle cpu-threads commando's kunnen aanleveren.

We hebben deze test zowel op ons desktopsysteem als op de meer bescheiden Surface Pro 3 gedraaid. Op het desktopsysteem hebben we de i7 3960X op verschillende manieren getest: met twaalf threads, met zes threads en met slechts één thread.

Het verschil tussen DirectX 11 en 12 is overduidelijk, en ook Mantle weet de oude DirectX-versie uit het water te blazen, al was dat natuurlijk al bekend. Interessanter is dat DX12 nog minder cpu-gelimiteerd lijkt dan Mantle. Schalen we namelijk terug naar één core zonder hyperthreading, dan weet de nieuwe DirectX-versie nog steeds een behoorlijke score neer te zetten, terwijl Mantle ver terugzakt. De Surface Pro 3 laat zien dat ook de minder krachtige Intel-dualcore-cpu met zwakke igp profijt heeft van DX12.

Helaas zijn er op dit moment geen andere cijfers die we over DX12 kunnen publiceren. Wil je dus weten hoeveel verschil de nieuwe api daadwerkelijk in games zal maken, dan moet je geduld hebben tot het moment waarop die games uitkomen. Vermoedelijk zullen we de eerste games met DirectX 12-support aan het einde van dit jaar zien.

Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee