Uspjeli su pokrenuti Linux na RISC-V emulatoru na VRChatu

Prije nekoliko dana objavljeni su rezultati eksperimenta organizacija temeljena na pokretanju Linux kernel unutar 3D virtualnog prostora online igre za više igrača.

Ovaj eksperiment To je učinjeno na VRChatu koji omogućuje učitavanje 3D modela vlastitim sjenčanjem. Kako bi se implementirala zamišljena ideja, stvoren je emulator temeljen na RISC-V arhitekturi koji se izvodi na GPU strani u obliku pixel shadera.

O projektu

Emulator se temelji na implementaciji na jeziku C, čije je stvaranje, pak, koristilo razvoj minimalističkog emulatora riscv-rust, koji je pak razvijen u jeziku Rust. Pripremljeni C kod preveden je u pixel shader na jeziku HLSL, prikladan za učitavanje u VRChat.

Emulator pruža potpunu podršku za arhitekturu skupa uputa rv32imasu, memorijska upravljačka jedinica SV32 i minimalni skup perifernih uređaja (UART i mjerač vremena). Pripremljene sposobnosti dovoljne su za učitavanje Linux kernela 5.13.5 i osnovnog okruženja naredbenog retka BusyBox -a, s kojim možete komunicirati izravno iz virtualnog svijeta VRChat.

Oko ožujka 2021. odlučio sam napisati emulator sposoban za pokretanje punog Linux kernela u VRChatu. Zbog inherentnih ograničenja te platforme, odabrani alat morao je biti zasjenjivač. I nakon nekoliko mjeseci rada, sada sam ponosan što predstavljam prvi svjetski RISC-V CPU / SoC emulator (za koji znam) u HLSL pixel shaderu, sposobnom za rad do 250 kHz (na 2080 Ti) i pokrenite Linux 5.13.5 s podrškom za MMU.

Emulator je implementiran u sjenilu u obliku vlastite dinamičke teksture (Unity Custom Render Texture), dopunjena Udon skriptama predviđenim za VRChat, koje se koriste za kontrolu emulatora u vrijeme izvođenja.

Glavni sadržaj memorije i stanje procesora emuliranog sustava spremaju se kao tekstura veličine 2048 × 2048 piksela, čime emulirani procesor radi na 250 kHz. Osim Linuxa, Micropython se može pokrenuti i na emulatoru.

Za pokretanje Linuxa mislio sam da će nam trebati najmanje 32 MiB glavne memorije (RAM), ali budimo sigurni i napravimo 64 - razlika u performansama neće biti velika i trebalo bi biti dovoljno VRAM -a.

U početku je glavna briga o performansama bila brzina takta. Odnosno, koliko se ciklusa procesora može izvesti u jednom okviru.

Za organizaciju pohrane podataka uporni s podrškom za čitanje i pisanje, koristi se trik vezan uz korištenje objekta Camera povezanog s pravokutnim područjem generira shader i usmjerava izlaz prikazane teksture na ulaz shader -a. Stoga, Bilo koji piksel napisan tijekom izvođenja pixel shadera može se pročitati obradom sljedećeg okvira.

Kad se primjenjuju sjenila za piksele, paralelno se pokreće zasebna instanca sjenila za svaki piksel u teksturi.

Ova značajka značajno otežava implementaciju i zahtijeva zasebnu koordinaciju stanja cijelog emuliranog sustava i usporedbu položaja obrađenog piksela sa stanjem CPU -a ili RAM -a emuliranog sustava kodiranog u njemu (svaki piksel može kodirati 128 bita informacija).

U ovom slučaju, kôd sjenčanja zahtijeva uključivanje velikog broja provjera, radi pojednostavljenja provedbe koje je korišten perl predprocesor perlpp.

Za one koji jesu zanimaju specifikacije spominje se da:

  • kod je na GitHubu
  • 64 MiB RAM -a minus stanje CPU -a pohranjeno je u teksturi cijelog formata 2048 × 2048 piksela (128 bpp)
  • Unity prilagođena tekstura renderiranja s zamjenom međuspremnika omogućuje kodiranje / dekodiranje stanja između okvira
  • za emulaciju se koristi pixel shader jer računalo i UAV shaders ne podržavaju VRChat

Konačno ako vas zanima više o tome, možete provjeriti detalje U sljedećem linku.


Ostavite svoj komentar

Vaša email adresa neće biti objavljen. Obavezna polja su označena s *

*

*

  1. Za podatke odgovoran: Miguel Ángel Gatón
  2. Svrha podataka: Kontrola neželjene pošte, upravljanje komentarima.
  3. Legitimacija: Vaš pristanak
  4. Komunikacija podataka: Podaci se neće dostavljati trećim stranama, osim po zakonskoj obvezi.
  5. Pohrana podataka: Baza podataka koju hostira Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.