Nvidia a lansat CUDA-oxide, un compilator Rust-to-CUDA.

Compania Nvidia а publicat prima lansare a setului de instrumente CUDA-oxid, care vă permite să creați nuclee GPU paralele în limbajul Rust CUDA SIMT (Instrucțiune unică, fire multiple). Proiectul vă permite să compilați cod Rust folosind sistemul de tipuri standard și modelul de proprietate Rust, direct în instrucțiunile de execuție în mașina virtuală CUDA PTX (nvidia.com) (Execuție de fire paralele) fără utilizarea limbajelor intermediare specifice domeniului (DSL) și a legăturilor.

Codul setului de instrumente este scris în Rust și distribuit de sub licența Apache 2.0. Prima versiune este poziționată ca o versiune alfa inițială.

Setul de instrumente include:

  • Un backend de generare de cod pentru compilatorul rustc care vă permite să compilați funcții cu „#[nucleu]„în nuclee GPU paralele în reprezentarea CUDA PTX. Compilarea utilizează lanțul de transformare standard bazat pe framework-ul rustc.” Pliron: Rugina → MIR → Pliron IR → LLVM IR → PTX.
  • Un sistem unificat pentru asamblarea componentelor care rulează pe sistemul gazdă și pe GPU, care se reduce la executarea comenzilor „cargo oxide build” și „cargo oxide run”.
  • Un set de abstracțiuni Rust care pot fi utilizate în kernel-urile GPU. De exemplu, sunt disponibile funcții pentru indexare, memorie partajată și utilizarea barierelor, operații atomice și sincronizarea grupurilor de fire de execuție. TMA (nvlabs.github.io) (Accelerator de memorie Tensor). Este posibil să se apeleze legături pentru instrucțiuni de nivel scăzut specifice arhitecturii Blackwell (de exemplu, operații extinse cu matrice).
  • Pachete Crate cu componente runtime CUDA bazate pe gazdă care permit gestionarea memoriei, rularea kernelurilor pe GPU și interacțiunea asincronă cu funcțiile bazate pe GPU.
  • O colecție de exemple de kernel care demonstrează caracteristici precum manipularea vectorială, multiplicarea matricelor (GEMM), operații atomice, execuție asincronă și integrare cu biblioteci. MathDx, folosind generice și închideri, interacțiunea cu nuclee CUDA în C++/CCCL.

Nucleele GPU sunt create în Rust obișnuit (nu într-un dialect), dar sunt executate în mediul respectiv. fără_standard și poate folosi doar funcții din bibliotecă libcore și abstracțiile Rust specializate menționate anterior, fără acces la biblioteca standard Rust (libstd). Tipurile suportate includ tipuri primitive (u8..u64, f32, f64, bool), structuri, enumerări, tupluri, tablouri ([T; N]) și felii (&[T]), operatori match / if / if let, bucle for și while, iteratori (.iter(), .enumerate()), închideri și generice. Nu sunt suportate tipurile String, Vec și Box, macrocomenzile format!, panic! și println!, obiectele Trait și funcțiile standard ale bibliotecii implementate prin apeluri ale sistemului de operare (gestionarea fișierelor, I/O și operațiuni de rețea).

Disponibil Trei niveluri de siguranță a nucleului CUDA în Rust: protecția sistemului de tip (sigură), utilizarea blocurilor nesigure și accesul la instrucțiuni hardware de nivel scăzut. Performanța implementării multiplicării matriceale bazate pe oxid CUDA (GEMM SoL) pe un GPU B200 atinge 868 trilioane de operații pe secundă, ceea ce reprezintă 58% din performanța bibliotecii optimizate. cuBLAS.

Sursa: linux.org.ru

Cumpărați găzduire de încredere pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără găzduire web fiabilă cu protecție DDoS, servere VPS VDS | ProHoster