Uspjeli su pokrenuti Linux na RISC-V emulatoru na VRChatu

Prije nekoliko dana objavljeni su rezultati eksperimenta organizacije na osnovu pokretanja Linux kernel unutar 3D virtuelnog prostora online igre za više igrača.

Ovaj eksperiment Napravljen je na VRChat-u koji vam omogućava da učitate 3D modele vlastitim shaderima. Za realizaciju zamišljene ideje kreiran je emulator baziran na RISC-V arhitekturi koji se izvršava na strani GPU-a u obliku pixel shadera.

O projektu

Emulator je baziran na implementaciji u jeziku C, čija je kreacija, zauzvrat, koristila razvoj minimalističkog emulatora riscv-rust koji je zauzvrat razvijen na Rust jeziku. Pripremljeni C kod je preveden u piksel shader na HLSL jeziku, pogodan za postavljanje na VRChat.

Emulator pruža punu podršku za arhitekturu skupa instrukcija rv32imasu, SV32 memorijska kontrolna jedinica i minimalni set perifernih uređaja (UART i tajmer). Pripremljene mogućnosti su dovoljne za učitavanje Linux kernela 5.13.5 i osnovnog okruženja komandne linije BusyBox, s kojim možete komunicirati direktno iz virtualnog svijeta VRChat-a.

Otprilike u martu 2021. odlučio sam da napišem emulator koji može pokrenuti cijeli Linux kernel u VRChat-u. Zbog inherentnih ograničenja te platforme, alat za izbor je morao biti shader. I nakon nekoliko mjeseci rada, sada s ponosom predstavljam prvi svjetski (za koji znam) RISC-V CPU/SoC emulator u HLSL piksel shaderu, koji može raditi do 250 kHz (na 2080 Ti) i pokrenite Linux 5.13.5 sa MMU podrškom.

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

Sadržaj glavne memorije i stanje procesora emuliranog sistema čuvaju se u obliku teksture veličine 2048x2048 piksela, tako da emulirani procesor radi na 250 kHz. Pored Linuxa, Micropython se može pokrenuti i na emulatoru.

Da bismo pokrenuli Linux, mislio sam da će nam trebati najmanje 32 MiB glavne memorije (RAM), ali budimo sigurni i uradimo 64: razlika u performansama neće biti velika i trebalo bi da ima dovoljno VRAM-a.

U početku, glavna briga za performanse bila je brzina takta. To jest, koliko CPU ciklusa može biti izvršeno na okviru.

Za organizaciju skladištenja podataka uporni sa podrškom za čitanje i pisanje, koristi se trik koji se odnosi na korištenje objekta Camera koji je povezan s pravokutnom površinom generira shader i usmjerava izlaz renderirane teksture na ulaz shadera. stoga, Svaki piksel napisan tokom izvršavanja pikselskog shadera može se pročitati prilikom renderiranja sljedećeg kadra.

Kada se primjenjuju pikselski shaderi, odvojena instanca shadera se pokreće paralelno za svaki piksel teksture.

Ova karakteristika značajno otežava implementaciju i zahtijeva odvojenu koordinaciju stanja cijelog emuliranog sistema i poređenje položaja obrađenog piksela sa stanjem CPU-a ili RAM sadržaja emuliranog sistema koji je kodiran u njemu (svaki piksel može kodirati 128 bitova informacija).

U ovom slučaju, shader kod zahtijeva uključivanje velikog broja provjera, da bi se pojednostavila implementacija kojih je korišten perl predprocesor perlpp.

Za one koji jesu zanimaju specifikacije spominje se da:

  • kod je na GitHubu
  • 64 MiB RAM-a minus CPU stanje pohranjeno je u teksturi cjelobrojnog formata od 2048x2048 piksela (128 bpp)
  • Unity prilagođena tekstura renderiranja sa zamjenom bafera omogućava stanje kodiranja/dekodiranja između okvira
  • piksel shader se koristi za emulaciju, jer računarski i UAV shaderi nisu podržani u VRChat-u

Konačno ako ste zainteresirani da saznate više o tome, možete provjeriti detalje Na sledećem linku.


Budite prvi koji komentarišete

Ostavite komentar

Vaša e-mail adresa neće biti objavljena. Obavezna polja su označena sa *

*

*

  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 obavezi.
  5. Pohrana podataka: Baza podataka koju hostuje Occentus Networks (EU)
  6. Prava: U bilo kojem trenutku možete ograničiti, oporaviti i izbrisati svoje podatke.