
Rust-ში SIMD-ის მდგომარეობა 2026 წელს: ბიბლიოთეკები მომწიფდა, intrinsics კვლავ რთულია
Sergey Davidoff-ის ყოველწლიური მიმოხილვით, Rust-ის SIMD ეკოსისტემა საგრძნობლად მომწიფდა: პორტაბელური ბიბლიოთეკები 1.0 ვერსიასთან ახლოსაა, x86-ზე multiversioning აღარ სატანჯველია, თუმცა ტრიგონომეტრია და intrinsics კვლავ სუსტი ადგილებია.
Rust-ის SIMD-ის მდგომარეობის ყოველწლიური მიმოხილვა 25 სექტემბერს გამოქვეყნდა. მისი ავტორი Sergey Davidoff-ია, რომელიც შარშანდელი მიმოხილვის შემდეგ Fearless SIMD-ის maintainer-ი გახდა. SIMD საშუალებას აძლევს პროცესორს ერთი ინსტრუქციით რიცხვების მთელი პაკეტი დაამუშაოს: თანამედროვე x86 ჩიპებზე ვექტორები 512 ბიტამდე აღწევს, რაც თეორიულად f64-ზე 8-მდე, ხოლო u8-ზე 64-მდე დაჩქარებას ნიშნავს.
ინტერესთა კონფლიქტის თავიდან ასაცილებლად ავტორმა სტატიის მონახაზი std:: simd-ის, wide-ის, pulp-ისა და macerator-ის ავტორებს გააცნო, თუმცა რედაქტორის როლი თავად შეინარჩუნა. დასკვნა ასეთია: SIMD-ის მხარდაჭერა საგრძნობლად გაუმჯობესდა და Rust მიმზიდველია SIMD კოდისთვის მაშინაც, როცა მეხსიერების უსაფრთხოება სავალდებულო მოთხოვნა არ არის.
x86-ის ფრაგმენტაცია და multiversioning
x86_64-ზე კომპილატორს ნაგულისხმევად მხოლოდ SSE2-ის გამოყენება შეუძლია, ამიტომ ახალი ინსტრუქციები რბენის დროს უნდა შეირჩეს. AVX2 2013 წელს გამოვიდა, თუმცა ბოლო Intel-ის პროცესორი მის გარეშე 2021 წელს გამოჩნდა, და Firefox-ის აპარატურის გამოკითხვით 2026 წელსაც x86 სისტემების 15% AVX2-ს მოკლებულია. სტანდარტული გამოსავალი multiversioning-ია: ერთი ფუნქცია რამდენიმე SIMD დონეზე კომპილირდება და რბენის დროს პროცესორის შესაძლებლობების შემოწმების შემდეგ შეირჩევა. multiversion ბიბლიოთეკა ამას ერთი ატრიბუტით აკეთებს, მაგრამ პატარა ფუნქციებს ზედმეტ ხარჯს უმატებს. ARM-ის 64-ბიტიან ბირთვებში NEON სავალდებულოა, ამიტომ პრობლემა ძირითადად x86-ს ეხება.
პორტაბელური ბიბლიოთეკები
std:: simd პირდაპირ LLVM-ზე დგას და ნებისმიერ სამიზნეს ფარავს, თუმცა მხოლოდ nightly-ზეა ხელმისაწვდომი. როცა LLVM-ში შესაბამისი ოპერაცია არ არსებობს, კოდი ჩუმად სკალარულ ვარიანტს უბრუნდება, რასაც ავტორი SIMD-ის მთავარ ცოდვად მიიჩნევს. Fearless SIMD-მა 1.0 ვერსია უსაფრთხოების პოლიტიკასთან ერთად გამოუშვა: ის სხვა ბიბლიოთეკებთან შედარებით გაცილებით ნაკლებ unsafe კოდს მალავს და multiversioning-ს პატარა ფუნქციებზეც ამუშავებს. wide მრავალ ოპერაციას ფარავს, ტრიგონომეტრიასაც, მაგრამ multiversioning-თან შეუთავსებელია. pulp ხაზოვანი ალგებრის faer ბიბლიოთეკას კვებავს, macerator კი burn-ის CPU ბექენდია.
intrinsics და აპარატურა
Rust 1.87 ვერსიიდან პლატფორმის intrinsics-ების უსაფრთხოდ გამოძახება target_feature-ისა და archmage-ის მსგავსი ბიბლიოთეკების მეშვეობით შეიძლება, რომლებიც პროცესორის ფუნქციებს ტიპის დონეზე აღრიცხავს. მიუხედავად ამისა, intrinsics ყველაზე სუსტ რგოლად რჩება: კომპილატორი ხშირად ვერ აქცევს მათ სასურველ ინსტრუქციად, ხოლო LLVM 23-ში მხოლოდ ავტორის საჩივრის შემდეგ გამოსწორდა შემთხვევა, როცა 512-ბიტიანი shuffle-ის „ოპტიმიზაცია“ საწყის ინსტრუქციაზე ნელი იყო. ძველი Intel-ის ჩიპები AVX-512-ის გაშვებისას მთელი პროცესორის სიხშირეს ამცირებდნენ, ეს ქცევა 2019 წელს, Ice Lake-თან ერთად გამოსწორდა. Steam-ის გამოკითხვით AVX-512 სისტემების 23,9%-ს აქვს. ტრიგონომეტრია Rust-ის ეკოსისტემაში ყველაზე დიდ ხარვეზად რჩება.
SiTech — AI-გაძლიერებული ვებ დეველოპმენტი
ვქმნით სწრაფ, თანამედროვე ვებსაიტებს და AI-ს ვაერთიანებთ ქართული ბიზნესებისთვის. გაქვთ პროექტი ან კითხვა? სიამოვნებით დაგეხმარებით.