El ingeniero de Google, Ilya Tocar, introdujo la noción de soporte AVX”ligero”dentro de la infraestructura del compilador LLVM para utilizar algunos beneficios de Advanced Vector Extensions (AVX), pero tratando de evitar el impacto de potencia/frecuencia que el uso de AVX-512 tiene en las generaciones anteriores de Intel. procesadores

Ayer se fusionó con LLVM 16 Git (justo antes de que finalizara el desarrollo de características de LLVM 16) y se introdujo el concepto AVX”ligero”en este compilador de código abierto. Este modo AVX ligero permite generar cargas/almacenes de 256 bits incluso si la preferencia está configurada (a través de la opción del compilador-mprefer-vector-width=128) para preferir un ancho de vector de 128 bits.

Este modo ligero de AVX se puede habilitar para el compilador Clang pasando +allow-light-256-bit a la opción del compilador-mattr=. Este modo ligero AVX está cableado para ser utilizado en procesadores Intel Icelake y más antiguos donde puede haber un impacto en el rendimiento (potencia/frecuencia) cuando se encuentra con el uso de AVX de 256 bits/512 bits. Las CPU Intel más nuevas no tienen ningún problema importante con el uso de AVX-512; en caso de que te lo hayas perdido, consulta mi comparación comparativa AVX-512 Sapphire Rapids. Del mismo modo, el soporte AVX-512 de AMD presentado con los procesadores Zen 4 tampoco tiene los problemas de frecuencia/potencia con AVX-512.

Ilya Tocar resumió este ligero trabajo de AVX para LLVM con el mensaje commit:

Las instrucciones AVX/AVX512 pueden provocar una caída de frecuencia, p. lago del cielo. La magnitud de la caída de frecuencia/rendimiento depende de la instrucción (multiplicación frente a carga/almacenamiento) y el ancho del vector. Actualmente, los usuarios que quieran evitar esta caída pueden especificar-mprefer-vector-width=128. Sin embargo, esto también evita generaciones de instrucciones de 256 bits de ancho, que no tienen una caída de frecuencia asociada (principalmente carga/almacenamiento).

Agregue un indicador de ajuste que permita generaciones de carga/almacenamiento AVX de 256 bits, incluso cuando se establece-mprefer-vector-width=128, para acelerar memcpy&co. Se verificó que ejecutar memcpy loop en todos los núcleos no tiene impacto en la frecuencia y cero contadores de rendimiento CORE_POWER:LVL[12]_TURBO_LICENSE.

Hace que la memoria de copia sea más rápida, por ejemplo:
BM_memcpy_aligned/256 80,7 GB/s ± 3 % 96,3 GB/s ± 9 % +19,33 % (p=0,000 n=9+9)

Esta opción AVX”ligera”para generaciones anteriores de CPU Intel se encontrará en LLVM 16.0, cuyo lanzamiento se espera para el 7 de marzo.

Categories: IT Info