Dit is (waarschijnlijk) waarom AMD Ryzen 'slecht' presteert in games

171 reacties

Tegen de stoutste dromen van sommigen in, bleek AMD met zijn Ryzen-processors eindelijk weer een antwoord te hebben op Intel in het high-end segment. Zoals verwacht presteerden de nieuwe CPU's uitmuntend in multi-threaded applicaties, maar één type software viel toch iets tegen: games. Diverse collega's in de internationale hardwarewereld hebben op hun eigen manieren onderzoek gedaan naar de oorzaak daarvan, waarop AMD inmiddels een officiële reactie heeft gegeven. Wij zetten alles op een rij.


Ook op Hardware.Info kon je vorige week, uitdrukkelijk gebracht als gerucht, lezen over de theorie dat een bug in Windows 10 leidde tot lagere game-prestaties van Ryzen. Dat blijkt niet waar te zijn - uitgebreid onderzoek van PC Perspective laat zien dat Windows 'snapt' hoe de Ryzen-processors in elkaar zitten. Maar waarom is dat van belang?

In eerste instantie werd vooral gezocht in de richting van SMT, feitelijk hetzelfde trucje als wat Intel HyperThreading noemt. Per core zijn er twee threads present waar het besturingssysteem taken aan kan toewijzen. De secundaire thread van een core is daardoor wel langzamer dan de 'echte core'. Het is dus niet handig als Windows een werklast die slechts twee threads gebruikt toewijst aan twee threads op dezelfde core - twee threads die fysiek gebruikmaken van andere cores zijn in dat geval sneller. Daar zit het probleem echter niet - Windows begrijpt dat uitstekend en slaat telkens één thread over bij het uitdelen van de opdrachten. In onderstaande screenshot zie je hoe dat er in Taakbeheer uitziet bij een workload die acht (van de 16) threads kan gebruiken:

De boosdoener: inter-CCX-latency

Het zou nog kunnen dat Windows de nummering van de threads door elkaar gooit en de volgorde 'echte core'-gesimuleerde core niet intact is, maar dat bleek niet het geval. Van een scheduler-bug is dus geen sprake. Bij het testen van die theorie kwam echter wel iets anders naar boven. Daarvoor werd namelijk gemeten hoe lang een 'ping' van de ene naar de andere thread duurt - bij threads die fysiek dezelfde core betreffen, gaat dat uiteraard stukken sneller. Hieronder zie je hoe dat eruit ziet op een Intel-CPU (links) en op AMD Ryzen (rechts).

Wat je ziet, is dat bij de Intel-processor een ping naar een andere fysieke core ongeveer 76 nanoseconden duurt, terwijl een ping naar de 'hyperthreaded' thread op dezelfde core binnen 14 ns is afgerond. Bij AMD kwam uit die test een totaal andere grafiek tevoorschijn. Ten eerste duurden pings naar een andere thread op dezelfde core iets langer dan bij Intel (26 ns) en pings naar fysiek andere cores juist wat korter (42 ns), maar dat is van minder belang dan wat in het midden van de grafiek gebeurt. Er blijkt een voor CPU-termen gigantische latency te zitten bij het switchen tussen één van de eerste vier cores en één van de laatste vier cores - dat voegt 100 ns toe bovenop de bestaande 42 ns.

Deze extra vertraging is eigenlijk inherent aan de Zen-architectuur. Wie onze Ryzen review goed heeft gelezen, weet dat een 8-core Ryzen-processor bestaat uit twee zogenaamde 'core complexen' - als het ware modules van vier cores die fungeren als bouwstenen om CPU's tot wel 32 cores uit te kunnen brengen. Tussen die CCX'en zit een bus die AMD Infinity Fabric noemt. Wil een thread die actief is op een core in CCX 1 dus data ontvangen van of versturen naar een core in CCX2, dan moet dat via die 'snelweg' tussen de twee CCX'en. Kortom, de communicatie tussen de vier cores binnen één CCX verloopt fors sneller dan tussen één core in het ene CCX en een tweede core in het andere.

Ook daarvan lijkt de scheduler van Windows echter op de hoogte - zolang dat mogelijk is, lijkt de scheduler te proberen om een multi-threaded taak op de cores van slechts één CCX te laten plaatsvinden.

Sommige games 'liggen' de architectuur simpelweg niet zo goed

Waarom presteert Ryzen dan toch nog wat minder dan sommigen hadden gehoopt in games, terwijl de scores in tests als Cinebench juist uitstekend zijn? Het antwoord ligt hem waarschijnlijk in de aard van de werklast. Bij een rendertest als Cinebench wordt de werklast simpelweg opgeknipt in blokken, waarmee elke core aan de slag kan. Het maakt eigenlijk niet uit wanneer een core klaar is: de ene thread is niet afhankelijk van de ander. Bij games is dat vaker wel het geval, al is dat niet bij elk spel zo in dezelfde mate - dat verklaart ook direct waarom sommige games meer prestatieverschil lieten zien dan anderen. In het nadeel van AMD kan spreken dat de trend is dat games steeds meer multi-threaded worden en die inter-CCX-communicatie dus vaker nodig zullen hebben - een trend die AMD ironisch genoeg met Mantle en daarna DirectX 12 gedeeltelijk zelf is gestart.

Inmiddels heeft AMD bevestigd dat de Windows-scheduler correct functioneert en het probleem daar dus niet ligt. Het wijst echter wel op het feit dat het energieprofiel 'Hoge prestaties' de beste prestaties oplevert. In de modus 'Gebalanceerd' worden cores die in idle zijn namelijk uitgeschakeld door het besturingssysteem, waardoor het langer duurt om ze te activeren als de belasting weer toeneemt. Tegelijkertijd bemoeit het OS zich dan intensiever met de power-states die worden gekozen, met als gevolg dat de Ryzen-CPU minder snel omhoog en omlaag kan schakelen met de kloksnelheid.

Het Duitse ComputerBase nam de proef op de som en concludeerde dat de meeste games inderdaad iets sneller draaien bij het inschakelen van de 'Hoge prestaties'-energiemodus en het uitschakelen van de High Precision Event Timer. Gemiddeld ging het om een winst van 2 procent - Project Cars was de enige duidelijke uitschieter met een prestatiewinst van 17%. Daar staat wel tegenover dat het stroomverbruik in idle opliep van 53 naar 62 watt. De theorie dat het 'Ryzen-prestatieprobleem' specifiek aan Windows 10 lag kan overigens direct bij het grofvuil - onder Windows 7 zijn de prestaties lager én verbruikt het systeem meer stroom.

Techspot deed overigens ook specifiek onderzoek naar de prestatiewinst van het uitschakelen van SMT - dat bleek gemiddeld 3% prestatiewinst op te leveren. Een lichte afname van de prestaties bij het inschakelen van HyperThreading zagen we in het begin - en zien soms nog steeds - ook bij Intel, dus dat is eigenlijk niet abnormaal.

Conclusie

In één zin: waar ligt het aan dat Ryzen niet zo goed presteert in games als in andere software? Het antwoord: eigenlijk voornamelijk aan de manier waarop de Zen-architectuur werkt. De latency die wordt geïntroduceerd door de opdeling in core-complexen van vier cores lijkt op games meer invloed te hebben dan op veel andere software, waarbij gelijktijdige berekeningen minder afhankelijk zijn van elkaar.

Er zijn zaken die nog gefinetuned kunnen worden door AMD en zijn partners. Dat zijn meestal winsten van een paar procent. Natuurlijk moeten die winsten waar mogelijk worden gepakt, maar ze zullen het algemene prestatiebeeld van Ryzen niet veel veranderen. Laten we niet vergeten dat de Ryzen-CPU's zowel qua IPC nog iets achterliggen op Intel als vaak wat minder hoog geklokt zijn - iets lagere prestaties in games, nog altijd niet de best multi-threaded workload, zijn dan enigszins te verwachten.

Verandert dat onze conclusie over Ryzen? Nee, het blijven zeer aantrekkelijke processors voor wie meer doet met zijn PC dan alleen gamen en de terugkeer van AMD in het high-end segment kunnen we nog steeds niet anders dan toejuichen. Misschien worden de Ryzen 5-processors, die ergens volgend kwartaal op de markt moeten komen, nog wel interessanter voor veel hardwareliefhebbers dan de eerste lichting. Als AMD tegen die tijd de paar procenten prestatiewinst die her en der liggen heeft weten te cultiveren, is dat alleen maar mooi meegenomen.

Overigens, iets dat AMD ook benoemt in zijn reactie op alle bevindingen: de Ryzen R7 1700X en 1800X bleken te hoge temperaturen te rapporteren. Dat was niet per ongeluk, maar expres - AMD telt 20 graden bij de temperatuur die de sensor uitleest op om te zorgen dat de ventilator van de processorkoeler hard genoeg gaat draaien. Dat was men vergeten te vertellen en veel diagnosetools lezen daarom de doorgegeven (te hoge) temperatuur uit, maar Ryzen blijkt dus een stuk minder warm te worden dan het lijkt.

Bronnen: PC Perspective, AMD, ComputerBase, Techspot

« Vorig bericht Volgend bericht »
0
*