HeadlinesBriefing favicon HeadlinesBriefing.com

Go 1.26/1.27 APIs SIMD Independiente de Plataforma

Hacker News •
×

Go 1.26 y 1.27 incluyen APIs experimentales para operaciones SIMD (Single Instruction Multiple Data). SIMD es una característica nativa de muchos CPUs modernos que permite al software realizar operaciones uniformes sobre vectores de datos muy rápidamente, como sumar 8 pares de valores float64 en una sola instrucción. Puede acelerar significativamente muchas tareas computacionalmente intensivas, desde criptografía hasta procesamiento de datos e IA. De hecho, el recolector de basura Green Tea de Go incluso usa SIMD para acelerar el escaneo de memoria en busca de objetos vivos. Antes de estas nuevas APIs experimentales, la única forma de acceder a esta funcionalidad desde Go era escribiendo ensamblador Go.

Go 1.26 introdujo una API SIMD para amd64, y Go 1.27 agregó APIs para arm64 (específicamente NEON) y wasm. Sin embargo, un desafío básico para una API SIMD es la enorme variación entre plataformas, no solo en qué operaciones admiten, sino incluso en cómo se representan los vectores. Para proporcionar acceso completo al amplio espectro de estas plataformas, estas APIs residen en un paquete archsimd dependiente de la arquitectura.

Pero Go 1.27 va más allá de estas APIs dependientes de la arquitectura e introduce una interfaz SIMD experimental, totalmente portable, agnóstica de plataforma y tamaño, basada aproximadamente en Highway para C++. El objetivo es admitir código SIMD "write-once near-asm-performance" en plataformas con soporte SIMD, y proporcionar una emulación competente en plataformas que no (todavía) tienen soporte SIMD. El paquete simd actualmente admite AVX, AVX2 y AVX512 en amd64, NEON en arm64, y las instrucciones SIMD de wasm.