โครงการ Rust CUDA กลับมาเริ่มใหม่หลังจากไม่มีการพัฒนาเป็นเวลาหลายปี เผชิญการแข่งขันจาก Cudarc

BigGo Editorial Team
โครงการ Rust CUDA กลับมาเริ่มใหม่หลังจากไม่มีการพัฒนาเป็นเวลาหลายปี เผชิญการแข่งขันจาก Cudarc

โครงการ Rust CUDA ซึ่งเป็นโครงการที่มีความทะเยอทะยานที่มุ่งทำให้ Rust เป็นภาษาระดับที่หนึ่งสำหรับการประมวลผลด้วย GPU โดยใช้ชุดเครื่องมือ CUDA ของ NVIDIA ได้กลับมาเริ่มต้นใหม่หลังจากที่ไม่มีการพัฒนาเป็นเวลาหลายปี การพัฒนานี้เกิดขึ้นในช่วงเวลาที่ชุมชน Rust กำลังมองหาโซลูชันที่เชื่อถือได้สำหรับการเขียนโปรแกรม GPU โดยมีผลลัพธ์ที่หลากหลายจากโครงการต่างๆ

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

ประวัติโครงการและสถานะปัจจุบัน

โครงการ Rust CUDA มีประวัติที่ไม่ราบรื่นตามความเห็นของผู้ใช้ เป็นเวลาหลายปีที่โครงการนี้อยู่ในสถานะที่ผู้ใช้อธิบายว่าใช้งานไม่ได้และไม่มีการบำรุงรักษา โดยต้องใช้เวอร์ชันเฉพาะของทั้งคอมไพเลอร์ Rust (rustc) และ CUDA ที่เก่าไปหลายปีจึงจะทำงานได้อย่างถูกต้อง การประกาศเริ่มต้นโครงการใหม่ล่าสุดเป็นสัญญาณของความพยายามที่จะฟื้นฟูโครงการ แม้ว่าดูเหมือนจะยังไม่มีการเผยแพร่อย่างเป็นทางการที่ทำงานกับเวอร์ชันปัจจุบันของ Rust และ CUDA

ช่วงเวลาที่ไม่มีการพัฒนานี้ได้สร้างช่องว่างในระบบนิเวศที่โครงการอื่นๆ พยายามเติมเต็ม โครงสร้างของโครงการนี้ค่อนข้างกว้าง ครอบคลุมหลาย crate รวมถึง rustc_codegen_nvvm (แบ็กเอนด์ของ rustc ที่มุ่งเป้าไปที่ NVVM IR), cuda_std (สำหรับฟังก์ชันฝั่ง GPU), cudnn (สำหรับเครือข่ายประสาทเทียมแบบลึก) และ cust (สำหรับคุณสมบัติ CUDA ฝั่ง CPU) เป็นต้น

การแข่งขันจาก Cudarc

ในขณะที่โครงการ Rust CUDA ไม่มีการพัฒนา ไลบรารีอื่นที่เรียกว่า Cudarc ได้รับความนิยมอย่างมากในชุมชน ผู้ใช้หลายคนรายงานว่าใช้ Cudarc ในสภาพแวดล้อมการทำงานอย่างประสบความสำเร็จ โดยชื่นชมความเข้ากันได้กับเวอร์ชันล่าสุดของ Rust และ CUDA

สรุป จากผู้ที่ใช้ CUDA บน Rust ในหลายโครงการ: ไลบรารี Cudarc มีการบำรุงรักษาอย่างต่อเนื่อง และทำงานได้ดี อย่างไรก็ตาม มันไม่อนุญาตให้คุณแชร์โครงสร้างข้อมูลระหว่างโฮสต์และอุปกรณ์ คุณจะต้อง [เข้า/ถอด]รหัสเป็นสตรีมไบต์ โดยใช้ฟังก์ชันที่ไลบรารีจัดเตรียมไว้ ทำงานได้กับเวอร์ชัน CUDA ใดๆ (อย่างน้อยในช่วงไม่กี่ปีที่ผ่านมา) และ GPU

ความแตกต่างที่สำคัญดูเหมือนจะเป็นว่า Cudarc ต้องการการแปลงข้อมูลระหว่างโครงสร้างข้อมูลของโฮสต์และอุปกรณ์ ในขณะที่โครงการ Rust CUDA มีเป้าหมายที่จะอนุญาตให้ใช้ประเภทข้อมูลร่วมกันระหว่างโฮสต์และ GPU ความแตกต่างนี้แสดงถึงการแลกเปลี่ยนพื้นฐานระหว่างความสามารถในการใช้งานทันทีและประสบการณ์การเขียนโปรแกรมที่ราบรื่นมากขึ้น

ความกังวลเรื่องความเป็นอิสระของแพลตฟอร์ม

การถกเถียงที่สำคัญภายในชุมชนมุ่งเน้นไปที่การที่โครงการมุ่งเน้นเฉพาะกับ CUDA ของ NVIDIA ผู้ใช้บางคนโต้แย้งว่าการผูกการเขียนโปรแกรม GPU ของ Rust กับเทคโนโลยีของผู้ผลิตรายเดียวสร้างทางตันที่จำกัดการนำไปใช้ในแพลตฟอร์มฮาร์ดแวร์ที่หลากหลาย

ผู้สนับสนุน CUDA ชี้ให้เห็นถึงระบบนิเวศของเครื่องมือที่เหนือกว่า รวมถึงการรวมเข้ากับ IDE การดีบักแบบกราฟิก และไลบรารีที่ครอบคลุม พวกเขาโต้แย้งว่าทางเลือกอื่นเช่น OpenCL, Vulkan compute shaders และ SYCL ขาดการสนับสนุนหลายภาษาและประสบการณ์ของนักพัฒนาที่ CUDA มอบให้

คนอื่นๆ สนับสนุนแนวทางที่เป็นอิสระจากแพลตฟอร์มซึ่งจะทำงานบนฮาร์ดแวร์ของ NVIDIA, AMD, Intel และ Apple โดยแนะนำว่า Rust ควรมุ่งเป้าไปที่การแสดงผลขั้นกลางที่สามารถคอมไพล์ไปยังสถาปัตยกรรม GPU ต่างๆ ได้ แนวทางนี้จะให้ความสำคัญกับความเข้ากันได้ข้ามแพลตฟอร์มมากกว่าการปรับแต่งเฉพาะทางที่ CUDA นำเสนอ

ตัวเลือกสำคัญสำหรับการประมวลผล GPU ด้วย Rust

  • Rust CUDA Project

    • สถานะ: เพิ่งได้รับการฟื้นฟูหลังจากไม่มีการพัฒนาเป็นเวลาหลายปี
    • เป้าหมาย: อนุญาตให้ใช้โครงสร้างข้อมูลร่วมกันระหว่างโฮสต์และ GPU
    • องค์ประกอบ: rustc_codegen_nvvm, cuda_std, cudnn, cust, gpu_rand, optix
    • ใบอนุญาต: ใบอนุญาตคู่ภายใต้ Apache 2.0 และ MIT
  • Cudarc

    • สถานะ: มีการดูแลรักษาอย่างต่อเนื่อง
    • ความเข้ากันได้: ทำงานร่วมกับเวอร์ชันล่าสุดของ Rust และ CUDA
    • ข้อจำกัด: ต้องมีการแปลงข้อมูลระหว่างโฮสต์และอุปกรณ์
    • GitHub: https://github.com/coreylowman/cudarc
  • โปรเจกต์ที่เกี่ยวข้องอื่นๆ

    • rust-gpu: แบ็กเอนด์คอมไพเลอร์สำหรับคอมไพล์ Rust เป็น SPIR-V สำหรับเชดเดอร์
    • glassful (2016): ส่วนย่อยของ Rust ที่คอมไพล์เป็น GLSL
    • inspirv-rust (2017): คอมไพเลอร์ทดลองสำหรับแปลง Rust MIR เป็น SPIR-V
    • nvptx (2018): ใช้แบ็กเอนด์ LLVM PTX
    • accel (2020): ไลบรารีระดับสูงที่ใช้กลไก nvptx
    • risl (2020): คอมไพเลอร์ทดลองสำหรับแปลง Rust เป็น SPIR-V

การนำไปใช้ในอุตสาหกรรมและแนวโน้มในอนาคต

การสนทนาในชุมชนเผยให้เห็นข้อมูลเชิงลึกที่น่าสนใจเกี่ยวกับความสนใจที่อาจมีของ NVIDIA ใน Rust ผู้ใช้รายหนึ่งกล่าวถึงการสนทนากับคนจากทีม CUDA Core Compute Libraries ที่บ่งชี้ว่าในอีก 5 ปีข้างหน้า NVIDIA อาจสนับสนุน Rust เป็นภาษาสำหรับเขียนโปรแกรม GPU ของ CUDA อีกคนหนึ่งสังเกตว่า NVIDIA กำลังใช้ Rust ใน Dynamo ซึ่งเป็นเฟรมเวิร์กการอนุมานที่มีปริมาณงานสูงและมีความหน่วงเวลาต่ำของพวกเขา แม้ว่า API สาธารณะจะใช้ Python เป็นพื้นฐาน

คำถามที่ว่าทำไม NVIDIA ไม่ได้ลงทุนในระบบนิเวศ Rust มากขึ้นยังคงเปิดกว้าง โดยบางคนแนะนำว่าบริษัทอาจกำลังรอดูมูลค่าทางธุรกิจที่เพียงพอก่อนที่จะทุ่มเททรัพยากร

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

สำหรับนักพัฒนาที่ต้องการความสามารถในการคำนวณด้วย GPU ใน Rust ในวันนี้ ความเห็นร่วมของชุมชนดูเหมือนจะสนับสนุน Cudarc สำหรับการประยุกต์ใช้งานจริง ในขณะที่ยังคงจับตาดูความคืบหน้าของโครงการ Rust CUDA ที่มีเป้าหมายที่ทะเยอทะยานมากขึ้นในการรวมโฮสต์และอุปกรณ์อย่างราบรื่น

อ้างอิง: The Rust CUDA Project