พวกเขาจัดการเพื่อเรียกใช้ Linux บนโปรแกรมจำลอง RISC-V บน VRChat

หลายวันก่อน ผลการทดลองออกแล้ว องค์กรบนพื้นฐานของการเปิดตัวของ เคอร์เนล Linux ภายในพื้นที่เสมือน 3 มิติ ของเกมผู้เล่นหลายคนออนไลน์

การทดลองนี้ เสร็จสิ้นบน VRChat ซึ่งช่วยให้โหลดโมเดล 3 มิติด้วย shaders ของตัวเองได้. ในการใช้แนวคิดที่คิดขึ้นนั้น โปรแกรมจำลองที่ใช้สถาปัตยกรรม RISC-V ได้ถูกสร้างขึ้นซึ่งทำงานบนฝั่ง GPU ในรูปแบบของพิกเซลเชดเดอร์

เกี่ยวกับโครงการ

อีมูเลเตอร์ขึ้นอยู่กับการใช้งานในภาษาซี ในทางกลับกันการสร้างนั้นใช้การพัฒนาตัวจำลอง riscv-rust ที่เรียบง่ายซึ่งได้รับการพัฒนาในภาษา Rust โค้ด C ที่เตรียมไว้จะถูกแปลเป็น Pixel Shader ในภาษา HLSL เหมาะสำหรับการโหลดลงใน VRChat

โปรแกรมจำลอง ให้การสนับสนุนอย่างเต็มที่สำหรับสถาปัตยกรรมชุดคำสั่ง rv32imasu หน่วยควบคุมหน่วยความจำ SV32 และชุดอุปกรณ์ต่อพ่วงขั้นต่ำ (UART และตัวจับเวลา) ความสามารถที่เตรียมไว้นั้นเพียงพอที่จะโหลดเคอร์เนล Linux 5.13.5 และสภาพแวดล้อมบรรทัดคำสั่งพื้นฐานของ BusyBox ซึ่งคุณสามารถโต้ตอบได้โดยตรงจากโลกเสมือน VRChat

ประมาณเดือนมีนาคม 2021 ฉันตัดสินใจเขียนโปรแกรมจำลองที่สามารถเรียกใช้เคอร์เนล Linux แบบเต็มใน VRChat เนื่องจากข้อจำกัดโดยธรรมชาติของแพลตฟอร์มนั้น เครื่องมือที่เลือกจึงต้องเป็นตัวสร้างเงา และหลังจากทำงานไม่กี่เดือน ตอนนี้ฉันภูมิใจที่จะแนะนำตัวจำลอง RISC-V CPU / SoC ตัวแรกของโลก (ที่ฉันรู้จัก) ใน HLSL pixel shader ที่สามารถทำงานได้ถึง 250 kHz (บน 2080 Ti) และ บูต Linux 5.13.5 พร้อมรองรับ MMU

อีมูเลเตอร์ถูกนำไปใช้ใน shader ในรูปแบบของพื้นผิวไดนามิกของตัวเอง (Unity Custom Render Texture) เสริมด้วยสคริปต์อุดรที่ให้ไว้สำหรับ VRChat ซึ่งใช้เพื่อควบคุมอีมูเลเตอร์ขณะรันไทม์

เนื้อหาหน่วยความจำหลักและสถานะตัวประมวลผลของระบบจำลองจะถูกบันทึกเป็นพื้นผิวที่มีขนาด 2048 × 2048 พิกเซล ดังนั้นจึงใช้งานโปรเซสเซอร์ที่จำลองที่ 250 kHz นอกจากลินุกซ์แล้ว Micropython ยังสามารถรันบนอีมูเลเตอร์ได้อีกด้วย

ในการใช้งาน Linux ฉันคิดว่าเราต้องการหน่วยความจำหลัก (RAM) อย่างน้อย 32 MiB แต่ขอให้ปลอดภัยและสร้าง 64 - ความแตกต่างด้านประสิทธิภาพจะไม่มาก และควรมี VRAM เพียงพอ

ในตอนแรก ความกังวลด้านประสิทธิภาพหลักคือความเร็วสัญญาณนาฬิกา นั่นคือจำนวนรอบของ CPU ที่สามารถดำเนินการได้ในเฟรมเดียว

ในการจัดระเบียบการจัดเก็บข้อมูล ยืนหยัดด้วยการสนับสนุนการอ่านและการเขียน เคล็ดลับที่เกี่ยวข้องกับการใช้วัตถุกล้องที่เชื่อมโยงกับพื้นที่สี่เหลี่ยมถูกนำมาใช้ สร้างโดย shader และกำหนดเอาต์พุตของพื้นผิวที่แสดงผลไปยังอินพุตของ shader ดังนั้น, พิกเซลใดๆ ที่เขียนขึ้นระหว่างการใช้งาน Pixel Shader สามารถอ่านได้โดยการประมวลผลเฟรมถัดไป

เมื่อใช้ตัวแบ่งพิกเซล อินสแตนซ์ที่แยกจากกันของตัวสร้างภาพจะทำงานแบบขนานกันสำหรับแต่ละพิกเซลในพื้นผิว

คุณลักษณะนี้ทำให้การใช้งานยุ่งยากขึ้นอย่างมาก และต้องการการประสานงานแยกกันของสถานะของระบบจำลองทั้งหมด และการเปรียบเทียบตำแหน่งของพิกเซลที่ประมวลผลกับสถานะของเนื้อหา CPU หรือ RAM ของระบบจำลองที่เข้ารหัสไว้ (แต่ละพิกเซลสามารถเข้ารหัสได้ 128 บิตของ ข้อมูล).

ในกรณีนี้ รหัส shader ต้องการการรวมการตรวจสอบจำนวนมาก เพื่อทำให้การใช้งาน Perl preprocessor perlpp ง่ายขึ้น

สำหรับผู้ที่เป็น สนใจสเปก มีการกล่าวถึงว่า:

  • รหัสอยู่บน GitHub
  • 64 MiB ของ RAM ลบสถานะ CPU ถูกเก็บไว้ในพื้นผิวรูปแบบจำนวนเต็ม 2048 × 2048 พิกเซล (128 bpp)
  • พื้นผิวการเรนเดอร์ที่กำหนดเองของ Unity พร้อมการสลับบัฟเฟอร์ช่วยให้สามารถเข้ารหัส / ถอดรหัสสถานะระหว่างเฟรม
  • pixel shader ใช้สำหรับการจำลองเนื่องจากการคำนวณและ VRChat ไม่รองรับ shader UAV

ในที่สุด หากคุณสนใจที่จะทราบข้อมูลเพิ่มเติมคุณสามารถตรวจสอบรายละเอียด ในลิงค์ต่อไปนี้.


แสดงความคิดเห็นของคุณ

อีเมล์ของคุณจะไม่ถูกเผยแพร่ ช่องที่ต้องการถูกทำเครื่องหมายด้วย *

*

*

  1. ผู้รับผิดชอบข้อมูล: Miguel ÁngelGatón
  2. วัตถุประสงค์ของข้อมูล: ควบคุมสแปมการจัดการความคิดเห็น
  3. ถูกต้องตามกฎหมาย: ความยินยอมของคุณ
  4. การสื่อสารข้อมูล: ข้อมูลจะไม่ถูกสื่อสารไปยังบุคคลที่สามยกเว้นตามข้อผูกพันทางกฎหมาย
  5. การจัดเก็บข้อมูล: ฐานข้อมูลที่โฮสต์โดย Occentus Networks (EU)
  6. สิทธิ์: คุณสามารถ จำกัด กู้คืนและลบข้อมูลของคุณได้ตลอดเวลา