Go 1.27 introduce SIMD portátil para mejorar el rendimiento

Fuentes: Go 1.27 introduces portable SIMD for performance gains

Go 1.27 incorpora una API experimental de SIMD (Single Instruction Multiple Data) que permite a los desarrolladores acceder a operaciones de vectorización sin depender de la arquitectura específica del hardware. Esta novedad, que se complementa con las APIs experimentales de Go 1.26 para amd64 y 1.27 para arm64 y wasm, resuelve una limitación crítica: la anterior dependencia exclusiva de Go assembly para aprovechar estas capacidades, lo que dejaba inutilizado gran parte del potencial de las CPU modernas en aplicaciones no críticas.

El nuevo paquete 'simd' está diseñado para ser agnóstico a la plataforma y al tamaño de los vectores, ocultando las variaciones complejas entre arquitecturas como AVX, NEON y SVE. Su objetivo es proporcionar código de rendimiento cercano al de ensamblador nativo en plataformas con soporte SIMD, mientras que en aquellas sin soporte, emula las operaciones de forma eficiente. La API se basa en la librería Highway de C++ y soporta actualmente operaciones de carga, almacenamiento y aritmética básica para tipos como Float32s, Float64s e Int64s.

Para activar esta funcionalidad, los usuarios deben establecer el entorno GOEXPERIMENT=simd. El paquete introduce tipos de vector capitalizados, como simd.Float32s, que se cargan y almacenan en slices estándar. Aunque la primera versión experimental no incluye una función de suma reducida directa, se espera que 'ReduceSum' esté disponible en futuras actualizaciones. Esta herramienta busca simplificar la escritura y prueba de código SIMD multiplataforma, facilitando la optimización de algoritmos de procesamiento de datos y tareas computacionales intensivas en Go.