Վերադառնալ
SIMD-ի վիճակը Rust-ում 2026 թվականին. գրադարանները հասունացել են, intrinsics-ը դեռ ցավում է
SiTech AI Team2 წთ. საკითხავი

SIMD-ի վիճակը Rust-ում 2026 թվականին. գրադարանները հասունացել են, intrinsics-ը դեռ ցավում է

Սերգեյ Դավիդովի տարեկան ակնարկը Rust-ում SIMD-ի աջակցության մասին ցույց է տալիս, որ շարժական գրադարանները մոտեցել են 1.0 տարբերակին, x86-ում multiversioning-ն այլևս ցավոտ չէ, իսկ եռանկյունաչափությունն ու intrinsics-ը մնում են էկոհամակարգի ամենաթույլ օղակները։

Սերգեյ Դավիդովը 2026 թվականի սեպտեմբերի 25-ին հրապարակեց Rust-ում SIMD-ի աջակցության իր տարեկան ակնարկը։ SIMD-ը, այսինքն մեկ հրահանգ՝ շատ տվյալների համար, թույլ է տալիս պրոցեսորին մեկ թվաբանական գործողություն կիրառել թվերի ամբողջ փաթեթի վրա. ժամանակակից x86 չիպերում վեկտորները հասնում են 512 բիթի, ինչը տեսականորեն 8 անգամ արագացում է տալիս f64-ի և 64 անգամ՝ u8-ի համար։

Անցյալ տարվա ակնարկից հետո հեղինակը դարձավ Fearless SIMD-ի համապահովողներից մեկը, ուստի շահերի բախումից խուսափելու համար հոդվածի սևագիրը ներկայացրեց std::simd-ի, wide-ի, pulp-ի և macerator-ի հեղինակներին՝ խմբագրական վերահսկողությունը պահելով իր ձեռքում։ Նրա եզրակացությունը սա է. աջակցությունը զգալիորեն հասունացել է, և Rust-ը գրավիչ է SIMD կոդի համար նույնիսկ այն դեպքում, երբ հիշողության անվտանգությունը պարտադիր պահանջ չէ։

Ինչ գտավ ուսումնասիրությունը

x86_64-ում կոմպիլյատորը լռելյայն կարող է հույս դնել միայն SSE2-ի վրա, ուստի ավելի նոր ամեն ինչ պետք է ընտրվի գործարկման պահին։ AVX2-ը թողարկվել է 2013 թվականին, սակայն առանց դրա վերջին Intel պրոցեսորը շուկա դուրս եկավ 2021-ին, և Firefox-ի ապարատային հարցման համաձայն 2026-ին x86 համակարգերի 15%-ը դեռ չունի այն։ Ստանդարտ լուծումը multiversioning-ն է. միևնույն ֆունկցիան կոմպիլացվում է մի քանի SIMD մակարդակի համար, իսկ գործարկման պահին ստուգվում են պրոցեսորի հնարավորությունները և ընտրվում համապատասխան տարբերակը։ multiversion գրադարանը դա անում է մեկ ատրիբուտով, սակայն շատ փոքր ֆունկցիաներին ավելորդ ծախս է ավելացնում։ ARM-ի 64-բիթանոց միջուկներում NEON-ը պարտադիր է, ուստի խնդիրը հիմնականում x86-ինն է։

Շարժական SIMD գրադարանները

std::simd-ը ուղղակիորեն նստում է LLVM-ի վրա և ընդգրկում է ցանկացած թիրախ, որն աջակցում է LLVM-ը, սակայն հասանելի է միայն nightly-ում։ Երբ LLVM-ում համապատասխան գործողություն չկա, կոդը լուռ վերադառնում է սկալյար տարբերակին, ինչը հեղինակը համարում է գլխավոր մեղքը։ Fearless SIMD-ը թողարկեց 1.0 տարբերակը անվտանգության քաղաքականության հետ միասին. այն մրցակիցների համեմատ շատ ավելի քիչ unsafe կոդ է պարունակում և multiversioning-ը աշխատեցնում է անգամ ամենափոքր ֆունկցիաներում։ wide-ը ընդգրկում է բազմաթիվ գործողություններ՝ ներառյալ եռանկյունաչափությունը, բայց համատեղելի չէ multiversioning-ի հետ։ pulp-ը կերակրում է faer գծային հանրահաշվի գրադարանը, իսկ macerator-ը burn-ի CPU բեքենդն է։

intrinsics-ը և ապարատը

Rust 1.87-ից ի վեր պլատֆորմային intrinsics-ները կարելի է անվտանգ կանչել target feature-ների և archmage-ի նման հատկանիշների թոքենների միջոցով։ Այնուամենայնիվ, intrinsics-ը մնում է ամենաթույլ օղակը. կոմպիլյատորը հաճախ չի կարողանում դրանք վերածել ցանկալի հրահանգների, և հեղինակը նկարագրում է դեպք, երբ «օպտիմիզացիան» 512-բիթանոց shuffle-ը դարձրեց ավելի դանդաղ, քան ինքն էր խնդրել. այն ուղղվեց LLVM 23-ում նրա զեկույցից հետո։ Ապարատային կողմում վաղ AVX-512 պրոցեսորները իջեցնում էին ամբողջ չիպի հաճախականությունը, և այդ վարքագիծը շտկվեց միայն 2019 թվականին՝ Ice Lake-ի հետ, մինչդեռ Steam-ի հարցման համաձայն AVX-512 ունի համակարգերի 23,9%-ը։ Եռանկյունաչափությունը մնում է Rust-ի էկոհամակարգի ամենամեծ բացը։

SSiTech

SiTech — AI-ով հզորացված վեբ մշակում

Ստեղծում ենք արագ ու ժամանակակից կայքեր և AI-ը ներդնում իրական բիզնես գործընթացներում։ Ունե՞ք նախագիծ կամ հարց։ Ուրախ կլինենք օգնել։