HeadlinesBriefing favicon HeadlinesBriefing.com

Go 1.26/1.27 API SIMD Indépendante de Plateforme

Hacker News •
×

Go 1.26 et 1.27 comprennent des API expérimentales pour les opérations SIMD (Single Instruction Multiple Data). Le SIMD est une fonctionnalité native de nombreux CPUs modernes qui permet au logiciel d'effectuer des opérations uniformes sur des vecteurs de données très rapidement, comme l'ajout de 8 paires de valeurs float64 en une seule instruction. Il peut accélérer considérablement de nombreuses tâches informatiquement intensives, allant de la cryptographie au traitement des données à l'IA. En fait, le collecteur de déchets Green Tea de Go utilise même le SIMD pour accélérer le balayage de la mémoire à la recherche d'objets vivants. Avant ces nouvelles API expérimentales, la seule façon d'accéder à cette fonctionnalité depuis Go était d'écrire du code assembleur Go.

Go 1.26 a introduit une API SIMD pour amd64, et Go 1.27 a ajouté des API pour arm64 (spécifiquement NEON) et wasm. Cependant, un défi de base pour une API SIMD est la énorme variation entre les plateformes, non seulement dans les opérations qu'elles supportent, mais même dans la façon dont les vecteurs sont représentés. Pour fournir un accès complet à la largeur de ces plateformes, ces API résident dans un package archsimd dépendant de l'architecture.

Mais Go 1.27 va au-delà de ces API dépendantes de l'architecture et introduit une interface SIMD expérimentale, entièrement portable, agnostique de plateforme et de taille, basée approximativement sur Highway pour C++. L'objectif est de prendre en charge du code "write-once near-asm-performance" SIMD sur des plateformes avec support SIMD, et de fournir une émulation compétente sur des plateformes qui ne (pas encore) ont support SIMD. Le package simd prend actuellement en charge AVX, AVX2 et AVX512 sur amd64, NEON sur arm64, et les instructions SIMD de wasm.