Análisis de Rendimiento LLVM-MCA: Trampas de la Optimización de Vectorización
El autor encontró un problema de degradación del rendimiento al vectorizar código usando ARM NEON. El código inicial usaba cinco instrucciones de carga (5L), mientras que la versión optimizada usaba dos instrucciones de carga y tres instrucciones de extensión (2L3E) para reducir los accesos a la memoria. Sorprendentemente, la versión 2L3E fue más lenta. Usando LLVM-MCA para el análisis de rendimiento, se descubrió que 2L3E causaba cuellos de botella en las unidades de ejecución de la CPU, una utilización de recursos desequilibrada y dependencias de instrucciones más fuertes, lo que llevaba a una regresión del rendimiento. La versión 5L tuvo un mejor rendimiento debido a su uso más equilibrado de los recursos y las instrucciones de carga independientes. Este estudio de caso destaca cómo las optimizaciones aparentemente sólidas pueden resultar en una degradación del rendimiento si no se consideran la contención de recursos de la CPU y las dependencias de las instrucciones; LLVM-MCA resulta una herramienta valiosa para analizar estos problemas.