Nvidia ընկերություն опубликовала գործիքակազմի առաջին թողարկումը CUDA-օքսիդ, որը թույլ է տալիս ստեղծել զուգահեռ GPU միջուկներ Rust լեզվով։ CUDA SIMT (Մեկ հրահանգ, բազմակի թել): Նախագիծը թույլ է տալիս կոմպիլացնել Rust կոդը՝ օգտագործելով ստանդարտ տիպի համակարգը և սեփականության մոդել Rust, անմիջապես CUDA վիրտուալ մեքենայում կատարման հրահանգներում PTX (nvidia.com) (Զուգահեռ թելերի կատարում) առանց միջանկյալ տիրույթին հատուկ լեզուների (DSL) և կապերի օգտագործման:
Գործիքների հավաքածուի կոդը գրված է Rust և տարածվում է Apache 2.0 լիցենզիայի ներքո։ Առաջին թողարկումը դիրքավորված է որպես սկզբնական ալֆա տարբերակ։
Գործիքակազմը ներառում է.
- Rustc կոմպիլյատորի համար կոդի ստեղծման ներքին համակարգ, որը թույլ է տալիս կոմպիլացնել ֆունկցիաներ «» ֆունկցիայի միջոցով։#[միջուկ]" զուգահեռ GPU միջուկների մեջ CUDA PTX ներկայացման մեջ։ Կոմպիլյացիան օգտագործում է rustc framework-ի վրա հիմնված ստանդարտ փոխակերպման շղթան։ ՊլիրոնRust → MIR → Pliron IR → LLVM IR → PTX:
- Հոսթ համակարգի և գրաֆիկական պրոցեսորի վրա աշխատող բաղադրիչների հավաքման միասնական համակարգ, որը բաղկացած է «cargo oxide build» և «cargo oxide run» հրամանների կատարումից։
- Rust աբստրակցիաների հավաքածու, որը կարող է օգտագործվել GPU-կողմի միջուկներում: Օրինակ, ֆունկցիաները հասանելի են ինդեքսավորման, համօգտագործվող հիշողության և արգելքների օգտագործման, ատոմային գործողությունների և թելերի խմբերի համաժամեցման համար: TMA (nvlabs.github.io) (Tensor Memory Accelerator): Հնարավոր է կապակցումներ կանչել Բլեքվելի ճարտարապետությանը բնորոշ ցածր մակարդակի հրահանգների համար (օրինակ՝ ընդլայնված մատրիցային գործողություններ):
- Տեղադրեք փաթեթներ հոսթ-հիմքով CUDA գործարկման կոմպոնենտներով, որոնք հնարավորություն են տալիս կառավարել հիշողությունը, գործարկել միջուկները GPU-ի վրա և ասինխրոն փոխազդել GPU-ի վրա հիմնված ֆունկցիաների հետ։
- Միջուկի օրինակների հավաքածու, որը ցուցադրում է այնպիսի գործառույթներ, ինչպիսիք են վեկտորային մանիպուլյացիան, մատրիցային բազմապատկումը (GEMM), ատոմային գործողությունները, ասինխրոն կատարումը և գրադարանային ինտեգրացիան։ Մաթեմատիկական Դեքս, օգտագործելով ջեներիկներ և փակումներ, փոխազդելով CUDA միջուկների հետ C++/CCCL-ում։
GPU միջուկները ստեղծվում են սովորական Rust լեզվով (ոչ թե բարբառով), բայց կատարվում են միջավայրում։ no_std և կարող է օգտագործել միայն գրադարանի ֆունկցիաները լիբկոր և նախկինում նշված մասնագիտացված Rust աբստրակցիաները՝ առանց Rust ստանդարտ գրադարանին (libstd) մուտք գործելու։ Աջակցվող տիպերի թվում են պարզունակ տիպերը (u8..u64, f32, f64, bool), կառուցվածքները, թվարկումները, tuples-ները, arrays-ները ([T; N]) և slices-ները (&[T]), match / if / if let օպերատորները, for և while ցիկլերը, իտերատորները (.iter(), .enumerate()), փակումները և ընդհանուր տիպերը։ Չեն աջակցվում String, Vec և Box տիպերը, format!, panic! և println! մակրոները, Trait օբյեկտները և ստանդարտ գրադարանային ֆունկցիաները, որոնք իրականացվում են օպերացիոն համակարգի կանչերի միջոցով (ֆայլերի մշակում, I/O և ցանցային գործողություններ)։
Առկա է Rust-ում CUDA միջուկի անվտանգության երեք մակարդակ՝ տիպային համակարգի պաշտպանություն (անվտանգ), անվտանգ բլոկների օգտագործում և ցածր մակարդակի սարքային հրահանգներին մուտք։ B200 GPU-ի վրա CUDA-օքսիդի վրա հիմնված մատրիցային բազմապատկման իրականացման (GEMM SoL) արդյունավետությունը հասնում է վայրկյանում 868 տրիլիոն գործողության, որը կազմում է օպտիմիզացված գրադարանի արդյունավետության 58%-ը։ cuBLAS.
Source: linux.org.ru
