Todos los programadores deberían conocer SIMD

Fuentes: Everyone Should Know SIMD

SIMD, siglas de Single Instruction, Multiple Data, es una técnica de la CPU que permite ejecutar una misma operación sobre múltiples datos en paralelo: en lugar de comparar un byte por ciclo, el procesador puede comparar 4, 8 o más bytes con una sola instrucción. Aunque goza de fama de compleja y reservada a software de muy alto rendimiento, Mitchell Hashimoto sostiene que cualquier desarrollador puede aprovechar sus fundamentos sin grandes complicaciones.

El artículo, ilustrado con ejemplos en Zig aunque válidos para cualquier lenguaje, explica que cualquier bucle que recorra bytes, caracteres o valores numéricos (por ejemplo, for (byte in bytes)) esconde una oportunidad de vectorización. Reescribirlo para procesar un vector completo por iteración produce aceleraciones directas de 4x, 8x o más. El único requisito real es que el bucle opere sobre conjuntos suficientemente grandes; con unos pocos bytes no compensa.

El autor describe los cinco pasos del patrón habitual: preparar el tipo vectorial y emitir las constantes (broadcast), recorrer la entrada en bloques del ancho del vector, ejecutar la comparación o aritmética sobre todos los lanes en paralelo, reducir o almacenar el resultado, y procesar los elementos sobrantes con un bucle escalar (scalar tail). Aplicado a Ghostty, su emulador de terminal, este enfoque convierte un bucle escalar de una línea que busca el final de una secuencia de codepoints imprimibles en 12 líneas que logran 4x de aceleración en CPUs ARM, 8x en Intel con AVX2 y 16x en estaciones de trabajo con AVX-512. La ganancia real de extremo a extremo ronda las 5x, perdiendo algo por el código auxiliar.