HeadlinesBriefing favicon HeadlinesBriefing.com

Go 1.26/1.27 APIs SIMD Independente de Plataforma

Hacker News •
×

Go 1.26 e 1.27 incluem APIs. APIs interfaces SIMD APIs experimentais para operações SIMD (Single Instruction Multiple Data). SIMD é um recurso nativo de muitos de muitos CPUs modernos que permite que o software execute operações uniformemente uniformes sobre vetores de dados muito rapidamente, como somar 8 pares de valores float64 em uma única instrução de dados muito rapidamente, como somar 8 pares de valores float64 em uma única instrução. Pode acelerar significativamente muitas tarefas computacionalmente intensivas, variando de criptografia a processamento de dados a IA. Na verdade, o coletor de lixo Green Tea do Go até usa SIMD para acelerar a varredura de memória em busca de objetos vivos. Antes dessas novas APIs experimentais, a única forma de acessar esta funcionalidade do Go era escrevendo assembly Go.

Go 1.26 e 1.27 incluem APIs experimentais para operações SIMD (Single Instruction Multiple Data). SIMD é um recurso nativo de muitos CPUs modernos que permite que o software execute operações uniformes sobre vetores de dados muito rapidamente, como somar 8 pares de valores float64 em uma única instrução. Pode acelerar significativamente muitas tarefas computacionalmente intensivas, variando de criptografia a processamento de dados a IA. Na verdade, o coletor de lixo Green Tea do Go até usa SIMD para acelerar a varredura de memória em busca de objetos vivos. Antes dessas novas APIs experimentais, a única forma de acessar esta funcionalidade do Go era escrevendo assembly Go.

Go 1.26 introduziu uma API SIMD para amd64, e Go 1.27 adicionou APIs para arm64 (específicamente NEON) e wasm. No entanto, um desafio básico para uma API SIMD é a enorme variação entre plataformas, não apenas em o que operações elas suportam, mas mesmo em como os vetores são representados. Para fornecer acesso completo ao amplo espectro dessas plataformas, essas APIs residem em um pacote archsimd dependente da arquitetura.

Mas Go 1.27 vai além dessas APIs dependentes da arquitetura e introduz uma interface SIMD experimental, totalmente portátil, agnóstica de plataforma e tamanho, baseada aproximadamente em Highway para C++. O objetivo é admitir código "write-once near-asm-performance" SIMD em plataformas com suporte SIMD, e fornecer uma emulação competente em plataformas que não (ainda) têm suporte SIMD. O pacote simd atualmente suporta AVX, AVX2 e AVX512 em amd64, NEON em arm64, e as instruções SIMD do wasm.

Arquiteturas SIMD variam em várias dimensões, incluindo tamanhos de vetores, abordagens de mascaramento e primitivas de operação. Cada arquitetura fornece seus próprios primitivos para rearranjar elementos de vetor e suporta diferentes operações relacionadas a crypto. Mesmo operações básicas de aritmética podem ter suporte variável; por exemplo, o wasm carece de comparações para vetores de inteiros de 64 bits.