Aller au contenu

Fearless SIMD 1.0 apporte un SIMD stable et sûr à Rust

Fearless SIMD 1.0, publié le 21 septembre, offre à Rust un SIMD sûr de SSE2 à AVX-512, NEON et WebAssembly, avec une API stable et 3 ans de correctifs de sécurité.

Par Tech AI Wire Team

3 min de lecture

XLinkedIn
Le dépôt linebender/fearless_simd sur GitHub, qui affiche la version fearless_simd-v1.0.0 comme la plus récente.

En chiffres

crates that depend on it indirectly
1,000+
crates that use it directly
30
minimum Rust version
1.89
of security backports promised
3 years

Fearless SIMD, une bibliothèque Rust pour écrire du code de calcul rapide sans blocs unsafe, a atteint la version 1.0 le 21 septembre 2026. Cette version fige son API. Le code écrit aujourd'hui avec elle devrait donc continuer à compiler. C'est important, car plus de 1 000 crates Rust en dépendent déjà, directement ou via d'autres bibliothèques.

Le projet Linebender a annoncé la sortie sur son blog le 22 septembre. La version figure aussi sur docs.rs, l'hébergeur de documentation de Rust, avec la date du 21 septembre.

Ce qu'est le SIMD, et pourquoi Rust le rend difficile

SIMD signifie "single instruction, multiple data" (une instruction, plusieurs données). Un processeur moderne peut additionner, comparer ou multiplier plusieurs nombres avec une seule instruction au lieu d'un à la fois. Le code graphique, audio, de compression et d'image s'appuie sur lui pour la vitesse.

En Rust, la voie directe vers ces instructions passe par les "intrinsics". Ce sont des fonctions qui correspondent directement à une instruction du processeur. La plupart sont marquées unsafe. Les appeler sur un processeur qui ne possède pas l'instruction peut faire planter le programme. Rust demande au programmeur de promettre, à la main, que la vérification a été faite.

Chaque famille de processeurs a aussi son propre jeu d'instructions. Du code écrit pour l'AVX-512 d'Intel ne fait rien sur un téléphone Arm. Prendre en charge plusieurs puces oblige souvent à écrire la même routine plusieurs fois.

Ce que fait Fearless SIMD

La bibliothèque enveloppe ces deux problèmes dans du code sûr. Son README décrit "une façon d'utiliser le SIMD en toute sécurité, via les intrinsics comme via des abstractions sûres, tout en contenant elle-même remarquablement peu de code non sûr."

Elle propose quatre approches, selon le billet de Linebender :

  • Autovectorisation : aider le compilateur à transformer des boucles ordinaires en code SIMD.
  • Multiversioning : compiler plusieurs copies d'une fonction pour différentes puces et choisir la bonne à l'exécution.
  • Opérations portables : un seul ensemble de types vectoriels qui fonctionne sur chaque processeur pris en charge.
  • Intrinsics de plateforme : un accès direct aux instructions propres à une puce, sans unsafe.

C'est ce dernier point que Linebender met en avant. "Grâce à l'accès sûr aux intrinsics, il n'y a aucun plafond de performance", dit le billet.

ÉlémentDétail
Version1.0.0, 21 septembre 2026
Intel et AMDDe SSE2 à AVX-512
ArmNEON
NavigateursWebAssembly SIMD
Autres pucesRepli scalaire
Rust minimum1.89
DépendancesAucune dans la crate principale
LicenceApache-2.0 ou MIT

Une crate compagnon optionnelle, fearless_simd_macros, ajoute un attribut #[simd]. Le billet de blog en dit : "Placez-le sur n'importe quelle fonction SIMD et ça marche, tout simplement."

Ce qui change dans la 1.0

Le projet a commencé comme prototype en 2018, il y a huit ans, selon Linebender. La version 1.0 apporte quelques derniers changements incompatibles avant le gel, selon le dépôt GitHub :

  • witness() est renommé token() et passe dans un nouveau supertrait ExtractToken.
  • SimdBase::N et SimdMask::N sont renommés LEN.
  • as_array renvoie désormais une référence au lieu d'une copie.
  • Nouvelles opérations d'arithmétique saturante et de comptage de bits.
  • Nouvelles réductions : reduce_min, reduce_max, reduce_sum et reduce_product.
  • Nouvelles opérations de multiplication-addition fusionnée.

Le dépôt fixe aussi un engagement de support. La dernière version 1.0 pour chaque version minimale de Rust reçoit des correctifs de sécurité pendant au moins 3 ans après la sortie de cette version de Rust. Les futures versions pourront relever la version minimale de Rust lors de mises à jour mineures.

Ce que cela signifie pour les développeurs

Si vous utilisez une crate qui intègre Fearless SIMD, vérifiez si elle est passée à la 1.0. Les renommages ci-dessus casseront le code qui appelait witness(), utilisait N ou comptait sur as_array pour renvoyer une copie. Ce sont des corrections mécaniques, mais ce sont des erreurs de compilation tant que vous ne les faites pas.

Si vous maintenez du code SIMD unsafe écrit à la main, c'est le bon moment pour le comparer à la bibliothèque. Le principal gain est un seul chemin de code pour x86, Arm et WebAssembly au lieu de trois. Mesurez vos propres boucles critiques avant et après. L'affirmation du projet selon laquelle il n'y a pas de plafond de performance mérite d'être testée sur vos données.

Pour les auteurs de bibliothèques, l'API stable et la fenêtre de sécurité rendent Fearless SIMD plus sûr à exposer dans une interface publique. Avant la 1.0, un changement incompatible d'une dépendance devenait votre changement incompatible. Notez le plancher Rust 1.89, et vérifiez qu'il convient au plus ancien compilateur de vos utilisateurs.

Sources

  1. Fearless SIMD v1.0 is here - Linebender
  2. linebender/fearless_simd - GitHub
  3. fearless_simd 1.0.0 documentation - docs.rs

Articles liés