História
- Há um ano, o DynaRec RV64 só conseguia rodar jogos nativos de Linux relativamente "fáceis de executar", como Stardew Valley e World of Goo
- Muitas novas instruções x86_64 foram implementadas rapidamente em RISC-V, mas ainda havia muitos bugs no DynaRec
- Na época, não existiam dispositivos RISC-V capazes de conectar placas de vídeo AMD, e as GPUs integradas IMG do VisionFive 2 e do LicheePi 4A não suportavam OpenGL
- Era possível rodar jogos como Stardew Valley usando gl4es, mas isso não era suficiente para jogos Linux mais complexos ou jogos de Windows
- Com o Milk-V Pioneer da Sophgo, passou a ser possível conectar placas de vídeo AMD, e após corrigir muitos bugs do DynaRec RV64 e adicionar novas instruções x86, foi possível rodar The Witcher 3
Estado atual do DynaRec para RISC-V
- O conjunto de instruções x86 é extremamente vasto
- O backend ARM64 implementou mais de 1.600 instruções x86, enquanto o backend RV64 implementou cerca de 1.000
- As instruções SSE foram implementadas como instruções escalares e, em AArch64, usa-se a extensão Neon, enquanto em LoongArch64 usa-se a extensão LSX, o que reduz o desempenho
- O RISC-V tem a extensão vetorial RVV, e o Milk-V Pioneer e os SoCs SpacemiT K1/M1 a suportam
- Recentemente, foi adicionado suporte básico a RVV no box64 e algumas instruções SSE comuns foram implementadas, mas isso ainda está em estágio inicial
Instruções mais necessárias para emulação de x86
- Na emulação de x86, o RISC-V tem menos expressividade do que AArch64 e LoongArch64
- O RISC-V não tem instruções para selecionar um intervalo de bits de um registrador ou inseri-lo no intervalo de bits de outro registrador
- Por exemplo, para implementar a instrução
ADD AH, BL em RISC-V são necessárias 10 instruções
A frustração das instruções atômicas de 16 bytes
- O x86 tem instruções de operações atômicas com o prefixo LOCK, e o box64 as emula usando sequências LR/SC
- A instrução
LOCK CMPXCHG16B compara e troca 16 bytes de memória, mas o RISC-V não possui uma instrução equivalente
- Por isso, não é possível implementar essa instrução perfeitamente, e muitos programas, como jogos em Unity, usam essa instrução
Conclusão
- Apesar de várias desvantagens, The Witcher 3 roda no box64 a até 15 fps, e no menu principal roda em velocidade total
Resumo do GN⁺
- Rodar The Witcher 3 em RISC-V é um marco importante que mostra avanço técnico
- A emulação de x86 em RISC-V ainda fica atrás de outras arquiteturas, mas pode melhorar com extensões como RVV
- A menor expressividade do RISC-V e a ausência de instruções atômicas de 16 bytes continuam sendo problemas importantes
- Um projeto com função semelhante é um emulador como o QEMU
1 comentários
Comentários do Hacker News
Há uma pergunta sobre o que engenheiros de software precisam fazer de forma diferente ao desenvolver software tendo o RISC-V como alvo
Curiosidade sobre a possibilidade de surgir um sistema equipado com uma "GPU" implementada com alguns grandes CPUs RISC-V e vários pequenos CPUs RISC-V
Lembra o caso de um russo famoso que rodou Atomic Heart em um Elbrus 8S
Opinião de que o artigo é curto sobre o "básico"
Opinião de que, no contexto de emulação de x86, o RISC-V é o menos expressivo
Opinião de que o resultado é surpreendente
Pergunta sobre o 86Box
O screenshot mostra 31 GB de RAM
Link para uma postagem anterior e informações sobre o Milk-V Pioneer
Opinião de que seria bom poder enviar feedback em nível de ISA para a RVI