- CUDA C kaynaklarını (.cu) doğrudan AMD RDNA3 (GFX11) için makine koduna dönüştüren bağımsız açık kaynaklı bir derleyici
- LLVM veya HIP katmanı olmadan, kendi sözcüksel analizcisi, ayrıştırıcısı ve ara gösterimi (BIR) üzerinden ELF
.hsaco ikilileri üretir
- Yaklaşık 15.000 satır C99 koduyla yazılmıştır ve tek bir
make komutuyla derlenebilir
- CUDA'nın iş parçacığı yerleşik değişkenleri, paylaşımlı bellek, atomik işlemler, warp işlemleri, cooperative groups gibi temel özelliklerini destekler
- Apache 2.0 lisansı ile yayımlanmıştır; gelecekte Tenstorrent, Intel Arc, RISC-V gibi ek mimarilere genişlemeyi hedefler
BarraCUDA'ya genel bakış
- BarraCUDA, AMD GPU'lar için bir CUDA derleyicisidir ve
.cu dosyalarını GFX11 makine koduna dönüştürür
- Çıktı, AMD GPU'larda çalıştırılabilen ELF
.hsaco ikilisi biçimindedir
- LLVM bağımlılığı olmadan tamamen bağımsız çalışır
- Tüm kod tabanı C99 ile yazılmış yaklaşık 15.000 satırdan oluşur ve tek bir Makefile ile derlenebilir
- Proje, Yeni Zelanda merkezli bir geliştirici tarafından kişisel olarak geliştirilmektedir
Nasıl çalışır
- Girilen
.cu dosyası önişleme → sözcüksel analiz → ayrıştırma → anlamsal analiz → BIR üretimi → komut seçimi → yazmaç tahsisi → ikili kodlama → ELF çıktısı sırasıyla işlenir
- BIR (BarraCUDA IR), SSA biçiminde bir iç gösterimdir ve mimariden bağımsız tasarlanmıştır
- Tüm kodlamalar
llvm-objdump ile doğrulanmıştır ve 0 decode hatası elde edilmiştir
Desteklenen özellikler
- CUDA çekirdek sözdizimi:
__global__, __device__, __host__, threadIdx, blockIdx vb.
- CUDA özellikleri:
__shared__ bellek, __syncthreads(), atomik işlemler, warp shuffle/vote, vektör türleri, half hassasiyeti, cooperative groups vb.
- Derleyici özellikleri: tam C önişlemcisi, hata kurtarma, kaynak konumu takibi, struct değer geçirme desteği
Henüz desteklenmeyenler
- Tek başına
unsigned kullanımı, bileşik atama operatörleri (+=, -= vb.), const, __constant__ bellek, 2D paylaşımlı diziler, texture/surface, dinamik paralel yürütme henüz uygulanmamıştır
- Çoklu çeviri birimi ve host kodu üretimi desteklenmez
Testler ve yol haritası
- 14 test dosyası, 35'ten fazla kernel ve yaklaşık 27 KB makine kodu ile doğrulanmıştır
- Kısa vadeli hedef: sözdizimini geliştirmek ve gerçek kullanım
.cu dosyalarıyla uyumluluğu artırmak
- Orta vadeli hedef: komut zamanlama, yazmaç tahsisi iyileştirmeleri, sabit katlama, döngü değişmezi kod taşıma gibi optimizasyonlar
- Uzun vadeli hedef: Tenstorrent, Intel Arc, RISC-V Vector Extension gibi yeni backend'ler eklemek
Lisans
1 yorum
Hacker News yorumları
Projenin README’sindeki Yeni Zelanda usulü mizah dikkat çekiciydi
LLVM’ye bağımlı olmadan kendi instruction encoding’ini uygulaması taze bir yaklaşım
Böyle bir projeye başlamak için muazzam düzeyde düşük seviye bilgi gerektiğini gösteriyor
AMD tarafında CUDA desteğinin olmaması sık sık NVIDIA tekelinin bahanesi oluyor; bu tür girişimler pazar dengesine yardımcı olabilir gibi görünüyor
İlk dış issue’yu geohot’un açmış olmasına şaşırdım (issue bağlantısı)
Böyle insanların güçlerini birleştirip NVIDIA’nın GPU pazarındaki tekelini kırdığını görmek isterdim
NVIDIA GPU’larda yapay zeka inference iş yükü çalıştırmak maliyetli
Bu tür projeler, startup’ların karşılayabileceği alternatifler oluşturması açısından önemli
conv2d ve attention gibi işlemlerde performansın nasıl olduğunu merak ediyorum
“# It’s C99. It builds with gcc. There are no dependencies.”
Tek satırlık
makeile biten bu sadelik gerçekten çok güzelGönderi başlığındaki büyük harf kullanımını görünce, şirketin GPU farm’ına neden “barracuda” dendiğini ancak şimdi fark ettim. Oldukça komikti
Eğer tutkulu geliştiriciler AMD’nin yapamadığını başarırsa, bu hem komik hem de üzücü olur
Çünkü CUDA’yı desteklemek sonuçta NVIDIA ekosistemini daha da güçlendirirdi
CUDA’ya alternatif isteniyorsa ZLUDA daha pratik olabilir
Ama büyüdüğünde sonunda büyük şirketler tarafından satın alınıp ortadan kaybolması üzücü
Linus ve git örneğinde olduğu gibi, irade ve bilgi varsa duvarlar aşılabilir
Örneğin FSR4’ün eski kartlarda resmî olarak desteklenmemesi de buna bir örnek
Eski AMD mimarilerine (GFX1010 vb.) kadar destek verilip verilemeyeceğini merak ettim
ISA dokümanlarını okuyup binary encoding’i ayarlıyorum
Ama bu alan, LLM’lerin pek iyi olmadığı bir alan, o yüzden doğrudan anlayıp düzeltmek gerekiyor
CUDA C++ destekliyor; Clang/LLVM olmadan saf C ile gitmek fazla kısıtlayıcı olmaz mı diye merak ettim
Bugünlerde açık kaynak dünyası yapay zeka tarafından üretilmiş PR’larla dolu; bu projenin böyle bir bağımlılıktan kaçınması etkileyici
AMD’nin böyle bir projeye resmî sponsorluk vermesi gerektiğini düşünüyorum
Dünyanın NVIDIA tekelinden çıkması gerekiyor
“OpenCL artık bitti mi?” diye düşündüm
Pek emin değilim ama bu proje yine de etkileyici
Eskiden Apple da destekliyordu ama artık desteklemiyor gibi görünüyor
Unix ile Windows arasındaki ilişki gibi; teknik olarak iyi olsa da pazar tek bir tarafa kaydı