
Fearless SIMD v1.0: Rust-бібліотека прибирає unsafe із коду SIMD
Linebender опублікувала fearless_simd v1.0 — крейт для Rust, який дає портативний SIMD і безпечний доступ до апаратних інструкцій без ad-hoc unsafe коду, а також три роки оновлень безпеки.
Linebender опублікувала fearless_simd v1.0 — крейт для Rust, мета якого прибрати unsafe з коду SIMD, тобто з техніки, що застосовує одну інструкцію до кількох значень одночасно. Оголошення з'явилося в блозі проєкту 22 вересня 2026 року, приблизно через вісім років після першого прототипу. Крейт покриває три рівні використання: автоевекторизацію та мультиверсіонування, повноцінні портативні абстракції SIMD і безпечний доступ до апаратних інструкцій.
Продуктивність
Портативні абстракції SIMD часто критикують за втрату продуктивності. Для операцій із платформозалежними крайовими випадками, як-от swizzle або максимум чисел із плаваючою комою, крейт пропонує два варіанти: точний, що дає однаковий результат усюди, і швидкий, що повертає платформозалежний результат там, де таких випадків не очікують.
Алгоритми можна писати під природну векторну ширину апаратури, а за потреби — із фіксованими розмірами векторів. Команда також передала покращення в Rust і LLVM. Там, де портативних операцій замало, код без додаткових витрат спускається до платформних інструкцій.
Безпека
Інші абстракції SIMD, зазначають автори, сповнені коду unsafe: пошук за ключовим словом дає тисячі блоків. У fearless_simd ad-hoc unsafe не потрібен. За це відповідають два невеликі компоненти: макрос kernel!, який використовує target feature 1.1 компілятора для безпечного виклику більшості інструкцій SIMD, і модуль безпечного transmute, натхненний bytemuck і zerocopy, що замінює інструкції завантаження та збереження на кшталт _mm_loadu_epi32 однією багаторазовою обгорткою. Якщо ці два самодостатні блоки безпечні для пам'яті, решта коду безпечна за побудовою.
Ергономіка та стабільність
Мультиверсіонування функцій у Rust було незручним: попередні рішення вимагали анотацій #[inline(always)] та розуміння їхніх наслідків або додавали витрати на кожен виклик, що шкодить дрібним функціям. Разом із версією 1.0 виходить fearless_simd_macros v0.1 з атрибутом #[simd], який ухвалює ці рішення автоматично; ручний шлях залишається доступним.
Проєкт обіцяє три роки оновлень безпеки для v1.0 і всіх наступних версій та бачить шлях до підтримки типу f16, а також розширень SVE і RISC-V без зламів API.
Впровадження і шлях до std::simd
Fearless SIMD уже є прямою залежністю 30 крейтів, а непрямою — понад тисячі. Команда радо вітала б стабілізацію std::simd, але вважає, що це не зробить крейт зайвим: стандартна бібліотека містить лише те, що мусить бути в ній, а мультиверсіонування та вектори ширини апаратури залишає екосистемі. Якщо std::simd стабілізують, проєкт планує перейти на нього, скоротивши власний код і додавши підтримку рідкісних платформ.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.