Der Emulator FEX erlaubt das Starten von x86-Programmen auf 64-Bit-fähigen ARM-Prozessoren (Aarch64-Architektur). Die jetzt freigegebene neue Version steigert mit verschiedenen Maßnahmen vor allem die Performance beim emulierten Speichermodell.
FEX muss nicht nur die Befehle von x86-Prozessoren in ihre ARM-Pendants übersetzen, sondern auch das auf x86-Systemen genutzte TSO-Speichermodell nachbilden. Um vor allem die Performance in (x86-)Spielen mit ihren vielen Vektorbefehlen zu steigern, kann man jetzt in FEX bei aktivierter TSO-Emulation zwei weitere Optionen namens Memcpy und Vector einschalten.
Bei letztgenannter Option emuliert FEX die Vector-Loadstore-Befehle des x86-Speichermodells. Dies wiederum soll zu einem größeren Performance-Schub führen. Aktiviert man die Memcpy-Option, emuliert FEX das Speichermodell hinter den Befehlen „REP MOVS“ und „REP STOS“. Das Duo kommt beim Kopieren und Setzen des Speichers zum Einsatz. Wie stark hier die Beschleunigung ausfällt, hängt allerdings von der jeweiligen Anwendung ab.
Zur TSO-Emulation kann FEX auch auf einige entsprechende Erweiterungen der ARM-Prozessoren zurückgreifen. Sofern der verwendete ARM-Prozessor die Erweiterungen „FEAT_LRCPC“ und „FEAT_LRCPC2“ unterstützt, soll man deshalb laut FEX-Team zwar die TSO-Emulation anknipsen, die neuen Vector- und Memcpy-Optionen aber abgeschaltet lassen.
FEX erlaubt auch das komplette Abschalten der TSO-Emulation. Das sollte man sich allerdings gut überlegen, da man dann mit einer nicht mehr ganz korrekten Emulation und somit Instabilitäten leben muss. Allerdings profitiert man dann in FEX 2404 von optimierten „memcpy“- und „memset“-Befehlen. Laut der offiziellen Ankündigung soll sich hierdurch die Datentransferrate von 2 bis 3 GB/s auf bis zu 88 GB/s erhöhen. Ob es sich somit lohnt, die TSO-Emualtion zu deaktivieren, muss man von Anwendung zu Anwendung selbst entsscheiden.
Beine machen FEX 2404 in jedem Fall ein optimierter JIT-Compiler, der rund 3 Prozent flotter zu Werke geht. Abschließend haben die Entwickler noch den Code aufgeräumt und Speicherlecks bei der Thread-Erstellung korrigiert. Eine detaillierte Liste mit allen Änderungen findet sich auf GitHub.



