BookinglyTech News
Software

AMD envía parche a GCC para optimizar cargas extendidas en x86_64

La optimización generaliza el uso de registros ZMM para mejorar el rendimiento en operaciones de carga y conversión, sin depender de arquitecturas Zen específicas.

2 min de lecturaPhoronix0 vistas

AMD ha publicado un nuevo parche para la GNU Compiler Collection (GCC) que introdujo una optimización de cargas extendidas (Extended Load Optimization) para la arquitectura x86_64. A diferencia de los trabajos anteriores centrados exclusivamente en las líneas de procesadores Zen, esta mejora es general y busca beneficiar a cualquier código que combine cargas de tipos más estrechos con operaciones aritméticas de tipos más anchos.

Detalle técnico del cambio

Un miembro del equipo de compiladores de AMD, Sridevi, explicó que actualmente GCC genera instrucciones vextract para estos patrones, cuando podría aprovechar las cargas extendidas con registros ZMM para lograr un mejor rendimiento. El parche añade soporte para identificar el patrón de carga y conversión en el árbol SLP (Superword Level Parallelism) y acota el tipo del vector de carga a un tipo más estrecho si la arquitectura de destino admite la carga y extensión fusionada.

La función vect_optimize_slp_widening_loads se ejecuta en tree-vect-loop.cc antes del análisis de operaciones SLP. Según la documentación publicada, esta implementación no afecta al cálculo de costes porque no se computa el coste de vectorización usando el tipo de carga antiguo (ancho). Cuando se registran los costes de las operaciones SLP por primera vez, ya ven el tipo de carga acotado. Además, se evita cualquier efecto secundario no previsto ya que el acotamiento solo se aplica si la carga se refiere solo una vez en el grafo SLP, es decir, solo por la conversión que la sigue. La estructura del árbol SLP y el IR GIMPLE no se modifican; solo se actualiza un campo de análisis SLP.

Este movimiento marca un cambio en la estrategia de AMD, que ha comenzado a upstreamear (subir al flujo principal) el soporte de objetivos Zen en GCC y LLVM/Clang antes del lanzamiento de los chips, en lugar de dejarlo a sus socios como SUSE. Aunque el parche no depende de objetivos específicos de Zen, es un indicador de la mayor inversión de la compañía en optimizaciones generales del compilador.

El parche está actualmente en revisión para su posible inclusión en GCC 17. No se han proporcionado cifras de rendimiento cuantificables junto al parche público, lo que deja el impacto exacto en el rendimiento por ver en las pruebas posteriores.