1P by neo 3달전 | favorite | 댓글 1개

이야기

  • 1년 전 RV64 DynaRec은 Stardew Valley, World of Goo 같은 비교적 "쉽게 실행 가능한" 네이티브 Linux 게임만 실행할 수 있었음
  • 많은 새로운 x86_64 명령어가 RISC-V에 빠르게 구현되었지만, DynaRec에는 많은 버그가 남아 있었음
  • 당시에는 AMD 그래픽 카드를 연결할 수 있는 RISC-V 장치가 없었고, VisionFive 2와 LicheePi 4A의 IMG 통합 그래픽 카드는 OpenGL을 지원하지 않았음
  • gl4es를 사용하여 Stardew Valley 같은 게임을 실행할 수 있었지만, 더 복잡한 Linux 게임이나 Windows 게임에는 충분하지 않았음
  • Sophgo의 Milk-V Pioneer를 통해 AMD 그래픽 카드를 연결할 수 있게 되었고, 많은 RV64 DynaRec 버그를 수정하고 새로운 x86 명령어를 추가하여 The Witcher 3를 실행할 수 있었음

RISC-V DynaRec의 현재 상태

  • x86 명령어 세트는 매우 방대함
  • ARM64 백엔드는 1,600개 이상의 x86 명령어를 구현했지만, RV64 백엔드는 약 1,000개를 구현했음
  • SSE 명령어는 스칼라 명령어로 구현되었으며, AArch64는 Neon 확장, LoongArch64는 LSX 확장을 사용하여 성능이 떨어짐
  • RISC-V에는 벡터 확장인 RVV가 있으며, Milk-V Pioneer와 SpacemiT K1/M1 SoC가 이를 지원함
  • 최근 box64에 기본적인 RVV 지원을 추가하고 몇 가지 일반적인 SSE 명령어를 구현했지만, 아직 초기 단계임

x86 에뮬레이션을 위한 가장 필요한 명령어

  • x86 에뮬레이션에서 RISC-V는 AArch64와 LoongArch64에 비해 표현력이 부족함
  • RISC-V는 레지스터의 비트 범위를 선택하거나 다른 레지스터의 비트 범위에 삽입하는 명령어가 없음
  • 예를 들어, ADD AH, BL 명령어를 RISC-V에서 구현하려면 10개의 명령어가 필요함

16바이트 원자 명령어의 좌절

  • x86에는 LOCK 접두사가 있는 원자적 연산 명령어가 있으며, box64는 LR/SC 시퀀스를 사용하여 이를 에뮬레이트함
  • LOCK CMPXCHG16B 명령어는 16바이트 메모리를 비교하고 교환하는데, RISC-V에는 이에 상응하는 명령어가 없음
  • 따라서 이 명령어를 완벽하게 구현할 수 없으며, Unity 게임과 같은 많은 프로그램이 이 명령어를 사용함

결론

  • 여러 단점에도 불구하고 The Witcher 3는 box64에서 최대 15fps로 실행되며, 메인 메뉴에서는 풀 스피드로 실행됨

GN⁺의 정리

  • RISC-V에서 The Witcher 3를 실행한 것은 기술적 진보를 보여주는 중요한 사건임
  • RISC-V의 x86 에뮬레이션은 아직 다른 아키텍처에 비해 부족하지만, RVV와 같은 확장을 통해 개선될 가능성이 있음
  • RISC-V의 표현력 부족과 16바이트 원자 명령어의 부재는 주요한 문제점으로 남아 있음
  • 비슷한 기능을 가진 프로젝트로는 QEMU와 같은 에뮬레이터가 있음
Hacker News 의견
  • RISC-V를 타겟으로 소프트웨어를 개발할 때 소프트웨어 엔지니어가 다르게 해야 할 점에 대한 질문이 있음

    • 실행 파일 크기가 증가할 수 있어 캐시 지역성을 위해 적극적으로 최적화해야 함
    • 특정 소프트웨어 유형이 CISC 또는 RISC에 더 적합할 수 있음, 예를 들어 게임이나 웹 서버
  • 큰 RISC-V CPU 몇 개와 작은 RISC-V CPU 여러 개로 구현된 "GPU"를 탑재한 시스템이 나올 가능성에 대한 궁금증

    • 고전적인 벡터가 packed SIMD 대신 GPU에서 유용할 수 있는지에 대한 부가 질문
  • 유명한 러시아인이 Elbrus 8S에서 Atomic Heart를 실행한 사례를 상기시킴

    • Elbrus는 네이티브 번역기를 가지고 있으며, Atomic Heart는 15-25 fps로 플레이 가능했음
  • 기사가 "기본 사항"에 대해 짧다는 의견

    • x86_64 ISA를 RISC-V 칩에서 어떻게 구현했는지에 대한 추가 정보 필요
  • x86 에뮬레이션 맥락에서 RISC-V가 가장 표현력이 적다는 의견

    • RISC는 컴퓨터 과학 역사 수업에서 간소화된 명령어 집합 컴퓨터로 설명되었음
    • 많은 기사와 새로운 RISC-V 프로파일이 "기능 동등성을 위해 몇 가지 명령어가 더 필요하다"고 제안함
    • RISC-V가 다른 플랫폼에 대한 편리한 대안이지만, RISC의 꿈이 죽은 것인지에 대한 의문
  • 놀라운 결과라는 의견

    • 많은 작업이 필요했고, 일부 경우에는 RISC-V가 한계에 도달한 것 같음
    • 비트 집합 및 분산 명령어가 확장으로 추가되어야 함
  • 86Box에 대한 질문

    • Amstrad PC1512를 사용했던 시절을 회상하며, 하드 카드와 메모리 확장을 추가했던 경험을 공유함
    • Borland TurboPascal과 Zortech C를 사용했던 재미있는 시절
  • 스크린샷에 31GB의 램이 표시되어 있음

    • 최대 사양의 개발 보드보다 훨씬 많은 램을 사용하고 있는 것 같음
  • 이전 게시물 링크와 Milk-V Pioneer에 대한 정보

    • 64코어 RISC-V 마더보드와 워크스테이션으로 네이티브 개발을 위한 제품
  • RVI에 ISA 수준의 피드백을 전달할 수 있기를 바라는 의견