
Стан SIMD у Rust 2026 року: крейти дозріли, інтринсики досі болять
Щорічний огляд SIMD у Rust від Сергія Давидова показує, що переносні крейти наблизилися до версії 1.0, а мультиверсіювання на x86 перестало бути болем, тоді як тригонометрія та інтринсики залишаються найслабшими місцями екосистеми.
Сергій Давидов опублікував щорічний огляд підтримки SIMD у Rust 25 вересня 2026 року. SIMD, тобто одна інструкція для багатьох даних, дозволяє процесору застосувати одну арифметичну дію до цілого пакета чисел: на сучасних чипах x86 такі вектори сягають 512 бітів, що теоретично дає до 8-кратного прискорення для f64 і 64-кратного для u8.
Після торішнього огляду автор став одним із супровідників Fearless SIMD, тому, щоб уникнути конфлікту інтересів, попросив авторів std::simd, wide, pulp і macerator переглянути чернетку статті, зберігши за собою редакторський контроль. Його висновок: підтримка помітно дозріла, і Rust тепер привабливий для SIMD-коду навіть тоді, коли безпека пам'яті не є жорсткою вимогою.
Що показав огляд
На x86_64 компілятор за замовчуванням може розраховувати лише на SSE2, тому все новіше доводиться вибирати під час виконання. AVX2 з'явився ще 2013 року, але останній процесор Intel без нього вийшов 2021 року, і 15% x86-систем у дослідженні апаратного забезпечення Firefox не мають його й у 2026-му. Стандартна відповідь, мультиверсіювання, полягає в тому, щоб скомпілювати одну функцію для кількох рівнів SIMD і вибрати потрібну після перевірки можливостей процесора. Крейт multiversion робить це одним атрибутом, щоправда, додає накладні витрати дуже малим функціям. У 64-бітних ядрах ARM NEON обов'язковий, тож проблема стосується переважно x86.
Переносні крейти SIMD
std::simd працює безпосередньо поверх LLVM і підтримує будь-яку цільову платформу LLVM, але доступний лише на nightly. Коли відповідної операції в LLVM немає, код тихо повертається до скалярної арифметики, і автор називає це головним гріхом. Fearless SIMD випустили у версії 1.0 разом із політикою безпеки: він приховує значно менше unsafe-коду за конкурентів і змушує мультиверсіювання працювати навіть для крихітних функцій. wide підтримує багато операцій, включно з тригонометрією, але не сумісний із мультиверсіюванням. pulp живить бібліотеку лінійної алгебри faer, а macerator є процесорним бекендом burn.
Інтринсики й апаратне забезпечення
Починаючи з Rust 1.87, платформові інтринсики можна викликати безпечно через target-features і токени можливостей, як-от у крейті archmage. Попри це, інтринсики залишаються найслабшим місцем: компілятор часто не зводить їх до потрібних інструкцій, і автор описує випадок, коли «оптимізація» зробила 512-бітний shuffle повільнішим за замовлену інструкцію, що виправили в LLVM 23 після його звіту. На рівні заліза ранні процесори Intel з AVX-512 знижували частоту всього чипа, і це виправили лише з Ice Lake 2019 року, тоді як за даними Steam AVX-512 мають 23,9% систем. Тригонометрія залишається найбільшою прогалиною.
SiTech — веброзробка з підтримкою AI
Створюємо швидкі та сучасні сайти й інтегруємо AI у бізнес-процеси. Маєте проєкт чи запитання? Із задоволенням допоможемо.