deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

Nvidia, Rust'a iki parçalı destekle native CUDA GPU programlamayı getiriyor

Nvidia artık Rust'ta CUDA kernel yazımını, CUDA C++'ı yansıtan düşük seviyeli bir yol ve yüksek seviyeli iterator tarzı bir API ile destekliyor; yıllardır süren community crate'lerine bağımlılık sona eriyor.

Nvidia, Rust'a iki parçalı destekle native CUDA GPU programlamayı getiriyor

Nvidia ne duyurdu

dev.to'da yayımlanan pratik bir rehbere göre Nvidia, Rust için native GPU programlama desteğini kullanıma sundu ve dilin CUDA ekosistemindeki uzun süredir süren üçüncü taraf ikinci sınıf statüsünü sona erdirdi. Destek, birbirinden çok farklı iki kitleyi hedefleyen "iki yol" (two tracks) modeli şeklinde yapılandırıldı.

İlk yol düşük seviyeli CUDA Rust. CUDA C++ semantiğini yakından takip ederek kernel yazarlarına thread block'lar, shared memory, warp'lar ve memory coalescing üzerinde doğrudan kontrol sağlıyor. Rehbere göre amaç tanıdıklılık: mevcut CUDA kod tabanlarını taşıyan mühendisler, bir Rust kernel'in yapısını C++ karşılığıyla neredeyse özdeş bulmalı.

İkinci yol ise yüksek seviyeli bir soyutlama. Rehberin iyi bilinen CPU paralellik kütüphanesi rayon'a benzettiği, ergonomik ve iterator tabanlı bir API sunuyor; geliştiricilerin her işlem için grid ve block boyutlarını elle yönetmesine gerek kalmadan verimli kernel'lere derleniyor.

Community crate'lerinden birinci sınıf desteğe

Şimdiye kadar Rust'taki GPU çalışmaları resmi olmayan projelere dayanıyordu. Rehber başlıca seçenekleri şöyle sayıyor: PTX'i nvptx64-nvidia-cuda hedefi üzerinden derleyen rust-cuda; platformlar arası compute shader'ları hedefleyen wgpu; ve CUDA driver API'sine daha güvenli bağlantılar sunan cudarc.

Bu crate'ler iş görüyordu ama hiçbiri Nvidia'nın desteğini taşımıyordu; bu da pratikte yeni CUDA toolkit sürümleriyle garanti uyumluluk olmadığı, cuda-gdb veya Nsight üzerinden birinci taraf hata ayıklama olmadığı ve driver güncellemelerinde tekrarlayan bozulmalar yaşandığı anlamına geliyordu. Rehbere göre resmi destek, Rust kernel'lerine CUDA'nın 2007'de ortaya çıkışından bu yana C++'ın keyif aldığı türden bir araç olgunluğu kazandırıyor.

Rust nerede yardımcı oluyor, nerede olmuyor

dev.to rehberi performans beklentilerini dizginliyor: kernel'ler Rust'ta yazıldıkları için hızlanmıyor, çünkü GPU hangi dilde üretildiklerine bakılmaksızın PTX'i çalıştırıyor. Kazanç host tarafında, yani geçmişte çoğu CUDA hatasının yaşandığı allocation, launch ve veri aktarım kodlarında. Rehber, device pointer'lardaki use-after-free hatalarını, uyumsuz grid boyutlarını ve atlanan temizlik çağrılarını tipik örnekler olarak gösteriyor.

Saydığı somut kazanımlar arasında host kodundaki veri yarışlarını önleyen borrow checking, manuel olarak incelenen hata kodları yerine Result ve ? operatörüyle tip hatası yönetimi, Cargo üzerinden birleşik paket yönetimi ve kernel launch'ların daha güçlü derleme zamanı doğrulaması var.

Sınırlamalar sürüyor. Nsight entegrasyonunun hâlâ geliştirilmekte olduğu, bugün PTX seviyesinde hata ayıklamanın mümkün olduğu belirtiliyor; cuDNN ve cuBLAS gibi mevcut C++ CUDA kütüphaneleriyle birlikte çalışabilirlik ise hâlâ bindgen veya cxx crate'ini gerektiriyor.

Bir kernel'i çalışır hale getirmek

Rehberde anlatılan kurulum nightly Rust toolchain'ini, rust-src bileşenini, nvptx64-nvidia-cuda hedefini ve yerel bir CUDA toolkit kurulumunu gerektiriyor. Birinci Yol kernel'leri no_std ve core::arch::nvptx modülündeki intrinsic'lerle derleniyor; ortaya çıkan vektör toplama örneği, eşdeğer CUDA C++ fonksiyonuna neredeyse satır satır benziyor. Host kodu derlenmiş PTX modülünü yüklüyor, device buffer'ları ayırıyor ve bir makro aracılığıyla launch ediyor; hata üretebilecek her çağrı sessiz bir başarısızlık yerine tipli bir hata döndürüyor.

İkinci Yol bunu bile ortadan kaldırıyor. Rehberin örneği iki vektörü device'a yüklüyor, bunları zip ve map ile birleştiriyor ve sonucu collect ediyor; ne grid veya block aritmetiği var, ne manuel PTX derleme adımı ne de açık stream senkronizasyonu.

Neden önemli

ML eğitim pipeline'larından veri işleme motorlarına ve özel inference sunucularına kadar GPU hızlandırmalı altyapı kuran ekipler için bu duyuru, Rust'ı benimseme hesabını değiştiriyor. Bellek güvenliği artık ham işleme hızı veya vendor sınıfı araçlara karşılık feda edilmek zorunda değil; kontrol odaklı bir yol ile ergonomik bir yol arasındaki ayrım, Rust'ın kendi safe-karşıtı-unsafe felsefesini yansıtıyor. Ayrıca GPU hızlandırmayı, hiçbir zaman CUDA mimarisi uzmanı olmayı amaçlamamış uygulama geliştiricilerine açarken, kernel uzmanlarına ihtiyaç duydukları düşük seviyeli erişimi bırakıyor.

  • #rust
  • #nvidia
  • #cuda
  • #gpu
  • #systems-programming

İlgili yazılar