- คอมไพเลอร์โอเพนซอร์สแบบสแตนด์อโลน ที่แปลง ซอร์ส CUDA C (
.cu) เป็น โค้ดเครื่องสำหรับ AMD RDNA3 (GFX11) ได้โดยตรง
- สร้างไบนารี ELF
.hsaco ผ่าน เล็กเซอร์, พาร์เซอร์ และตัวแทนกลาง (BIR) ของตัวเอง โดยไม่ต้องพึ่ง LLVM หรือชั้น HIP
- เขียนด้วย โค้ด C99 ราว 15,000 บรรทัด และสามารถบิลด์ได้ด้วยคำสั่ง
make เพียงคำสั่งเดียว
- รองรับความสามารถหลักของ CUDA เช่น ตัวแปรบิลต์อินของเธรด, หน่วยความจำที่ใช้ร่วมกัน, การทำงานแบบอะตอมมิก, การทำงานระดับวาร์ป และ cooperative groups
- เผยแพร่ภายใต้ Apache 2.0 License และมีเป้าหมายจะขยายไปยังสถาปัตยกรรมอื่นเพิ่มเติมในอนาคต เช่น Tenstorrent, Intel Arc, RISC-V
ภาพรวมของ BarraCUDA
- BarraCUDA คือ คอมไพเลอร์ CUDA สำหรับ AMD GPU ที่แปลงไฟล์
.cu เป็น โค้ดเครื่อง GFX11
- ผลลัพธ์อยู่ในรูปแบบ ไบนารี ELF
.hsaco ที่สามารถรันบน AMD GPU ได้
- ทำงานได้อย่างอิสระเต็มรูปแบบ โดยไม่ต้องพึ่ง LLVM
- โค้ดทั้งหมดมีขนาดประมาณ 15,000 บรรทัด เขียนด้วย C99 และบิลด์ได้ด้วย Makefile เดียว
- โปรเจ็กต์นี้พัฒนาโดย นักพัฒนาจากนิวซีแลนด์ ในลักษณะงานส่วนตัว
วิธีการทำงาน
- ประมวลผลไฟล์
.cu ที่ป้อนเข้ามาตามลำดับ พรีโปรเซส → วิเคราะห์คำศัพท์ → พาร์ส → วิเคราะห์เชิงความหมาย → สร้าง BIR → เลือกคำสั่ง → จัดสรรรีจิสเตอร์ → เข้ารหัสไบนารี → ส่งออก ELF
- BIR (BarraCUDA IR) เป็นตัวแทนภายในแบบ SSA ที่ออกแบบให้ไม่ผูกกับสถาปัตยกรรมใดสถาปัตยกรรมหนึ่ง
- การเข้ารหัสทั้งหมดตรวจสอบด้วย
llvm-objdump แล้ว และมี ข้อผิดพลาดในการดีโค้ด 0 รายการ
ความสามารถที่รองรับ
- ไวยากรณ์หลักของ CUDA:
__global__, __device__, __host__, threadIdx, blockIdx เป็นต้น
- ฟีเจอร์ของ CUDA: หน่วยความจำ
__shared__, __syncthreads(), การทำงานแบบอะตอมมิก, warp shuffle/vote, ชนิดข้อมูลเวกเตอร์, ความแม่นยำแบบ half, cooperative groups เป็นต้น
- ความสามารถของคอมไพเลอร์: C preprocessor ที่สมบูรณ์, การกู้คืนจากข้อผิดพลาด, การติดตามตำแหน่งในซอร์ส, รองรับการส่งค่าโครงสร้าง
สิ่งที่ยังไม่รองรับ
- การใช้
unsigned แบบเดี่ยว, ตัวดำเนินการกำหนดค่าแบบผสม (+=, -= เป็นต้น), const, หน่วยความจำ __constant__, อาร์เรย์ shared แบบ 2D, texture·surface, dynamic parallelism ยังไม่ได้ถูกติดตั้งใช้งาน
- ยังไม่รองรับหลาย translation units และการสร้างโค้ดฝั่งโฮสต์
การทดสอบและโรดแมป
- ตรวจสอบแล้วด้วย ไฟล์ทดสอบ 14 ไฟล์, เคอร์เนลมากกว่า 35 ตัว, และ โค้ดเครื่องราว 27KB
- เป้าหมายระยะสั้น: เติมความสมบูรณ์ของไวยากรณ์และเพิ่มความเข้ากันได้กับไฟล์
.cu สำหรับการใช้งานจริง
- เป้าหมายระยะกลาง: ปรับปรุง instruction scheduling, การจัดสรรรีจิสเตอร์, constant folding, loop-invariant code motion และการเพิ่มประสิทธิภาพอื่น ๆ
- เป้าหมายระยะยาว: เพิ่มแบ็กเอนด์ใหม่สำหรับ Tenstorrent, Intel Arc, RISC-V Vector Extension เป็นต้น
ไลเซนส์
1 ความคิดเห็น
ความคิดเห็นจาก Hacker News
รู้สึกประทับใจกับอารมณ์ขันแบบนิวซีแลนด์ที่เขียนไว้ใน README ของโปรเจ็กต์
การที่โปรเจ็กต์นี้ทำ instruction encoding ขึ้นมาเองโดยไม่พึ่ง LLVM ถือว่าสดใหม่มาก
มันแสดงให้เห็นว่าการจะเริ่มโปรเจ็กต์แบบนี้ต้องมีความรู้ระดับล่างมาก
ฝั่ง AMD มักถูกมองว่าไม่รองรับ CUDA จึงกลายเป็นข้ออ้างให้ NVIDIA ผูกขาด และความพยายามแบบนี้น่าจะช่วยสร้างสมดุลให้ตลาดได้
แปลกใจที่ external issue แรกถูกเปิดโดย geohot (ลิงก์ issue)
อยากเห็นคนแบบนี้ร่วมมือกันเพื่อทำลายการผูกขาดตลาด GPUของ NVIDIA
การรันเวิร์กโหลด AI inference บน GPU ของ NVIDIA มีต้นทุนสูง
โปรเจ็กต์แบบนี้สำคัญต่อการสร้างทางเลือกที่สตาร์ทอัพพอจะจ่ายไหว
อยากรู้ว่าประสิทธิภาพของโอเปอเรชันอย่าง conv2d หรือ attention จะเป็นอย่างไร
“# It’s C99. It builds with gcc. There are no dependencies.”
ความเรียบง่ายที่จบได้ด้วย
makeบรรทัดเดียวช่างงดงามจริง ๆพอเห็นการใช้ตัวพิมพ์ใหญ่ในชื่อโพสต์ ก็เพิ่งเข้าใจว่าทำไม GPU farm ของบริษัทถึงชื่อว่า “barracuda” มันขำดีทีเดียว
ถ้านักพัฒนาที่มีแพสชันทำในสิ่งที่ AMD ทำไม่ได้สำเร็จ ก็คงเป็นเรื่องที่ทั้งขำและเศร้า
เพราะถ้ารองรับ CUDA ก็จะยิ่งไปเสริมความแข็งแกร่งให้ ecosystem ของ NVIDIA
ถ้าอยากได้ตัวแทน CUDA จริง ๆ ZLUDA อาจใช้งานได้จริงมากกว่า
แต่ก็น่าเสียดายที่พอโตขึ้นแล้วมักสุดท้ายถูกบริษัทใหญ่ซื้อไปและหายไป
เหมือนกรณีของ Linus กับ git ที่แสดงให้เห็นว่าถ้ามีทั้งความมุ่งมั่นและความรู้ ก็สามารถพังกำแพงได้
เช่น การไม่รองรับ FSR4 บนการ์ดรุ่นเก่าอย่างเป็นทางการก็เป็นตัวอย่างหนึ่ง
สงสัยว่าจะรองรับสถาปัตยกรรม AMD รุ่นเก่า (GFX1010 เป็นต้น) ได้ไหม
กำลังอ่านเอกสาร ISA แล้วปรับ binary encoding อยู่
แต่พื้นที่นี้เป็นงานที่LLM ไม่ค่อยเก่ง จึงต้องเข้าใจและแก้เอง
CUDA รองรับ C++ เลยมีคนสงสัยว่าการเดินหน้าแบบ pure C โดยไม่มี Clang/LLVM จะไม่จำกัดเกินไปหรือ
ทุกวันนี้โอเพนซอร์สเต็มไปด้วย PR ที่ AI สร้างขึ้น จึงน่าประทับใจที่โปรเจ็กต์นี้หลีกเลี่ยงการพึ่งพาแบบนั้น
คิดว่า AMD ควรสนับสนุนอย่างเป็นทางการให้กับโปรเจ็กต์แบบนี้
โลกจำเป็นต้องหลุดพ้นจากการผูกขาดของ NVIDIA
มีคนสงสัยว่า “OpenCL ตายไปแล้วหรือยัง?”
ไม่ค่อยแน่ใจ แต่ถึงอย่างนั้นโปรเจ็กต์นี้ก็ยังน่าประทับใจ
เมื่อก่อน Apple ก็เคยรองรับ แต่ตอนนี้เหมือนจะไม่แล้ว
คล้ายความสัมพันธ์ระหว่าง Unix กับ Windows คือในเชิงเทคนิคอาจดี แต่ตลาดกลับเทไปด้านเดียว