• Mitspieler gesucht? Du willst dich locker mit der Community austauschen? Schau gerne auf unserem ComputerBase Discord vorbei!

Notiz Dota 2: Patch soll Threading für Ryzen verbessern

TheJoker schrieb:
Wenn das Programm 5 Threads auslastet, würde der Windows-Scheduler die normalerweise auf 5 physische Kerne (z.B. 0, 2, 4, 6 und 8) verteilen, da das für die anderen aktuellen Architekturen die beste Performance bringt. Mit einem Ryzen-Prozessor kann allerdings das Nutzen von einem SMT-Kern (also z.B. Kern 1) bessere Performance bringen, da die Kommunikation innerhalb eines CCX schneller ist als über die Infinity Fabric.

Dann müsste eine generelle Optimierung (Anpassung des Scheduler) entsprechende Vorteile bringen. Ich erinnere mich aber eine Aussage seitens AMD, das Windows Threading auch mit Ryzen optimal läuft und nicht angepasst wird. Also was den nu?

Abgesehen davon, hätte ich bei einem modernen System erwartet das es sich adaptiv an unbekannte Hardware anpasst. Die Windows Leistungsmessung wäre dafür der ideale Kandidat. AFAIR wurde das doch bereits bei Vista/Win7 genutzt um die besten Routinen für die Medienwiedergabe zu bestimmen. Warum also nicht auch, um den besten Scheduler für SMT festzulegen?


TheJoker schrieb:
Da tritt das Problem mit der Kommunikation zwischen verschiedenen Kernen nicht auf. Für Bulldozer hat MS soweit ich weiß außerdem den Scheduler entsprechend angepasst.

Naja selbst wenn, gebracht hatte es leider nicht viel. Zumindest waren die Tipps zum beschleunigen, die gleichen wie jetzt beim Ryzen, z.B. Energieprofil Höchstleistung. Was für ein Schwachsinn.
Hätte AMD mal lieber parallel zu Ryzen einen auf ihre Architektur optimierenden Kompiler für Windows entwickelt.
 
Das Problem daran ist, dass der Scheduler nicht von außen und vor allem nicht im Voraus von selbst (zuverlässig) erkennen kann, welche Threads Daten austauschen werden. Das müsste ihm durch die Anwendung mitgeteilt werden, dann kann man die Threads aber genauso gut auch nach bekanntem Muster pinnen. Es müsste also trotzdem jede Anwendung einzeln angepasst werden.

Zudem hängt es auch von dem ausgeführtem Programmcode ab, ob ein echter Kern in einem anderen CCX bessere Performance bietet oder eben ein SMT-Kern im gleichen CCX. Im Allgemeinen ist ein echter Kern natürlich im Rechnen schneller als ein SMT-Kern, deswegen sieht AMD den Fehler nicht im Windows-Scheduler.

Das ganze zuverlässig automatisiert durch einen Compiler bewerten zu lassen ist vermutlich nicht trivial und einen eigenen Compiler zu betreuen ist seitens AMD zu zeit- und arbeitsaufwändig. Realistisch wäre evtl. ein Patch für die bestehenden OSS-Compiler, der eine derartige Optimierung durchführt. Ich bezweifle aber, dass das automatisiert möglich ist.
 
Zuletzt bearbeitet:
Tomsenq schrieb:
imho ist es bei jedem Spiel egal.

imho nicht

und weil geschätzt weit über 60% aller PC-Spieler sagen "imho nicht", wird darauf optimiert - kannst ja gerne den Framelimiter für "cineastischeres" Spielgefühl aktivieren :rolleyes:
 
TheJoker schrieb:
Wenn das Programm 5 Threads auslastet, würde der Windows-Scheduler die normalerweise auf 5 physische Kerne (z.B. 0, 2, 4, 6 und 8) verteilen, da das für die anderen aktuellen Architekturen die beste Performance bringt. Mit einem Ryzen-Prozessor kann allerdings das Nutzen von einem SMT-Kern (also z.B. Kern 1) bessere Performance bringen, da die Kommunikation innerhalb eines CCX schneller ist als über die Infinity Fabric.
Sowas kann man durchaus durch manuelles Setzen der Affinitätsmaske testen. Ich mag wetten, dass es in 98% aller Fälle keine Leistungssteigerung gibt bzw. eher einen Verlust, denn

a) ist es nichts Neues, dass Inter-Core-Kommunikation langsam ist, Programmierer sollten also generell darauf achten, dass jeder Thread wenigstens ein paar tausend Takte rechnet, bevor Daten getauscht werden
b) SMT im schlimmsten Fall negative Skalierung durch Cache-Thrashing hat und damit nur den anderen Thread ausbremst.
 
VikingGe schrieb:
Sowas kann man durchaus durch manuelles Setzen der Affinitätsmaske testen.
Ich habe leider keinen Ryzen hier, deswegen ist das meinerseits nur Spekulation.
 
TheJoker schrieb:
Das ganze zuverlässig automatisiert durch einen Compiler bewerten zu lassen ist vermutlich nicht trivial und einen eigenen Compiler zu betreuen ist seitens AMD zu zeit- und arbeitsaufwändig.

Da ein ansonsten bekanntermaßen sehr gut optimierender Kompiler (ICC) nebst den zugehörigen Bibliotheken AMD seit fast einem Jahrzehnt deutlich benachteiligt, wären sie genau damit aber gut beraten.
Wäre es einfach, dem Marktführer ans Bein zu pissen, dann könnte es ja jeder.
 
Ashes of the Singularity hat nun auch mit einem Ryzen Patch nachgezogen: https://www.pcper.com/reviews/Processors/Ashes-Singularity-Gets-Ryzen-Performance-Update

bis zu 30% mehr für umme

ashes-1.png
 
Wow.

Auch interessant die Kommentare von Ryan Shrout:
The result of 400 developer hours of work, the Nitrous Engine powering Ashes of the Singularity received an update today to version 26118 that integrates updates to threading to better balance the performance across Ryzen 7’s 8 cores and 16 threads.

Also eigentlich echt nicht so viel Zeit die neue CPU-Architektur einzupatchen 400 Mannstunden...10Mann 1 Woche; 5Mann 2 Wochen.

“For basically 5 years”, I was told, Oxide and other developers have dedicated their time to “instruction traces and analysis to maximize Intel performance” which helps to eliminate poor instruction setup. After spending some time with Ryzen and the necessary debug tools (and some AMD engineers), they were able to improve performance on Ryzen without adversely affecting Intel parts.

Jo, etwas Zeit und nachhaltig (für die nächsten Jahre bis eine neue CPU-Architektur kommt) performance gewonnen. Intel wurde ja 5 Jahre lang optimiert...

EDIT:
It seems like it’s been months since AMD launched Ryzen, its first new processor architecture in about a decade, when in fact we are only four weeks removed.
 
Zuletzt bearbeitet:
Zurück
Oben