1 pontos por GN⁺ 2024-08-28 | 1 comentários | Compartilhar no WhatsApp

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

 
GN⁺ 2024-08-28
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

    • O tamanho dos executáveis pode aumentar, então é preciso otimizar agressivamente para localidade de cache
    • Certos tipos de software podem ser mais adequados a CISC ou RISC, por exemplo jogos ou servidores web
  • 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

    • Pergunta adicional sobre se vetores clássicos podem ser úteis em GPUs no lugar de packed SIMD
  • Lembra o caso de um russo famoso que rodou Atomic Heart em um Elbrus 8S

    • O Elbrus tem um tradutor nativo, e Atomic Heart era jogável a 15-25 fps
  • Opinião de que o artigo é curto sobre o "básico"

    • São necessárias mais informações sobre como a ISA x86_64 foi implementada em um chip RISC-V
  • Opinião de que, no contexto de emulação de x86, o RISC-V é o menos expressivo

    • RISC foi explicado nas aulas de história da ciência da computação como um computador com conjunto de instruções simplificado
    • Muitos artigos e novos perfis do RISC-V sugerem que "são necessárias mais algumas instruções para equivalência funcional"
    • Embora o RISC-V seja uma alternativa conveniente a outras plataformas, fica a dúvida se o sonho do RISC morreu
  • Opinião de que o resultado é surpreendente

    • Foi necessário muito trabalho e, em alguns casos, parece que o RISC-V chegou ao limite
    • Instruções de bitset e scatter precisam ser adicionadas como extensões
  • Pergunta sobre o 86Box

    • Relembra a época em que usava um Amstrad PC1512 e compartilha a experiência de adicionar um hard card e expansão de memória
    • Tempos divertidos usando Borland TurboPascal e Zortech C
  • O screenshot mostra 31 GB de RAM

    • Parece estar usando muito mais RAM do que uma placa de desenvolvimento com especificação máxima
  • Link para uma postagem anterior e informações sobre o Milk-V Pioneer

    • Produto voltado a desenvolvimento nativo, como placa-mãe e workstation RISC-V de 64 núcleos
  • Opinião de que seria bom poder enviar feedback em nível de ISA para a RVI