- Trình biên dịch mã nguồn mở độc lập có thể chuyển trực tiếp mã nguồn CUDA C (.cu) thành mã máy cho AMD RDNA3(GFX11)
- Tạo nhị phân ELF
.hsaco thông qua bộ phân tích từ vựng, parser và biểu diễn trung gian (BIR) riêng, không cần lớp LLVM hay HIP
- Được viết bằng hơn 15.000 dòng mã C99 và có thể build chỉ với một lệnh
make
- Hỗ trợ các tính năng chính của CUDA như biến dựng sẵn cho luồng, bộ nhớ chia sẻ, phép toán nguyên tử, phép toán warp, cooperative groups
- Được phát hành theo giấy phép Apache 2.0, và trong tương lai hướng tới mở rộng sang các kiến trúc khác như Tenstorrent, Intel Arc, RISC-V
Tổng quan về BarraCUDA
- BarraCUDA là trình biên dịch CUDA dành cho GPU AMD, chuyển các tệp
.cu thành mã máy GFX11
- Kết quả đầu ra là nhị phân ELF
.hsaco có thể chạy trên GPU AMD
- Hoạt động hoàn toàn độc lập, không phụ thuộc LLVM
- Toàn bộ mã nguồn gồm khoảng 15.000 dòng viết bằng C99 và có thể build bằng một Makefile duy nhất
- Dự án được một nhà phát triển tại New Zealand phát triển cá nhân
Cách hoạt động
- Tệp
.cu đầu vào được xử lý theo thứ tự tiền xử lý → phân tích từ vựng → parsing → phân tích ngữ nghĩa → tạo BIR → chọn lệnh → cấp phát thanh ghi → mã hóa nhị phân → xuất ELF
- BIR (BarraCUDA IR) là biểu diễn nội bộ dạng SSA, được thiết kế độc lập với kiến trúc
- Mọi mã hóa đều được kiểm chứng bằng
llvm-objdump và đạt 0 lỗi giải mã
Tính năng được hỗ trợ
- Cú pháp cốt lõi của CUDA:
__global__, __device__, __host__, threadIdx, blockIdx v.v.
- Tính năng CUDA: bộ nhớ
__shared__, __syncthreads(), phép toán nguyên tử, shuffle/bỏ phiếu warp, kiểu vector, độ chính xác half, cooperative groups v.v.
- Tính năng trình biên dịch: bộ tiền xử lý C hoàn chỉnh, khôi phục lỗi, theo dõi vị trí mã nguồn, hỗ trợ truyền giá trị struct
Các mục chưa hỗ trợ
- Hiện vẫn chưa triển khai các mục như dùng
unsigned đơn lẻ, toán tử gán kết hợp (+=, -= v.v.), const, bộ nhớ __constant__, mảng chia sẻ 2D, texture/surface, thực thi song song động
- Không hỗ trợ nhiều translation unit và không sinh mã host
Kiểm thử và lộ trình
- Được kiểm chứng với 14 tệp kiểm thử, hơn 35 kernel, và khoảng 27KB mã máy
- Mục tiêu ngắn hạn: hoàn thiện cú pháp và tăng khả năng tương thích với các tệp
.cu dùng thực tế
- Mục tiêu trung hạn: tối ưu như lập lịch lệnh, cải thiện cấp phát thanh ghi, constant folding, loop-invariant code motion
- Mục tiêu dài hạn: bổ sung các backend mới như Tenstorrent, Intel Arc, RISC-V Vector Extension
Giấy phép
1 bình luận
Ý kiến trên Hacker News
Khiếu hài hước kiểu New Zealand trong README của dự án khá ấn tượng
Việc tự triển khai mã hóa instruction mà không phụ thuộc vào LLVM rất mới mẻ
Điều này cho thấy cần lượng kiến thức mức thấp khổng lồ để bắt đầu một dự án như vậy
Trong phe AMD, việc không hỗ trợ CUDA thường bị xem là cái cớ cho thế độc quyền của NVIDIA, nên những nỗ lực như thế này có vẻ sẽ giúp cân bằng thị trường
Tôi ngạc nhiên khi issue bên ngoài đầu tiên lại do geohot tạo (liên kết issue)
Tôi muốn thấy những người như vậy hợp sức để phá vỡ thế độc quyền thị trường GPU của NVIDIA
Chạy workload suy luận AI trên GPU NVIDIA có chi phí rất cao
Những dự án như thế này rất quan trọng để các startup tạo ra những lựa chọn thay thế có thể chi trả được
Tôi tò mò về hiệu năng ở các phép toán như conv2d hay attention
“# It’s C99. It builds with gcc. There are no dependencies.”
Sự đơn giản chỉ cần một dòng
makethật sự là vẻ đẹpNhìn cách viết hoa trong tiêu đề bài đăng, giờ tôi mới hiểu vì sao GPU farm của công ty lại có tên là “barracuda”. Khá buồn cười
Nếu các lập trình viên đầy nhiệt huyết làm được điều AMD không làm, thì đó sẽ là chuyện vừa buồn cười vừa đáng buồn
Hỗ trợ CUDA sẽ chỉ càng củng cố hệ sinh thái NVIDIA
Nếu muốn một lựa chọn thay thế CUDA thì ZLUDA có thể thực dụng hơn
Nhưng đáng tiếc là khi lớn lên thì cuối cùng lại bị các tập đoàn lớn mua lại rồi biến mất
Như trường hợp của Linus và git, chỉ cần có ý chí và kiến thức là có thể phá được bức tường
Ví dụ như việc FSR4 không chính thức hỗ trợ các card cũ cũng là một trường hợp như vậy
Tôi tự hỏi liệu có thể hỗ trợ cả các kiến trúc AMD cũ hơn (GFX1010 v.v.) hay không
Tôi đang đọc tài liệu ISA và chỉnh lại mã hóa nhị phân
Chỉ là đây là lĩnh vực LLM không làm tốt, nên phải tự hiểu và tự sửa
CUDA hỗ trợ C++, nên tôi đã tự hỏi liệu đi theo hướng thuần C mà không có Clang/LLVM có quá hạn chế không
Dạo này PR do AI tạo ra đang tràn ngập mã nguồn mở, nên việc dự án này tránh kiểu phụ thuộc đó khá ấn tượng
Tôi nghĩ AMD nên tài trợ chính thức cho dự án như thế này
Thế giới cần thoát khỏi thế độc quyền của NVIDIA
Tôi đã tự hỏi liệu “OpenCL giờ coi như hết thời rồi sao?”
Tôi không rõ, nhưng dù sao dự án này vẫn rất ấn tượng
Trước đây Apple cũng từng hỗ trợ nhưng giờ hình như không còn nữa
Giống như mối quan hệ giữa Unix và Windows, về mặt kỹ thuật thì tốt nhưng thị trường lại nghiêng hẳn về một phía