Компания NVIDIA обяви за развитието на инструмента CUDA Rust, който позволява използването на езика Rust за разработка на ядра, изпълнявани на страна на GPU. Инструментът осигурява безопасност при работа с паметта на етапа на компилация и предотвратява появата на условия на гонка. През следващата година CUDA Rust планират да достигне ниво, подходящо за разработване на реални проекти, подобно на инструментите CUDA C++ и CUDA Python.
Инструментът CUDA Rust поддържа два модела за разработка на паралелно изпълнявани ядра — SIMT (Single Instruction, Multiple Threads) и Tile. Моделът SIMT позволява на ниско ниво да се определя логиката на един поток, да се стартират хиляди такива потоци и да се управляват. Моделът Tile предлага по-високо ниво на абстракция, при което вместо явно управление на отделни потоци се определят алгоритми на действие с блокове данни (tile), а всички манипулации с потоци, синхронизация на достъпа, управление на паметта и разпределение на данни по тензорни ядра се поемат от компилатора Tile IR.
За разработка на езика Rust с използване на модела SIMT се развива компилаторът cuda-oxide, който позволява компилиране на код на езика Rust, използващ стандартната система от типове и модела на собственост на Rust, директно в инструкции за изпълнение в виртуална машина CUDA PTX (Parallel Thread Execution). Ядрата за GPU се създават на обикновен Rust, но се изпълняват в обстановка no_std и могат да използват само функции от библиотеката libcore и специализирани Rust-абстракции, без достъп до стандартната библиотека на Rust (libstd).
В CUDA-ядрата на Rust се допуска прилагане на защита чрез системата от типове (safe), използване на блокове unsafe и достъп до нискоуровневи хардуерни инструкции. За осигуряване на безопасност се предлага тип DisjointSlice, който гарантира, че всеки поток получава ексклузивен достъп само до собствените си данни. Кодът cuda-oxide се разпространява под лицензия Apache 2.0.
За приложението на модела Tail се предлага библиотеката cutile-rs, която позволява да се използва идиоматичен език Rust за създаване на код, компилиран директно в CUDA-ядра. Cutile-rs прилага предлаганите в Rust строги правила за собственост и заемане към кода, изпълняван на GPU. Ядрото е оформено като еднопоточна програма, работеща с блок от данни, а компилаторът сам разбива изчисленията на потоци и осигурява тяхната синхронизация. На потоците се предоставя споделен достъп до неизменяеми тензори, а за безопасен достъп до изменяеми тензори се прилага тяхното разделяне на непересечени блокове. Кодът cutile-rs се разпространява под лицензия Apache 2.0.
Източник: opennet.ru
