Historia
- Hace un año, el DynaRec RV64 solo podía ejecutar juegos nativos de Linux relativamente "fáciles de correr", como Stardew Valley y World of Goo
- Se implementaron rápidamente muchas instrucciones nuevas de x86_64 en RISC-V, pero todavía quedaban muchos errores en DynaRec
- En ese momento no existían dispositivos RISC-V a los que se pudiera conectar una tarjeta gráfica AMD, y las GPU integradas IMG de VisionFive 2 y LicheePi 4A no eran compatibles con OpenGL
- Era posible ejecutar juegos como Stardew Valley usando gl4es, pero no era suficiente para juegos de Linux más complejos ni para juegos de Windows
- Con el Milk-V Pioneer de Sophgo fue posible conectar una tarjeta gráfica AMD, y al corregir muchos errores de RV64 DynaRec y agregar nuevas instrucciones x86 se logró ejecutar The Witcher 3
Estado actual de RISC-V DynaRec
- El conjunto de instrucciones x86 es extremadamente amplio
- El backend ARM64 implementó más de 1,600 instrucciones x86, pero el backend RV64 ha implementado alrededor de 1,000
- Las instrucciones SSE fueron implementadas como instrucciones escalares, y tanto AArch64 con la extensión Neon como LoongArch64 con la extensión LSX presentan una caída de rendimiento
- RISC-V cuenta con la extensión vectorial RVV, y el Milk-V Pioneer junto con los SoC SpacemiT K1/M1 la soportan
- Recientemente se añadió soporte básico para RVV en box64 y se implementaron algunas instrucciones SSE comunes, pero todavía está en una etapa temprana
Instrucciones más necesarias para la emulación de x86
- En la emulación de x86, RISC-V tiene menos capacidad expresiva que AArch64 y LoongArch64
- RISC-V no tiene instrucciones para seleccionar un rango de bits de un registro o insertarlo en el rango de bits de otro registro
- Por ejemplo, para implementar la instrucción
ADD AH, BL en RISC-V se necesitan 10 instrucciones
La frustración de las instrucciones atómicas de 16 bytes
- x86 tiene instrucciones de operación atómica con el prefijo LOCK, y box64 las emula usando secuencias LR/SC
- La instrucción
LOCK CMPXCHG16B compara e intercambia memoria de 16 bytes, pero RISC-V no tiene una instrucción equivalente
- Por lo tanto, no es posible implementar esta instrucción por completo, y muchos programas como los juegos hechos con Unity la utilizan
Conclusión
- A pesar de varias desventajas, The Witcher 3 corre en box64 hasta a 15 fps, y en el menú principal funciona a velocidad completa
Resumen de GN⁺
- Ejecutar The Witcher 3 en RISC-V es un hecho importante que demuestra un avance técnico
- La emulación x86 en RISC-V todavía está por detrás de otras arquitecturas, pero podría mejorar mediante extensiones como RVV
- La menor capacidad expresiva de RISC-V y la ausencia de instrucciones atómicas de 16 bytes siguen siendo problemas importantes
- Un proyecto similar con funciones parecidas es un emulador como QEMU
1 comentarios
Opiniones de Hacker News
Hay una pregunta sobre qué tendría que hacer diferente un ingeniero de software al desarrollar software apuntando a RISC-V
Curiosidad sobre la posibilidad de que aparezca un sistema con una “GPU” implementada con unos pocos CPU RISC-V grandes y muchos CPU RISC-V pequeños
Recuerda el caso de un ruso famoso que ejecutó Atomic Heart en un Elbrus 8S
Opinión de que el artículo se queda corto en los "fundamentos"
Opinión de que RISC-V es el menos expresivo en el contexto de la emulación de x86
Opinión de que es un resultado sorprendente
Pregunta sobre 86Box
En la captura de pantalla se muestran 31 GB de RAM
Enlace a una publicación anterior e información sobre Milk-V Pioneer
Opinión de que ojalá se pudiera hacer llegar retroalimentación a nivel ISA a RVI