Họ đã quản lý để chạy Linux trên trình giả lập RISC-V trên VRChat

Vài ngày trước kết quả của một thử nghiệm đã được phát hành tổ chức dựa trên sự ra mắt của Nhân Linux bên trong không gian ảo 3D của một trò chơi nhiều người chơi trực tuyến.

Thử nghiệm này Nó được thực hiện trên VRChat cho phép tải các mô hình 3D bằng các trình tạo bóng của riêng chúng. Để thực hiện ý tưởng đã hình thành, một trình giả lập dựa trên kiến ​​trúc RISC-V đã được tạo ra, được thực thi ở phía GPU dưới dạng pixel shader.

Về dự án

Trình giả lập dựa trên việc triển khai bằng ngôn ngữ C, đến lượt nó, người sáng tạo đã sử dụng sự phát triển của trình giả lập riscv-gỉ tối giản, lần lượt được phát triển bằng ngôn ngữ Rust. Mã C đã chuẩn bị được dịch sang trình tạo bóng pixel bằng ngôn ngữ HLSL, phù hợp để tải vào VRChat.

Trình giả lập cung cấp hỗ trợ đầy đủ cho kiến ​​trúc tập lệnh rv32imasu, đơn vị điều khiển bộ nhớ SV32 và một bộ thiết bị ngoại vi tối thiểu (UART và bộ đếm thời gian). Các khả năng được chuẩn bị sẵn đủ để tải nhân Linux 5.13.5 và môi trường dòng lệnh cơ bản BusyBox, với đó bạn có thể tương tác trực tiếp từ thế giới ảo VRChat.

Vào khoảng tháng 2021 năm 250, tôi quyết định viết một trình giả lập có khả năng chạy một nhân Linux đầy đủ trong VRChat. Do những hạn chế cố hữu của nền tảng đó, công cụ được chọn phải là công cụ đổ bóng. Và sau một vài tháng làm việc, giờ đây, tôi tự hào giới thiệu trình giả lập CPU / SoC RISC-V đầu tiên trên thế giới (mà tôi biết) trong bộ đổ bóng pixel HLSL, có khả năng chạy lên đến 2080 kHz (trên 5.13.5 Ti) và khởi động Linux XNUMX với hỗ trợ MMU.

Trình giả lập được thực hiện trong bộ đổ bóng dưới dạng kết cấu động của riêng nó (Unity Custom Render Texture), được bổ sung bởi các tập lệnh Udon được cung cấp cho VRChat, được sử dụng để điều khiển trình mô phỏng trong thời gian chạy.

Nội dung bộ nhớ chính và trạng thái bộ xử lý của hệ thống giả lập được lưu dưới dạng kết cấu với kích thước 2048 × 2048 pixel, do đó vận hành bộ xử lý mô phỏng ở tần số 250 kHz. Bên cạnh Linux, Micropython cũng có thể chạy trên trình giả lập.

Để chạy Linux, tôi nghĩ rằng chúng ta sẽ cần ít nhất 32 MiB bộ nhớ chính (RAM), nhưng hãy an toàn và tạo ra 64 - sự khác biệt về hiệu suất sẽ không lớn và phải có đủ VRAM.

Lúc đầu, mối quan tâm chính về hiệu suất là tốc độ đồng hồ. Có nghĩa là, có bao nhiêu chu kỳ CPU có thể được thực hiện trong một khung.

Để tổ chức lưu trữ dữ liệu bền bỉ với hỗ trợ đọc và ghi, một thủ thuật liên quan đến việc sử dụng đối tượng Máy ảnh được liên kết với một khu vực hình chữ nhật được sử dụng được tạo ra bởi bộ đổ bóng và hướng đầu ra của kết cấu được kết xuất đến đầu vào của bộ đổ bóng. Vì vậy, Bất kỳ pixel nào được ghi trong quá trình thực thi pixel shader đều có thể được đọc bằng cách xử lý khung tiếp theo.

Khi áp dụng bộ đổ bóng pixel, một phiên bản riêng của bộ đổ bóng sẽ được kích hoạt song song cho mỗi pixel trong kết cấu.

Tính năng này làm phức tạp đáng kể việc triển khai và yêu cầu sự phối hợp riêng biệt về trạng thái của toàn bộ hệ thống được mô phỏng và so sánh vị trí của pixel được xử lý với trạng thái của CPU hoặc nội dung RAM của hệ thống được mô phỏng được mã hóa trong đó (mỗi pixel có thể mã hóa 128 bit của thông tin).

Trong trường hợp này, mã shader yêu cầu bao gồm một số lượng lớn các kiểm tra, để đơn giản hóa việc triển khai mà bộ xử lý tiền xử lý perlpp đã được sử dụng.

Dành cho những ai quan tâm đến các thông số kỹ thuật nó được đề cập rằng:

  • mã có trên GitHub
  • 64 MiB RAM trừ trạng thái CPU được lưu trữ trong kết cấu định dạng số nguyên 2048 × 2048 pixel (128 bpp)
  • Kết cấu hiển thị tùy chỉnh Unity với hoán đổi bộ đệm cho phép trạng thái mã hóa / giải mã giữa các khung hình
  • một trình tạo bóng pixel được sử dụng để mô phỏng dưới dạng máy tính và trình tạo bóng UAV không được VRChat hỗ trợ

Cuối cùng nếu bạn muốn biết thêm về nó, bạn có thể kiểm tra các chi tiết Trong liên kết sau đây.


Để lại bình luận của bạn

địa chỉ email của bạn sẽ không được công bố. Các trường bắt buộc được đánh dấu bằng *

*

*

  1. Chịu trách nhiệm về dữ liệu: Miguel Ángel Gatón
  2. Mục đích của dữ liệu: Kiểm soát SPAM, quản lý bình luận.
  3. Hợp pháp: Sự đồng ý của bạn
  4. Truyền thông dữ liệu: Dữ liệu sẽ không được thông báo cho các bên thứ ba trừ khi có nghĩa vụ pháp lý.
  5. Lưu trữ dữ liệu: Cơ sở dữ liệu do Occentus Networks (EU) lưu trữ
  6. Quyền: Bất cứ lúc nào bạn có thể giới hạn, khôi phục và xóa thông tin của mình.