หน้าแรก / บทความ / Hardware
Hardware วิเคราะห์จากสเปค + รีวิว

วิเคราะห์และรีวิว: Nvidia ประกาศรองรับการเขียนโปรแกรม GPU ด้วย Rust โดยตรง

วิเคราะห์สองเส้นทางที่ Nvidia เปิดให้ Rust เขียนโค้ด GPU ได้โดยตรง พร้อมประเมินความพร้อมใช้งานจริงเทียบกับ CUDA C++

วิเคราะห์และรีวิว: Nvidia ประกาศรองรับการเขียนโปรแกรม GPU ด้วย Rust โดยตรง

Nvidia ประกาศเปิดทางให้ Rust เขียนโค้ดรันบน GPU ได้โดยตรง เป็นตัวเลือกใหม่ที่อยู่ข้าง CUDA C++ และ CUDA Python ที่ใช้กันมานาน โดยบริษัทระบุว่าจะพัฒนา CUDA Rust ต่อเนื่องไปจนถึงปี 2027 และหลังจากนั้น

สิ่งที่ต่างจากข่าวลือทั่วไปคือ Nvidia ไม่ได้ปล่อยเครื่องมือตัวเดียว แต่แบ่งออกเป็นสองเส้นทางที่เป้าหมายการใช้งานต่างกันชัดเจน

สองเส้นทางที่ Nvidia เปิดให้ Rust เข้าถึง GPU

เส้นทางแรกชื่อ cuda-oxide เจาะกลุ่มที่อยากควบคุมฮาร์ดแวร์ใกล้ชิดแบบเดียวกับเขียน CUDA C++ ส่วนเส้นทางที่สองชื่อ cutile-rs เน้นให้เขียนง่ายขึ้นด้วยการทำงานระดับสูงกว่า ทั้งสองแบบไม่ได้แข่งกันเอง แต่ตอบโจทย์คนละกลุ่มนักพัฒนา

เซิร์ฟเวอร์ GPU ของ Nvidia ที่ใช้รันงานประมวลผลประสิทธิภาพสูง

cuda-oxide: คอมไพล์ตรงลง PTX แบบเดียวกับ CUDA C++

cuda-oxide เป็น backend คอมไพเลอร์ของ rustc ที่แปลงโค้ด kernel ไปเป็น PTX โดยตรง ต้องใช้ Rust nightly เวอร์ชันที่ pin ไว้คู่กับ LLVM และมีระบบ DisjointSlice กับ launch contracts ช่วยตรวจการเข้าถึงหน่วยความจำตั้งแต่ตอนคอมไพล์

ตอนนี้ cuda-oxide ยังอยู่ในสถานะ early alpha เหมาะกับทีมที่อยากทดลองแนวทางนี้ก่อน มากกว่าจะเอาไปใช้ในระบบ production ทันที

cutile-rs: เขียนง่ายกว่าและมีคนใช้งานจริงแล้ว

cutile-rs ให้เขียนโค้ดในระดับ tile operation แทนที่จะสั่งงาน thread ทีละตัว แล้วให้ระบบ JIT-compile ผ่าน CUDA Tile IR ให้เอง จุดต่างสำคัญคือ cutile-rs รันบน Rust เสถียร (stable) ตั้งแต่เวอร์ชัน 1.89 ขึ้นไป ไม่ต้องพึ่ง nightly เหมือน cuda-oxide

cutile-rs เผยแพร่บน crates.io แล้ว และมีการใช้งานจริงนอก Nvidia อย่าง Grout ซึ่งเป็น inference engine ของ HuggingFace และโปรเจกต์ mistral.rs

สเปกที่ต้องมีก่อนเริ่มใช้งานจริง

ทั้งสองเส้นทางต้องการ GPU ที่มี compute capability ตั้งแต่ 8.0 ขึ้นไป และรันบน Linux เท่านั้นในตอนนี้ ฝั่ง cuda-oxide ต้องใช้ CUDA toolkit 12.x ขึ้นไป ส่วน cutile-rs ต้องการ CUDA toolkit 13.3 ขึ้นไป

เงื่อนไขเหล่านี้หมายความว่าทีมที่ใช้ GPU รุ่นเก่ากว่านี้หรือทำงานบน Windows โดยตรง ยังต้องรอหรือหาทางอ้อมก่อนจะทดลองใช้งานได้

Factor CUDA C++cuda-oxide (SIMT)cutile-rs (Tile)
ระดับการควบคุมฮาร์ดแวร์ ควบคุมละเอียดถึงระดับ threadควบคุมละเอียดใกล้เคียงกันทำงานระดับ tile ที่สูงกว่า
ความปลอดภัยของหน่วยความจำ ต้องจัดการเองทั้งหมดมี DisjointSlice ช่วยตรวจตอนคอมไพล์ออกแบบให้เขียนผิดพลาดยากขึ้น
Rust toolchain ที่ต้องใช้ ไม่เกี่ยวข้องnightly ที่ pin เวอร์ชันไว้stable ตั้งแต่ 1.89 ขึ้นไป
ความพร้อมใช้งานจริง ใช้งานหลักในอุตสาหกรรมมานานearly alphaเผยแพร่บน crates.io แล้ว มีใช้จริง

ตารางนี้แสดงให้เห็นว่า cuda-oxide เหมาะกับทีมที่อยากได้การควบคุมระดับต่ำแบบ CUDA C++ แต่ต้องยอมรับความไม่นิ่งของ early alpha ส่วน cutile-rs เหมาะกับงานที่อยากเริ่มใช้จริงได้เร็วกว่า โดยแลกกับการควบคุมระดับ thread ที่ละเอียดน้อยลง

การ์ดจอ Nvidia GeForce ซีรีส์ RTX ตัวอย่างฮาร์ดแวร์ที่ใช้รัน CUDA

เทียบกับ AMD ROCm และ Intel oneAPI

CUDA Rust ยังผูกกับฮาร์ดแวร์ Nvidia เท่านั้น ต่างจาก AMD และ Intel ที่มีเส้นทางของตัวเองสำหรับดึงภาษาระดับสูงมาเขียน GPU

Factor CUDA Rust (Nvidia)AMD ROCm/HIPIntel oneAPI/SYCL
การรองรับฮาร์ดแวร์ เฉพาะ Nvidia GPU ที่ compute capability 8.0 ขึ้นไปเน้น AMD GPUเน้นฮาร์ดแวร์ Intel
ความพร้อมของเครื่องมือ เพิ่งเริ่มต้น มีสองเส้นทางคู่ขนานพร้อมใช้ในงาน AMD มาระยะหนึ่งพร้อมใช้ในงาน Intel และรองรับหลายแพลตฟอร์ม
ภาษาเรือธง Rust ควบคู่กับ CUDA C++ และ CUDA PythonC++ ผ่าน HIPC++ ผ่าน SYCL

ใครเอาไปใช้งานจริงแล้วบ้าง

จุดที่ทำให้ cutile-rs น่าเชื่อถือกว่าโปรเจกต์ทดลองทั่วไปคือมีผู้ใช้งานจริงนอก Nvidia แล้ว ทั้ง Grout ซึ่งเป็น inference engine ของ HuggingFace และ mistral.rs ซึ่งเป็นโปรเจกต์รัน inference โมเดลภาษาด้วย Rust

การมีผู้ใช้งานระดับ production ตั้งแต่ช่วงแรกของการเปิดตัว เป็นสัญญาณว่า cutile-rs ผ่านการทดสอบมาในระดับหนึ่งแล้ว ไม่ใช่แค่ demo สำหรับงานประกาศข่าว

กราฟการตลาดของ Nvidia ที่เปรียบเทียบประสิทธิภาพการ์ดจอรุ่นล่าสุด

ต้นทุนที่ทีมต้องเตรียมใจก่อนย้ายจาก CUDA C++

การย้ายมาใช้ CUDA Rust ไม่ได้จบแค่เขียน kernel ใหม่ ทีมต้องเรียนรู้ทั้งภาษา Rust และแนวคิดของแต่ละเส้นทาง พร้อมทำ binding เชื่อมกับไลบรารี CUDA เดิมที่มีอยู่แล้ว โดยเฉพาะโค้ดที่ผูกกับระบบเก่าแน่นๆ

อีกส่วนคือการทดสอบ performance ใหม่ทุกจุด เพราะยังไม่มีตัวเลข benchmark อย่างเป็นทางการจาก Nvidia ที่เทียบ CUDA Rust กับ CUDA C++ โดยตรง ทีมจึงต้องวัดผลเองกับงานจริงของตัวเอง และเผื่อเวลาไว้สำหรับ toolchain ที่ยังเปลี่ยนเร็วในช่วงเริ่มต้นนี้

จุดแข็งและข้อจำกัดที่ต้องชั่งน้ำหนัก

ข้อดี

  • +มีสองเส้นทางให้เลือกตามความคุ้นเคย ทั้งควบคุมละเอียดและเขียนง่าย
  • +cutile-rs ใช้งานจริงแล้วใน HuggingFace Grout และ mistral.rs

ข้อเสีย

  • −cuda-oxide ยังเป็น early alpha และต้องพึ่ง Rust nightly ที่ pin เวอร์ชัน
  • −รองรับเฉพาะ GPU compute capability 8.0 ขึ้นไป และต้องใช้ Linux เท่านั้น

จะกลายเป็นมาตรฐานใหม่ หรือยังต้องรอดูอีกพัก

Nvidia บอกทิศทางระยะยาวไว้ชัดว่าจะทำให้ CUDA Rust, CUDA C++ และ CUDA Python ทำงานร่วมกันได้ (interoperability) เพื่อไม่ให้ทีมที่เลือกภาษาใดภาษาหนึ่งต้องติดอยู่กับทางเลือกนั้นตลอดไป

คำถามที่ยังไม่มีคำตอบคือ cuda-oxide จะออกจากสถานะ alpha เร็วแค่ไหน และเมื่อ toolchain นิ่งขึ้น ทีมที่มีโค้ด CUDA C++ อยู่แล้วจะเห็นเหตุผลมากพอให้เริ่มย้ายมาใช้ Rust หรือไม่