NVIDIA, Rust dilinin GPU üzerinde çalışan çekirdekler geliştirmesini sağlayan CUDA Rust araç setinin geliştirildiğini duyurdu. Bu araç seti, derleme zamanında bellek güvenliğini sağlıyor ve yarış koşullarını önlüyor. CUDA Rust'ın, CUDA C++ ve CUDA Python araç setlerine benzer şekilde, önümüzdeki yıl üretim projeleri için uygun bir seviyeye geliştirilmesi planlanıyor.
CUDA Rust araç zinciri, paralel çekirdekler geliştirmek için iki modeli destekler: SIMT (Tek Talimat, Çoklu İş Parçacığı) ve Tile. SIMT modeli, tek bir iş parçacığının düşük seviyede tanımlanmasına, binlerce iş parçacığının başlatılmasına ve yönetilmesine olanak tanır. Tile modeli ise daha yüksek bir soyutlama seviyesi sunar; burada tek tek iş parçacıklarını açıkça yönetmek yerine, veri blokları (karolar) üzerinde işlem yapmak için algoritmalar tanımlanır ve Tile IR derleyicisi tüm iş parçacığı manipülasyonunu, erişim senkronizasyonunu, bellek yönetimini ve verilerin tensör çekirdekleri arasında dağıtımını ele alır.
SIMT modelini kullanan Rust dilinde geliştirme için, Rust dilindeki kodu standart tip sistemi ve Rust sahiplik modelini kullanarak doğrudan yürütülebilir talimatlara derlemeye olanak sağlayan cuda-oxide derleyicisi geliştirilmektedir. sanal makine CUDA PTX (Paralel İş Parçacığı Yürütme). GPU çekirdekleri normal Rust dilinde yazılır, ancak no_std ortamında çalışır ve standart Rust kütüphanesine (libstd) erişim olmadan yalnızca libcore kütüphanesindeki fonksiyonları ve özel Rust soyutlamalarını kullanabilir.
Rust ile yazılmış CUDA çekirdekleri, tip koruması (güvenli), güvenli olmayan blokların kullanımı ve düşük seviyeli donanım komutlarına erişime olanak tanır. Güvenliği sağlamak için, her iş parçacığının yalnızca kendi verilerine özel erişime sahip olmasını sağlayan DisjointSlice tipi önerilmiştir. cuda-oxide kodu Apache 2.0 lisansı altında lisanslanmıştır.
Tail modelini uygulamak için cutile-rs kütüphanesi önerilmiştir. Bu kütüphane, Rust dilinin kendine özgü yapısını kullanarak doğrudan CUDA çekirdeklerine derlenen kodlar oluşturmayı mümkün kılar. Cutile-rs, GPU üzerinde çalışan koda Rust'ın katı sahiplik ve ödünç alma kurallarını uygular. Çekirdek, bir veri bloğu üzerinde çalışan tek iş parçacıklı bir program olarak uygulanır ve derleyici, hesaplamayı otomatik olarak iş parçacıklarına böler ve senkronizasyonlarını sağlar. İş parçacıklarına, değiştirilemez tensörlere paylaşımlı erişim verilir ve değiştirilebilir tensörler, güvenli erişimi sağlamak için ayrık bloklara bölünür. Cutile-rs kodu, Apache 2.0 lisansı altında dağıtılmaktadır.
Kaynak: opennet.ru
