สายด่วนบริการ
RISC-V เป็นหนึ่งในหัวข้อที่ร้อนแรงที่สุดในการประมวลผล เนื่องจากสถาปัตยกรรมชุดคำสั่ง (ISA) นี้ทำให้สามารถปรับแต่งได้อย่างกว้างขวางและเข้าใจง่าย นอกเหนือจากสิทธิประโยชน์แบบโอเพ่นซอร์สทั้งหมดแล้ว โดยไม่ต้องใช้ลิขสิทธิ์อีกด้วย มีแม้กระทั่งโครงการออกแบบ GPU เอนกประสงค์โดยใช้ RISC-V ISA และตอนนี้เรากำลังเห็นการย้ายไลบรารีซอฟต์แวร์ CUDA ของ Nvidia ไปยังแพลตฟอร์ม Vortex RISC-V GPGPU
CUDA (Computing Unified Device Architecture) ของ Nvidia แสดงถึงแพลตฟอร์มการประมวลผลที่เป็นเอกลักษณ์และ Application Programming Interface (API) ที่ทำงานบนกลุ่มผลิตภัณฑ์กราฟิกการ์ดของ Nvidia เมื่อเขียนแอปพลิเคชันเพื่อรองรับ CUDA ทันทีที่ระบบค้นพบ GPU ที่ใช้ CUDA ก็จะได้รับการเร่งโค้ด GPU จำนวนมาก
วันนี้ นักวิจัยได้ตรวจสอบวิธีเปิดใช้งานการสนับสนุนชุดเครื่องมือซอฟต์แวร์ CUDA ในโครงการ RISC-V GPGPU ที่เรียกว่า Vortex Vortex RISC-V GPGPU ได้รับการออกแบบมาเพื่อมอบ GPU RISC-V ทั่วทั้งระบบโดยยึดตาม RV32IMF ISA ซึ่งหมายความว่าคอร์ 32 บิตสามารถปรับขนาดการออกแบบ GPU ได้ตั้งแต่ 1 คอร์ไปจนถึง 32 คอร์ รองรับกราฟิก API OpenCL 1.2 และในปัจจุบันยังรองรับการทำงานของ CUDA บางอย่างด้วย
นักวิจัยอธิบายว่า: "...ในโครงการนี้ เราเสนอและสร้างไปป์ไลน์เพื่อรองรับการโยกย้าย CUDA แบบ end-to-end: ไปป์ไลน์ยอมรับซอร์สโค้ด CUDA เป็นอินพุตและดำเนินการบนสถาปัตยกรรม RISC-V GPU แบบขยาย ของเรา ไปป์ไลน์ประกอบด้วยหลายขั้นตอน: แปลซอร์สโค้ด CUDA เป็น NVVM IR, แปลง NVVM IR เป็น SPIR-V IR, ส่งต่อ SPIR-V IR เป็น POCL เพื่อรับไบนารี RISC-V และสุดท้ายดำเนินการกับสถาปัตยกรรมไฟล์ไบนารี RISC-V GPU แบบขยาย "
กระบวนการนี้แสดงให้เห็นในภาพด้านบน ซึ่งแสดงขั้นตอนทั้งหมดเพื่อให้ทำงานได้ กล่าวง่ายๆ ก็คือ ซอร์สโค้ด CUDA จะแสดงในรูปแบบการเป็นตัวแทนระดับกลาง (IR) ที่เรียกว่า NVVM IR โดยอิงตาม LLVM IR แบบโอเพ่นซอร์ส ต่อมาถูกแปลงเป็น Standard Portable Intermediate Representation (SPIR-V) IR ซึ่งส่งต่อไปยังการใช้งานโอเพ่นซอร์สแบบพกพาของมาตรฐาน OpenCL ที่เรียกว่า POCL เนื่องจาก Vortex รองรับ OpenCL จึงมีโค้ดที่รองรับและสามารถดำเนินการได้โดยไม่มีปัญหา
หากต้องการรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการที่ซับซ้อนนี้ คลิกด้านล่างเพื่ออ่านบทความต้นฉบับ ที่สำคัญ คุณต้องขอบคุณนักวิจัยเหล่านี้สำหรับความพยายามในการทำให้ CUDA ทำงานบน RISC-V GPGPU แม้ว่านี่จะเป็นเพียงก้าวเล็กๆ ในตอนนี้ แต่ก็อาจเป็นจุดเริ่มต้นของยุคที่ RISC-V ถูกนำมาใช้เพื่อเร่งความเร็วแอปพลิเคชันการประมวลผล เช่นเดียวกับกลุ่มผลิตภัณฑ์ GPU ของ Nvidia ในปัจจุบัน
การอ่านเพิ่มเติม: RISC-V สามารถเปลี่ยน GPU ได้หรือไม่
ใครก็ตามที่เคยศึกษาสถาปัตยกรรม GPU จะรู้ดีว่านี่คือโครงสร้าง SIMD ของโปรเซสเซอร์เวกเตอร์ เป็นโปรเซสเซอร์แบบขนานประสิทธิภาพสูงพิเศษที่ใช้กับทุกสิ่งตั้งแต่การจำลองและเกมที่ยอดเยี่ยมไปจนถึงการสอนหุ่นยนต์ถึงวิธีรับ AI และช่วยเหลือคนฉลาดในการควบคุมตลาดหุ้น มันยังตรวจสอบไวยากรณ์ของฉันในขณะที่ฉันเขียนสิ่งนี้ด้วย
แต่สนาม GPU กลายเป็นสนามส่วนตัว และงานภายในของมันทำโดย IP และ มีประสิทธิภาพ แหล่งข้อมูลจากนักพัฒนา เช่น AMD, Intel และ Nvidia จะเป็นอย่างไรหากมีชุดคำสั่งกราฟิกชุดใหม่ที่ออกแบบมาสำหรับกราฟิก 3 มิติและการประมวลผลสื่อ ก็คงมี
คำสั่งใหม่กำลังถูกสร้างขึ้นบนชุดคำสั่งเวกเตอร์พื้นฐาน RISC-V พวกเขาจะเพิ่มการรองรับประเภทข้อมูลเฉพาะกราฟใหม่เป็นส่วนขยายแบบเลเยอร์ตามจิตวิญญาณของ RISC-V ISA หลัก รองรับเวกเตอร์ คณิตศาสตร์ก่อนหน้า พิกเซลและพื้นผิว และการดำเนินการบัฟเฟอร์ Z/Frame อาจเป็น CPU-GPU ISA ที่หลอมรวม ไลบรารี - กลุ่ม RISC 3D เรียกมันว่า RV64X (รูปที่ 1) เนื่องจากคำสั่งจะมีความยาว 64 บิต (32 บิตจะไม่เพียงพอที่จะรองรับ ISA ที่แข็งแกร่ง)
กลุ่มระบุว่าแรงจูงใจและเป้าหมายของพวกเขาคือการสร้างการออกแบบขนาดเล็กที่มีประสิทธิภาพพร้อมความสามารถในการตั้งโปรแกรมและความสามารถในการขยายแบบกำหนดเอง ควรจัดให้มีการเป็นเจ้าของและการพัฒนาทรัพย์สินทางปัญญาที่มีต้นทุนต่ำ ไม่ใช่แข่งขันกับผลิตภัณฑ์เชิงพาณิชย์ สามารถนำไปใช้กับเป้าหมาย FPGA และ ASIC และเป็นโอเพ่นซอร์สฟรี การออกแบบดั้งเดิมมุ่งเป้าไปที่ไมโครคอนโทรลเลอร์พลังงานต่ำที่จะเข้ากันได้กับ Khronos Vulkan และรองรับ API อื่นๆ (OpenGL, DirectX ฯลฯ)
GPU + RISC-V
ทีมงานกล่าวว่า: "ไม่จำเป็นต้องใช้กลไกการเรียก RPC/IPC เพื่อส่งการเรียก 3D API ไปยังพื้นที่หน่วยความจำ CPU ที่ไม่ได้ใช้ หรือพื้นที่หน่วยความจำ CPU ที่ไม่ได้ใช้ไปยังพื้นที่หน่วยความจำ GPU และในทางกลับกัน "
ข้อดีของแนวทาง ISA CPU-GPU แบบ "หลอมรวม" คือไปป์ไลน์กราฟิกมาตรฐานสามารถใช้ในไมโครโค้ดได้ และสามารถรองรับเชเดอร์แบบกำหนดเองได้ สามารถรวมส่วนขยาย Ray Tracing ได้ด้วย
การออกแบบจะอยู่ในรูปแบบ Vblock (จากความพยายามของ Libre GPU):
- มันเหมือนกับ VLIW (แต่ไม่ใช่จริงๆ)
- บล็อกคำสั่งนำหน้าด้วยเครื่องหมายลงทะเบียนที่ให้บริบทเพิ่มเติมสำหรับคำสั่งแบบสเกลาร์ภายในบล็อกนั้น
- บล็อกย่อยประกอบด้วยความยาวเวกเตอร์ การหมุน การซ้อนทับเวกเตอร์/ความกว้าง และการทำนาย
- ทั้งหมดนี้ถูกเพิ่มเข้าไปใน opcodes แบบสเกลาร์!
- ไม่มี opcodes เวกเตอร์ (และไม่จำเป็น)
- ในบริบทเวกเตอร์ จะเป็นดังนี้: หาก opcode แบบสเกลาร์ใช้รีจิสเตอร์ และรีจิสเตอร์นั้นแสดงอยู่ในบริบทเวกเตอร์ โหมดเวกเตอร์จะถูกเปิดใช้งาน
- การเปิดใช้งานทำให้ระดับฮาร์ดแวร์ for loop ปล่อยการดำเนินการสเกลาร์ติดต่อกันหลายครั้ง (แทนที่จะเป็นเพียงการดำเนินการเดียว)
- ผู้นำไปใช้มีอิสระในการนำลูปไปใช้ในลักษณะใดก็ได้ที่ต้องการ - SIMD, หลายประเด็น, ดำเนินการครั้งเดียว; เกือบทุกอย่าง
เวกเตอร์ RV32-V จัดการการทำงานของเวกเตอร์ 8 บิต, 16 บิต หรือ 32 บิต/องค์ประกอบ ของ 2 ถึง 4 องค์ประกอบ นอกจากนี้ยังมีคำแนะนำเฉพาะสำหรับไปป์ไลน์การเรนเดอร์กราฟิก 3D ทั่วไปสำหรับจุด XYZW แบบคงที่และลอยตัวแบบ 64 บิตและ 128 บิต พิกเซล RGBA 8-, 16-, 24- และ 32 บิต; 8 บิต, 16 บิต UVW texels ต่อส่วนประกอบ; และการตั้งค่าแสงและวัสดุ (Ia, ka, Id, kd, Is, ks ฯลฯ)
เวกเตอร์แอตทริบิวต์แสดงเป็นเมทริกซ์ขนาด 4×4 ระบบจะรองรับเมทริกซ์ 2×2 และ 3×3 โดยกำเนิด การสนับสนุนเวกเตอร์ยังอาจเหมาะสำหรับการจำลองเชิงตัวเลขโดยใช้ประเภทข้อมูลจำนวนเต็ม 8 บิตทั่วไปในแอปพลิเคชัน AI และการเรียนรู้ของเครื่อง
สามารถรวมแรสเตอร์ไรเซอร์แบบกำหนดเอง เช่น เส้นโค้ง พื้นผิว SubDiv และแพตช์ในการออกแบบได้ วิธีนี้ยังช่วยให้สามารถรวมขั้นตอนไปป์ไลน์ที่กำหนดเอง ขั้นตอนเรขาคณิต/พิกเซล/เฟรมบัฟเฟอร์ที่กำหนดเอง ตัวแบ่งย่อยที่กำหนดเอง และการดำเนินการสร้างอินสแตนซ์ที่กำหนดเองได้
RV64X
-
คำแนะนำ/แคชข้อมูล SRAM (32 kB)
-
ไมโครโค้ด SRAM (8 kB)
-
ตัวถอดรหัสคำสั่งฟังก์ชั่นคู่ (เดินสายสำหรับ RV32V และ X ตัวถอดรหัสคำสั่งไมโครโค้ดสำหรับ ISA แบบกำหนดเอง)
-
Quad-เวกเตอร์ ALU (32 บิต/ALU-คงที่/ลอย)
-
ไฟล์รีจิสเตอร์ 136 บิต (องค์ประกอบ 1k)
-
หน่วยฟังก์ชั่นพิเศษ
-
หน่วยพื้นผิว
-
framebuffer ท้องถิ่นที่กำหนดค่าได้
RV64X เป็นสถาปัตยกรรมที่ปรับขนาดได้ (รูปที่ 2) วิธีการฟิวชันเป็นวิธีใหม่ เช่นเดียวกับการใช้รีจิสเตอร์ที่กำหนดค่าได้สำหรับชนิดข้อมูลที่กำหนดเอง ไมโครโค้ดที่ใช้ SRAM กำหนดโดยผู้ใช้สามารถใช้เพื่อปรับใช้ส่วนขยาย เช่น ระยะแรสเตอร์ไรเซอร์ที่กำหนดเอง การติดตามรังสี แมชชีนวิชัน และการเรียนรู้ของเครื่อง การออกแบบเดียวสามารถนำไปใช้กับไมโครคอนโทรลเลอร์กราฟิกแบบสแตนด์อโลนหรือโซลูชันแบบมัลติคอร์พร้อมหน่วยเชเดอร์ที่ปรับขนาดได้
ส่วนขยายกราฟิกสำหรับ RISC-V ระบุถึงความสามารถในการปรับขนาดและการพูดได้หลายภาษา สิ่งนี้ทำให้เกิดกรณีการใช้งานในระดับที่สูงขึ้นซึ่งนำไปสู่นวัตกรรมที่มากขึ้น
อะไรต่อไป
ข้อมูลจำเพาะของ RV64X ยังอยู่ในช่วงเริ่มต้นของการพัฒนาและอาจมีการเปลี่ยนแปลงได้ กระดานสนทนากำลังถูกสร้างขึ้น เป้าหมายทันทีคือการสร้างตัวอย่างการใช้งานโดยใช้ตัวจำลองชุดคำสั่ง ซึ่งจะเปิดขึ้นโดยใช้การใช้งาน Source IP และ FPGA ของ IP แบบกำหนดเองที่ออกแบบมาเป็นโครงการโอเพ่นซอร์ส
ข้อจำกัดความรับผิดชอบ: บทความนี้ทำซ้ำจาก "การสังเกตอุตสาหกรรมเซมิคอนดักเตอร์" บทความนี้เป็นเพียงความคิดเห็นส่วนตัวของผู้เขียน ไม่ใช่ความคิดเห็นของ Sac Micro และอุตสาหกรรม สำหรับการพิมพ์ซ้ำและแบ่งปัน การสนับสนุน เพื่อปกป้องสิทธิ์ในทรัพย์สินทางปัญญา โปรดระบุแหล่งที่มาดั้งเดิมและผู้แต่งสำหรับการพิมพ์ซ้ำ หากมีการละเมิดใด ๆ โปรดติดต่อเราเพื่อลบออก




粤公网安备44030002007346号