1 điểm bởi GN⁺ 2024-08-28 | 1 bình luận | Chia sẻ qua WhatsApp

Câu chuyện

  • Một năm trước, RV64 DynaRec chỉ có thể chạy các game Linux native tương đối “dễ chạy” như Stardew Valley và World of Goo
  • Nhiều lệnh x86_64 mới đã nhanh chóng được triển khai cho RISC-V, nhưng DynaRec vẫn còn nhiều lỗi
  • Khi đó chưa có thiết bị RISC-V nào có thể gắn card đồ họa AMD, và GPU tích hợp IMG trên VisionFive 2 và LicheePi 4A cũng không hỗ trợ OpenGL
  • Có thể dùng gl4es để chạy các game như Stardew Valley, nhưng như vậy vẫn chưa đủ cho các game Linux phức tạp hơn hoặc game Windows
  • Nhờ Sophgo Milk-V Pioneer có thể gắn card đồ họa AMD, đồng thời sửa được nhiều lỗi RV64 DynaRec và bổ sung các lệnh x86 mới, nên đã có thể chạy The Witcher 3

Tình trạng hiện tại của RISC-V DynaRec

  • Bộ lệnh x86 là cực kỳ đồ sộ
  • Backend ARM64 đã triển khai hơn 1.600 lệnh x86, trong khi backend RV64 mới triển khai khoảng 1.000 lệnh
  • Các lệnh SSE được triển khai bằng lệnh vô hướng, còn AArch64 dùng phần mở rộng Neon và LoongArch64 dùng phần mở rộng LSX nên hiệu năng bị giảm
  • RISC-V có phần mở rộng vector là RVV, và Milk-V Pioneer cùng SoC SpacemiT K1/M1 đều hỗ trợ nó
  • Gần đây box64 đã thêm hỗ trợ RVV cơ bản và triển khai một số lệnh SSE phổ biến, nhưng vẫn còn ở giai đoạn đầu

Những lệnh cần thiết nhất cho giả lập x86

  • Trong giả lập x86, RISC-V kém biểu đạt hơn so với AArch64 và LoongArch64
  • RISC-V không có lệnh để chọn một dải bit trong thanh ghi hoặc chèn vào một dải bit của thanh ghi khác
  • Ví dụ, để triển khai lệnh ADD AH, BL trên RISC-V thì cần tới 10 lệnh

Sự bế tắc của lệnh nguyên tử 16 byte

  • x86 có các lệnh toán tử nguyên tử với tiền tố LOCK, và box64 giả lập chúng bằng chuỗi LR/SC
  • Lệnh LOCK CMPXCHG16B dùng để so sánh và trao đổi 16 byte bộ nhớ, nhưng RISC-V không có lệnh tương ứng
  • Vì vậy không thể triển khai đầy đủ lệnh này, trong khi nhiều chương trình như game Unity lại sử dụng nó

Kết luận

  • Dù có nhiều nhược điểm, The Witcher 3 vẫn chạy được trên box64 với tốc độ tối đa 15fps, và ở menu chính thì chạy với tốc độ đầy đủ

Tóm tắt của GN⁺

  • Việc chạy được The Witcher 3 trên RISC-V là một cột mốc quan trọng cho thấy tiến bộ kỹ thuật
  • Giả lập x86 trên RISC-V vẫn còn thua kém các kiến trúc khác, nhưng có khả năng được cải thiện nhờ các phần mở rộng như RVV
  • Sự thiếu biểu đạt của RISC-V và việc không có lệnh nguyên tử 16 byte vẫn là những vấn đề lớn
  • Dự án có chức năng tương tự gồm các trình giả lập như QEMU

1 bình luận

 
GN⁺ 2024-08-28
Ý kiến trên Hacker News
  • Có câu hỏi về những điểm mà kỹ sư phần mềm cần làm khác đi khi phát triển phần mềm nhắm tới RISC-V

    • Kích thước tệp thực thi có thể tăng lên, nên cần tối ưu hóa tích cực để cải thiện tính cục bộ của cache
    • Một số loại phần mềm có thể phù hợp hơn với CISC hoặc RISC, ví dụ như game hoặc web server
  • Có thắc mắc về khả năng xuất hiện các hệ thống trang bị một “GPU” được hiện thực bằng vài CPU RISC-V lớn và nhiều CPU RISC-V nhỏ

    • Kèm theo đó là câu hỏi liệu vector kiểu cổ điển có thể hữu ích trên GPU hơn packed SIMD hay không
  • Nhắc lại trường hợp một người Nga nổi tiếng đã chạy Atomic Heart trên Elbrus 8S

    • Elbrus có trình biên dịch dịch mã native, và Atomic Heart có thể chơi được ở mức 15-25 fps
  • Có ý kiến cho rằng bài viết nói quá ngắn về “những điều cơ bản”

    • Cần thêm thông tin về cách ISA x86_64 đã được hiện thực trên chip RISC-V
  • Có ý kiến cho rằng trong bối cảnh giả lập x86, RISC-V là kiến trúc có khả năng biểu đạt kém nhất

    • RISC từng được giải thích trong các lớp lịch sử khoa học máy tính là máy tính tập lệnh rút gọn
    • Nhiều bài viết và các profile RISC-V mới đề xuất rằng “cần thêm một vài lệnh để đạt được tính tương đương về chức năng”
    • Dù RISC-V là một lựa chọn thay thế thuận tiện cho các nền tảng khác, vẫn có câu hỏi liệu giấc mơ RISC đã chết hay chưa
  • Có ý kiến cho rằng đây là một kết quả đáng kinh ngạc

    • Đã cần rất nhiều công sức, và trong một số trường hợp có vẻ như RISC-V đã chạm tới giới hạn
    • Các lệnh bit set và scatter cần được bổ sung dưới dạng extension
  • Có câu hỏi về 86Box

    • Người viết hồi tưởng thời từng dùng Amstrad PC1512, chia sẻ trải nghiệm gắn thêm hard card và mở rộng bộ nhớ
    • Đó là thời kỳ thú vị khi dùng Borland TurboPascal và Zortech C
  • Ảnh chụp màn hình hiển thị 31GB RAM

    • Có vẻ như hệ thống đang dùng nhiều RAM hơn rất nhiều so với bo mạch phát triển cấu hình tối đa
  • Có liên kết đến bài đăng trước đó và thông tin về Milk-V Pioneer

    • Đây là bo mạch chủ và workstation RISC-V 64 lõi dành cho phát triển native
  • Có ý kiến hy vọng có thể gửi phản hồi ở cấp độ ISA cho RVI