Κατάφεραν να τρέξουν το Linux σε έναν εξομοιωτή RISC-V στο VRChat

Πριν από αρκετές ημέρες κυκλοφόρησαν τα αποτελέσματα ενός πειράματος οργάνωση που βασίζεται στην έναρξη του Πυρήνας Linux εντός τρισδιάστατου εικονικού χώρου ενός online παιχνιδιού για πολλούς παίκτες.

Αυτό το πείραμα Έγινε στο VRChat που επιτρέπει τη φόρτωση τρισδιάστατων μοντέλων με τα δικά τους σκίασηΤο Για την υλοποίηση της ιδέας, δημιουργήθηκε ένας εξομοιωτής βασισμένος στην αρχιτεκτονική RISC-V, ο οποίος εκτελείται στην πλευρά της GPU με τη μορφή ενός shader pixel.

Σχετικά με το έργο

Ο εξομοιωτής βασίζεται στην εφαρμογή στη γλώσσα C, η δημιουργία του οποίου, με τη σειρά του, χρησιμοποίησε τις εξελίξεις του μινιμαλιστικού εξομοιωτή riscv-rust, ο οποίος με τη σειρά του αναπτύσσεται στη γλώσσα Rust. Ο προετοιμασμένος κώδικας C μεταφράζεται σε shader pixel στη γλώσσα HLSL, κατάλληλο για φόρτωση σε VRChat.

Ο εξομοιωτής παρέχει πλήρη υποστήριξη για την αρχιτεκτονική συνόλου εντολών rv32imasu, τη μονάδα ελέγχου μνήμης SV32 και ένα ελάχιστο σύνολο περιφερειακών (UART και χρονόμετρο). Οι προετοιμασμένες δυνατότητες είναι αρκετές για τη φόρτωση του πυρήνα Linux 5.13.5 και του βασικού περιβάλλοντος γραμμής εντολών BusyBox, με το οποίο μπορείτε να αλληλεπιδράσετε απευθείας από τον εικονικό κόσμο VRChat.

Γύρω στον Μάρτιο του 2021, αποφάσισα να γράψω έναν εξομοιωτή ικανό να τρέξει έναν πλήρη πυρήνα Linux στο VRChat. Λόγω των εγγενών περιορισμών αυτής της πλατφόρμας, το επιλεγμένο εργαλείο έπρεπε να είναι ένα shader. Και μετά από μερικούς μήνες δουλειάς, είμαι τώρα περήφανος που παρουσιάζω τον πρώτο εξομοιωτή RISC-V CPU / SoC στον κόσμο (που γνωρίζω) σε ένα shader pixel HLSL, ικανό να τρέχει έως και 250 kHz (σε Ti 2080) και εκκίνηση Linux 5.13.5 με υποστήριξη MMU.

Ο εξομοιωτής υλοποιείται στο shader με τη μορφή της δικής του δυναμικής υφής (Unity Custom Render Texture), που συμπληρώνεται από τα σενάρια Udon που παρέχονται για το VRChat, τα οποία χρησιμοποιούνται για τον έλεγχο του εξομοιωτή κατά τη διάρκεια εκτέλεσης.

Το κύριο περιεχόμενο μνήμης και η κατάσταση επεξεργαστή του προσομοιωμένου συστήματος αποθηκεύονται ως υφή με μέγεθος 2048 × 2048 εικονοστοιχεία, λειτουργώντας έτσι τον προσομοιωμένο επεξεργαστή στα 250 kHz. Εκτός από το Linux, το Micropython μπορεί επίσης να τρέξει στον εξομοιωτή.

Για να τρέξουμε το Linux σκέφτηκα ότι θα χρειαστούμε τουλάχιστον 32 MiB κύριας μνήμης (RAM), αλλά ας είμαστε ασφαλείς και κάνουμε 64 - η διαφορά απόδοσης δεν θα είναι μεγάλη και θα πρέπει να υπάρχει αρκετό VRAM.

Στην αρχή, το κύριο μέλημα της απόδοσης ήταν η ταχύτητα του ρολογιού. Δηλαδή πόσοι κύκλοι CPU μπορούν να εκτελεστούν σε ένα πλαίσιο.

Για να οργανώσετε την αποθήκευση δεδομένων επίμονη με υποστήριξη για ανάγνωση και γραφή, χρησιμοποιείται ένα τέχνασμα που σχετίζεται με τη χρήση αντικειμένου κάμερας που συνδέεται με ορθογώνια περιοχή που δημιουργείται από τον σκίαστρο και κατευθύνει την έξοδο της μεταποιημένης υφής στην είσοδο του σκίασης. Επομένως, Οποιοδήποτε εικονοστοιχείο γραμμένο κατά την εκτέλεση ενός εικονοστοιχείου shader μπορεί να διαβαστεί με επεξεργασία του επόμενου πλαισίου.

Όταν εφαρμόζονται pixel shader, μια ξεχωριστή παρουσία του shader πυροδοτείται παράλληλα για κάθε pixel στην υφή.

Αυτή η δυνατότητα περιπλέκει σημαντικά την εφαρμογή και απαιτεί ξεχωριστό συντονισμό της κατάστασης ολόκληρου του προσομοιωμένου συστήματος και σύγκριση της θέσης του επεξεργασμένου εικονοστοιχείου με την κατάσταση του περιεχομένου της CPU ή RAM του προσομοιωμένου συστήματος που κωδικοποιείται σε αυτό (κάθε εικονοστοιχείο μπορεί να κωδικοποιήσει 128 bits πληροφορίες).

Σε αυτή την περίπτωση, ο κώδικας shader απαιτεί τη συμπερίληψη ενός μεγάλου αριθμού ελέγχων, για να απλοποιήσει την εφαρμογή των οποίων χρησιμοποιήθηκε το perlpp προεπεξεργαστή perlpp.

Για εκείνους που είναι ενδιαφέρεται για τις προδιαγραφές αναφέρεται ότι:

  • ο κωδικός είναι στο GitHub
  • 64 MiB μνήμης RAM μείον την κατάσταση της CPU αποθηκεύεται σε υφή ακεραίας μορφής 2048 × 2048 pixel (128 bpp)
  • Η προσαρμοσμένη απόδοση υφής Unity με την εναλλαγή buffer επιτρέπει την κωδικοποίηση / αποκωδικοποίηση της κατάστασης μεταξύ των πλαισίων
  • ένα shader pixel χρησιμοποιείται για προσομοίωση ως υπολογισμός και τα σκίαση UAV δεν υποστηρίζονται από το VRChat

Τελικά αν ενδιαφέρεστε να μάθετε περισσότερα γι 'αυτό, μπορείτε να ελέγξετε τις λεπτομέρειες Στον ακόλουθο σύνδεσμο.


Αφήστε το σχόλιό σας

Η διεύθυνση email σας δεν θα δημοσιευθεί. Τα υποχρεωτικά πεδία σημειώνονται με *

*

*

  1. Υπεύθυνος για τα δεδομένα: Miguel Ángel Gatón
  2. Σκοπός των δεδομένων: Έλεγχος SPAM, διαχείριση σχολίων.
  3. Νομιμοποίηση: Η συγκατάθεσή σας
  4. Κοινοποίηση των δεδομένων: Τα δεδομένα δεν θα κοινοποιούνται σε τρίτους, εκτός από νομική υποχρέωση.
  5. Αποθήκευση δεδομένων: Βάση δεδομένων που φιλοξενείται από τα δίκτυα Occentus (ΕΕ)
  6. Δικαιώματα: Ανά πάσα στιγμή μπορείτε να περιορίσετε, να ανακτήσετε και να διαγράψετε τις πληροφορίες σας.