1 points par GN⁺ 2024-08-28 | 1 commentaires | Partager sur WhatsApp

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

 
GN⁺ 2024-08-28
Avis Hacker News
  • Question sur ce que les ingénieurs logiciels doivent faire différemment lorsqu’ils développent des logiciels ciblant RISC-V

    • La taille des exécutables peut augmenter, il faut donc optimiser activement pour la localité du cache
    • Certains types de logiciels peuvent être mieux adaptés au CISC ou au RISC, par exemple les jeux ou les serveurs web
  • 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

    • Question complémentaire sur l’utilité possible des vecteurs classiques sur GPU à la place du packed SIMD
  • Rappel du cas d’un Russe bien connu ayant fait tourner Atomic Heart sur un Elbrus 8S

    • Elbrus dispose d’un traducteur natif, et Atomic Heart était jouable à 15-25 fps
  • Avis selon lequel l’article est trop court sur les « bases »

    • Besoin d’informations supplémentaires sur la manière dont l’ISA x86_64 a été implémentée sur une puce RISC-V
  • Avis selon lequel RISC-V est le moins expressif dans le contexte de l’émulation x86

    • Le RISC était présenté dans les cours d’histoire de l’informatique comme un ordinateur à jeu d’instructions simplifié
    • De nombreux articles et les nouveaux profils RISC-V suggèrent qu’« il faut quelques instructions de plus pour atteindre l’équivalence fonctionnelle »
    • RISC-V est une alternative pratique aux autres plateformes, mais cela soulève la question de savoir si le rêve du RISC est mort
  • Avis selon lequel le résultat est surprenant

    • Beaucoup de travail a été nécessaire, et dans certains cas RISC-V semble avoir atteint ses limites
    • Les instructions de manipulation de bits et de dispersion devraient être ajoutées comme extensions
  • Question sur 86Box

    • Souvenir de l’époque où l’on utilisait un Amstrad PC1512, avec ajout d’une carte disque dur et d’une extension mémoire
    • Les bons vieux moments avec Borland TurboPascal et Zortech C
  • La capture d’écran affiche 31 Go de RAM

    • Cela semble bien plus de RAM que ce qu’offre une carte de développement à spécifications maximales
  • Lien vers un précédent article et informations sur le Milk-V Pioneer

    • Produit destiné au développement natif, sous forme de carte mère et station de travail RISC-V à 64 cœurs
  • Avis espérant qu’il sera possible de transmettre ce retour à RVI au niveau de l’ISA