Go 1.27 embarque un package simd portable et expérimental. Et pour moi, c'est l'une des news Go les plus excitantes depuis les generics.
Le SIMD (Single Instruction, Multiple Data), c'est la capacité d'un CPU à appliquer une même opération à tout un vecteur de données en une seule instruction : au lieu d'additionner 8 paires de float64 une par une, le processeur les traite d'un coup.
Crypto, traitement de données, IA, tout ce qui mouline des tableaux de nombres en profite. Le problème, c'est que jusqu'ici la seule porte d'entrée en Go, c'était l'assembleur Go.
Donc personne n'y touchait, sauf pour quelques kernels ultra-critiques, et une bonne partie du CPU restait simplement inutilisée.
Go 1.26 avait ouvert le package archsimd pour amd64, et Go 1.27 va beaucoup plus loin avec :
- archsimd étendu à arm64 (NEON) et wasm
- un package simd portable, inspiré de Highway (la lib C++ de Google)
- une spécialisation automatique à la compilation pour AVX, AVX2, AVX-512, NEON et wasm
- une émulation propre sur les plateformes sans support SIMD, donc votre code tourne partout
Alors, Go devient-il un C avec un gopher ?
Non, et je pense que c'est justement là que c'est malin.
Le GC, le runtime et les goroutines sont toujours là.
Mais Go se rapproche encore un peu plus des instructions CPU sans vous faire payer le prix du C : pas de gestion mémoire manuelle, pas d'intrinsics à maintenir plateforme par plateforme.
Vous écrivez une fois, le compilateur fait le sale boulot.
Et le gain de perf en vue est énorme.
Sur une boucle vectorisable, passer de 1 à 8 ou 16 éléments traités par instruction, ce n'est pas de l'optimisation à 10 %, c'est un autre ordre de grandeur.
Le runtime lui-même montre la voie : le GC Green Tea utilise déjà le SIMD pour scanner la mémoire.
Mais il faut bien retenir une chose : c'est encore expérimental (activation via GOEXPERIMENT=simd), l'API est volontairement conservatrice (pas de ReduceSum avant Go 1.28, pas encore de SVE), et le gain réel dépendra de la part vraiment vectorisable de votre code.
Reste que cette news m'excite énormément, et je vais suivre de très près ce qui arrive avec Go 1.28.