Présentation
- Il y a un an, le DynaRec RV64 ne pouvait faire tourner que des jeux Linux natifs relativement « faciles à exécuter », comme Stardew Valley et World of Goo
- De nombreuses nouvelles instructions x86_64 ont été rapidement implémentées sur RISC-V, mais beaucoup de bugs subsistaient dans le DynaRec
- À l’époque, il n’existait pas d’appareil RISC-V capable de connecter une carte graphique AMD, et les GPU intégrés IMG des VisionFive 2 et LicheePi 4A ne prenaient pas en charge OpenGL
- Il était possible de lancer des jeux comme Stardew Valley avec
gl4es, mais cela ne suffisait pas pour des jeux Linux plus complexes ou pour des jeux Windows
- Grâce au Milk-V Pioneer de Sophgo, il est devenu possible de connecter une carte graphique AMD, et, avec la correction de nombreux bugs du DynaRec RV64 ainsi que l’ajout de nouvelles instructions x86, il a été possible de faire tourner The Witcher 3
État actuel du DynaRec RISC-V
- Le jeu d’instructions x86 est extrêmement vaste
- Le backend ARM64 implémente plus de 1 600 instructions x86, tandis que le backend RV64 en implémente environ 1 000
- Les instructions SSE ont été implémentées comme des instructions scalaires, et contrairement à AArch64 avec l’extension Neon ou à LoongArch64 avec l’extension LSX, les performances en pâtissent
- RISC-V dispose de l’extension vectorielle RVV, prise en charge par le Milk-V Pioneer et les SoC SpacemiT K1/M1
- Un support de base de RVV a récemment été ajouté à box64, avec l’implémentation de quelques instructions SSE courantes, mais cela reste à un stade précoce
Les instructions les plus nécessaires pour l’émulation x86
- Pour l’émulation x86, RISC-V manque d’expressivité par rapport à AArch64 et LoongArch64
- RISC-V ne dispose pas d’instruction permettant de sélectionner une plage de bits dans un registre ou de l’insérer dans une plage de bits d’un autre registre
- Par exemple, l’instruction
ADD AH, BL nécessite 10 instructions pour être implémentée sur RISC-V
La frustration des instructions atomiques sur 16 octets
- x86 possède des instructions d’opérations atomiques avec le préfixe LOCK, et box64 les émule à l’aide de séquences LR/SC
- L’instruction
LOCK CMPXCHG16B compare et échange 16 octets en mémoire, mais RISC-V ne dispose d’aucune instruction équivalente
- Il est donc impossible d’implémenter parfaitement cette instruction, alors que de nombreux programmes, notamment des jeux Unity, l’utilisent
Conclusion
- Malgré plusieurs limites, The Witcher 3 tourne sur box64 jusqu’à 15 fps, et le menu principal fonctionne à pleine vitesse
Résumé de GN⁺
- Faire tourner The Witcher 3 sur RISC-V constitue une avancée technique importante
- L’émulation x86 sur RISC-V reste encore en retrait par rapport à d’autres architectures, mais elle pourrait progresser grâce à des extensions comme RVV
- Le manque d’expressivité de RISC-V et l’absence d’instructions atomiques sur 16 octets restent des problèmes majeurs
- Parmi les projets offrant des fonctionnalités similaires, on peut citer des émulateurs comme QEMU
1 commentaires
Avis Hacker News
Question sur ce que les ingénieurs logiciels doivent faire différemment lorsqu’ils développent des logiciels ciblant RISC-V
Interrogation sur la possibilité de voir apparaître des systèmes équipés d’un « GPU » implémenté avec quelques gros CPU RISC-V et de nombreux petits CPU RISC-V
Rappel du cas d’un Russe bien connu ayant fait tourner Atomic Heart sur un Elbrus 8S
Avis selon lequel l’article est trop court sur les « bases »
Avis selon lequel RISC-V est le moins expressif dans le contexte de l’émulation x86
Avis selon lequel le résultat est surprenant
Question sur 86Box
La capture d’écran affiche 31 Go de RAM
Lien vers un précédent article et informations sur le Milk-V Pioneer
Avis espérant qu’il sera possible de transmettre ce retour à RVI au niveau de l’ISA