Go 1.27 étend son SIMD expérimental à arm64 et wasm avec simd/archsimd

Par:
francoistonic

mer, 07/10/2026 - 06:06

Actualité par la rédaction de Programmez!

Go 1.27 étend l'API SIMD expérimentale, limitée à amd64 depuis Go 1.26, à deux architectures de plus : arm64 et Wasm. L'équipe Go l'a publié le 2 octobre dans un billet de Junyang Shao et David Chase. 

Les nouvelles API s'intègre au package simd/archsimd, la couche de bas niveau sur laquelle repose le package simdportable, l'équivalent des intrinsics dans d'autres langages. Elles s'activent en compilant avec GOEXPERIMENT=simd. Avant l'introduction de cette API expérimentale, écrire directement du SIMD en Go passait par l'assembleur. Le support amd64 couvre AVX, AVX2 et une bonne part d'AVX-512 ; arm64 couvre NEON, tandis que SVE et SVE2 sont en cours d'intégration ; Wasm est presque complet grâce à son abstraction SIMD 128 bits. 

Les extensions matricielles AMX et SME ne sont pas prises en charge ; leur intégration nécessiterait notamment une représentation des matrices. Le parti pris de conception : des types distincts par forme de vecteur (Float32x4, Int32x8, Uint8x16) avec les opérations en méthodes, un seul nom quand la sémantique est identique (x.Add(y) plutôt que 18 fonctions), des noms différents quand le comportement diverge aux bords (PermuteOrZero sur amd64, LookupOrZero sur NEON et Wasm), et des réinterprétations de type sans coût comme ToBits() à la place des méthodes As de Go 1.26. L'équipe attend les retours sur l'issue #73787.

Annonce : https://go.dev/blog/archsimd