RPCS3 on ARM Gets Faster: Whatcookie Claims Up to 60% Performance Boost

rpcs3-auf-arm-mobile-ps3-0db1

Der PS3-Emulator RPCS3 auf ARM hat nach umfangreichen Optimierungen spürbar an Tempo gewonnen: Entwickler Whatcookie nennt je nach Spiel, Hardware und Workload Leistungssteigerungen von bis zu 60 Prozent. Gleichzeitig soll der Emulator auch beim Stromverbrauch deutlich effizienter werden – in den Tests mit den beschriebenen Änderungen um durchschnittlich bis zu 25 Prozent weniger Leistungsaufnahme.

Release-/Plattform-Update: RPCS3 für ARM (keine neue Version genannt)

Projekt Plattform Status/Ergebnis
RPCS3 ARM Optimierungen mit bis zu +60% Performance (spiel-/hardwareabhängig) und bis zu -25% Leistungsaufnahme

Whatcookie erläuterte die Ursachen der bisherigen Performance-Lücke und die konkreten Gegenmaßnahmen in einem Video. Ausgangspunkt für die Optimierungsarbeit war laut seinen Angaben ein Ayn Odin 2, das er für die ARM-Anpassungen nutzte.

Wo ARM früher Zeit verlor: Busy-Wait und Timer-Skalierung

Ein Kernproblem war eine Busy-Wait-Funktion, die fortlaufend prüfte, ob sich der Wert einer Variable in einem anderen Thread geändert hatte. Obwohl diese Methode schnelle Reaktionen erlaubt, verursachte sie hohe CPU-Last, weil sich mehrere Kerne die Aufgabe teilen mussten. Auf x86-Systemen könne diese Busy-Wait-Variante unter bestimmten Bedingungen fast dreimal so schnell laufen wie auf ARM – ein Hinweis darauf, dass es nicht nur um reine Rechenleistung geht, sondern um grundlegende Unterschiede in der Implementierung und Messlogik.

Auf ARM identifizierte Whatcookie das Timing-Problem vor allem im verwendeten Hardware-Timer. Während die Timer-Abfrage auf x86 typischerweise mit etwa 2 bis 4 GHz arbeitet (entspricht laut Beschreibung grob einer Mikrosekunde Wartezeit), läuft das ARM-Gegenstück auf dem Odin 2 nur mit 19 MHz. Dadurch konnte die Wartezeit auf bis zu 150 Mikrosekunden anwachsen. Zusätzlich schwanken Hardware-Timer auf ARM-Geräten je nach Plattform erheblich (laut Angabe zwischen 10 MHz und 1 GHz), was die Umsetzung weiter erschwert.

Als Lösung soll RPCS3 die tatsächliche Timer-Frequenz berücksichtigen und die Wartezeit entsprechend skalieren. Diese Anpassung allein soll durchschnittlich rund 25 Prozent mehr Performance bringen und gleichzeitig die Leistungsaufnahme im Mittel um etwa zehn Prozent senken.

Weitere Effizienzgewinne: Synchronisation, Recompiler und gezielte Code-Optimierungen

Neben der Timer-Korrektur optimierte Whatcookie auch die Synchronisation innerhalb der Busy-Wait-Schleife. Auf ARM nutzte RPCS3 zuvor den Yield-Befehl als Entsprechung zu x86 Pause. Diese Herangehensweise funktioniert jedoch nur dann gut, wenn SMT (Simultaneous Multithreading) vorhanden ist. Viele ARM-Systeme setzen stattdessen auf SMP (Symmetric Multiprocessing). Daher wechselte Whatcookie zur Instruction Synchronization Barrier (ISB). Das ist nicht 1:1 wie die x86-Pause-Funktion, soll aber laut Beschreibung die Leistungsaufnahme weiter reduzieren, weil die Abfrage nicht in sehr kurzen Intervallen innerhalb weniger Nanosekunden wiederholt wird, sondern nur noch in größeren Abständen.

Auch bei den Recompilern gab es laut den Erklärungen einen wichtigen Hebel: Die ursprüngliche ARM-Portierung stammte von Nekotekina, dem ehemaligen Lead-Entwickler, der jedoch ging, bevor die Arbeit an den Recompilern abgeschlossen war. Da gerade diese Komponenten entscheidend dafür sind, emulierte Spiele mit hoher Geschwindigkeit laufen zu lassen, blieben auf ARM mehrere Probleme bestehen, die auf x86 bereits gelöst waren. Whatcookie untersuchte daraufhin Instruktionen, bei denen x86 effizienteren Code erzeugt, und passte mehrere Code-Stellen an, um die Ausführung auf ARM-Prozessoren zu beschleunigen.

Konkrete Rechenroutinen beschleunigt: Vergleiche, Checksummen und SVE

Für zusätzliche Geschwindigkeit wurden grundlegende Routinen optimiert. So sollen Vergleichsoperationen durch den Einsatz von Multiply-Accumulate-Instruktionen beschleunigt werden: Dabei werden Ergebnisse mehrerer Vergleiche multipliziert und anschließend akkumuliert, wodurch weniger Instruktionen nötig sind. Whatcookie erwartet je nach Kernklasse Leistungsgewinne von bis zu 22 Prozent auf mittleren und größeren ARM-Kernen sowie etwa 16 Prozent auf kleineren Kernen.

Bei der Checksummen-Berechnung kommt nun UABAL (Unsigned Absolute Difference and Accumulate Long) zum Einsatz. Die Anweisung kann zwei Werte laden, deren absolute Differenz bestimmen und das Ergebnis akkumulieren. Für diese Routine nennt Whatcookie Werte von etwa 38 Prozent schnelleren Ergebnissen auf mittelgroßen ARM-Kernen und rund 21 Prozent auf größeren Kernen. Zusätzlich wird mehr Checksummen-Code zusammengefasst, wodurch weniger Platz im Code-Cache benötigt wird – mit einem weiteren erwarteten Plus von zwei Prozent.

Ein weiterer Performance-Schub soll aus Scalable Vector Extensions (SVE) kommen. Da RPCS3 stark von Vektoroperationen profitiert, nutzt Whatcookie dafür spezifische SVE-Instruktionen mit 128 Bit Vektorlänge. In einem einfachen Loop mit vielen Multiplikationen beobachtete er dabei laut Beschreibung weitere rund zehn Prozent Performance-Zuwachs.

Gesamter Effekt: bis zu +60% und bis zu -25% Leistungsaufnahme

Die vielen kleineren Änderungen sollen sich laut Whatcookie zu einer großen Gesamtverbesserung addieren. Je nach Spiel, Hardware und Workload seien demnach bis zu 60 Prozent mehr Performance möglich. Gleichzeitig soll die Leistungsaufnahme um bis zu 25 Prozent sinken. Das bedeutet nicht nur weniger Stromverbrauch und potenziell längere Laufzeiten, sondern kann auch zu weniger Abwärme und damit zu einfacherem Kühling beitragen.

Whatcookie betont zudem, dass ein wesentlicher Teil der bisherigen ARM-Nachteile nicht zwingend aus der Architektur selbst resultiert, sondern aus unvollständigen oder nicht optimal an ARM angepassten Implementierungen. Durch das Beheben dieser Schwachstellen und das gezielte Nachrüsten von ARM-spezifischen Optimierungen könne die ARM-Variante von RPCS3 deutlich näher an die ausgereifte x86-Version heranrücken.