La semana pasada, cuando lanzó los procesadores AMD EPYC 9004″Genoa”, AMD lanzó AOCC 4.0 como la versión más nueva de su compilador optimizador C/C++ que ahora es compatible con su microarquitectura Zen 4. La semana pasada ejecuté algunos puntos de referencia iniciales de AOCC 4.0 y este LLVM/Clang descendente se veía bastante favorable en relación con el LLVM/Clang ascendente, mientras que desde entonces he podido realizar puntos de referencia más completos en una amplia variedad de C/C++ abiertos. cargas de trabajo de origen. Aquí está esa ronda más extensa de evaluación comparativa de AOCC 4.0 contra los compiladores de código abierto LLVM/Clang y AOCC.

Para la comparación de evaluación comparativa de AOCC 4.0 de hoy, se probaron los siguientes compiladores:

-AOCC 4.0 como la nueva versión Znver4 de AMD Optimizing C/C++ Compilador y derivado de LLVM Clang 14 upstream.

-GCC 12.2 como la versión estable actual de GNU Compiler Collection. No hay un trabajo específico de Zen 4 en GCC 12, pero obviamente la compatibilidad con AVX-512 y las demás instrucciones han sido respaldadas durante años por GNU Compiler Collection.

-GCC 13.0.0 como el estado de desarrollo actual antes de la versión estable de GCC 13.1 del próximo año. Se utilizó GCC 13 Git a partir de esta semana. GCC 13 obtuvo recientemente la habilitación inicial de Znver4, pero actualmente está haciendo uso de las tablas de costos/ajustes de Zen 3. Hay más trabajo de Znver4 por delante, aunque aún no está disponible.

-LLVM Clang 14.0.6 disponible en Ubuntu 22.10.

-LLVM Clang 15.0.2 usando el repositorio LLVM.org APT para la última versión del compilador. Upstream LLVM/Clang incluso con 16 Git todavía carece de parches de habilitación de Znver4. A partir de esta mañana, todavía no hay parches”znver4″pendientes en la cola de revisión de LLVM.

Con todos estos compiladores probados, los CFLAGS/CXXFLAGS se mantuvieron igual para apuntar al ISA nativo del procesador, niveles de optimización-O3 y también habilitar optimizaciones de tiempo de enlace (LTO) en nombre de una comparación de rendimiento agresiva.

Debido a que mi único servidor AMD EPYC 9004″Genoa”en este momento está ocupado ejecutando otros puntos de referencia, esta ronda de evaluación comparativa de Zen 4 AOCC se realizó con un procesador de escritorio AMD Ryzen 9 7950X. La CPU de escritorio Zen 4 de 16 núcleos ejecutaba Ubuntu 22.10 con una compilación de kernel Linux 6.1 Git.

Con el exigente LeelaChessZero, que es un motor de ajedrez que aprovecha las redes neuronales, tanto los back-end Eigen como BLAS mostraban el rendimiento más rápido cuando se construye bajo AOCC 4.0. (GCC 13 no pudo compilar esta prueba debido al aumento de advertencias/errores). El rendimiento de LLVM/Clang ascendente se veía bien para LC0 sobre GCC, pero los números de AOCC 4.0 muestran que puede haber beneficios reales del ajuste Znver4 de AMD.

Para otras pruebas como CLOMP en la medición de la eficiencia de OpenMP, también mostraron los mejores resultados cuando se crearon bajo AOCC 4.0 para esta computadora de escritorio Ryzen 9 7950X.

Por supuesto, para muchos programas C/C++, el compilador no hace mucha diferencia en el rendimiento resultante… Hace años, cuando Clang todavía estaba tratando de ponerse al día con GCC, la escena de referencia del compilador era mucho más animada, mientras que en estos días Clang ha demostrado constantemente que a menudo puede generar en código menos comparable a GCC, mientras que muchas veces ahora lidera la carrera.

LLVM/Clang y AOCC 4.0 fueron más rápidos que GCC 12.2 en los puntos de referencia criptográficos de Crypto++. Crypto++ 8.2 no se pudo compilar con GCC 13 debido al aumento de las advertencias/errores del compilador.

Simdjson es un analizador JSON de alto rendimiento que puede utilizar AVX-512 en CPU compatibles, como Zen 4. Para algunos de los puntos de referencia de simdjson, el compilador AOCC 4.0 produjo un aumento medible en el rendimiento, pero en otros escenarios de prueba, el rendimiento fue comparable al de LLVM Clang 14 upstream.

Por supuesto, generalmente vale la pena proporcionar las cargas de trabajo de la mayoría importancia para usted o su empresa, ya que los beneficios del compilador pueden variar.

La codificación de imágenes JPEG XL mostró algunas aceleraciones agradables usando LLVM Clang 15 upstream. Con suerte, la próxima versión de AOCC (4.1) se basará de LLVM 14 a LLVM 15.

En lo que respecta a la decodificación de imágenes JPEG-XL, AOCC 4.0 se disparó frente a los otros compiladores.

Con la codificación de imágenes WebP fue una carrera mucho más reñida.

Las operaciones de creación de imágenes con subprocesos de OpenMP se combinaron con GraphicsMagick, cuyo compilador funcionó mejor.

Video H.265 la codificación con Kvazaar tuvo el mejor desempeño cuando se creó con el compilador AOCC 4.0 de AMD.

Mientras tanto, la codificación de video con los codificadores SVT-AV1 y SVT-HEVC de Intel no notó mucha diferencia con respecto a los compiladores probados.

Coremark fue una de las raras pruebas en las que el binario construido por AOCC 4.0 quedó en último lugar.

También hubo una regresión de rendimiento sorprendente con C-Ray construido bajo AOCC 4.0.

AOCC 4.0 estaba produciendo el binario más rápido para la codificación de imágenes AVIF.

La biblioteca de redes neuronales oneDNN construida por AOCC a menudo estaba al frente, pero por márgenes muy pequeños.

AOCC 4.0 estaba mostrando algo de ni ce mejora el rendimiento con el software de procesamiento de señal digital (DSP) de código abierto Liquid-DSP.

La compresión de texturas de ASTC fue ligeramente más rápida con AOCC 4.0 y, en general, los compiladores LLVM/Clang produjeron un rendimiento considerablemente mejor que GCC.

El software de red neuronal NCNN disfrutaba de un rendimiento más rápido cuando se compilaba con AOCC 4.0.

El software de red neuronal TNN de Tencent también obtenía algunas mejoras de rendimiento con el binario integrado por AOCC 4.0.

Llevé a cabo una amplia variedad de pruebas comparativas de C/C++ construidas bajo estos cinco compiladores diferentes. Vea todos mis resultados de referencia completos a través de esta página de resultados.

De 190 pruebas realizadas, AMD Optimizer C/C++ Compiler fue el favorito alrededor del 55 % de las veces. El resto del tiempo hubo una división casi uniforme entre los otros compiladores/versiones de LLVM/Clang y GCC probados.

Los binarios integrados de AOCC 4.0 fueron los más lentos solo el 9,5 % del tiempo, mientras que GCC 12.2 tuvo el la mayoría de los últimos lugares terminan con un 40 %.

Si se toma la media geométrica para el subconjunto de puntos de referencia que se ejecutaron correctamente en todos los compiladores probados, AOCC 4.0 fue la excepción porque su rendimiento fue mediblemente diferente al resto. AOCC 4.0 en general estaba dando un 4 % más de rendimiento que la versión estable actual de GCC 12. Por supuesto, será interesante ver cómo se comparan estos números una vez que tanto GCC como LLVM/Clang upstream hayan tenido soporte y ajuste optimizados para Zen 4. En cualquier caso, AOCC 4.0 muestra el potencial y el beneficio de las optimizaciones del compilador y, para los proveedores y desarrolladores de software, ciertamente puede valer la pena evaluar el rendimiento de compiladores alternativos. Esta ronda de evaluación comparativa se realizó con un AMD Ryzen 9 7950X, mientras que, a medida que el tiempo del sistema lo permita, también se llevarán a cabo aún más evaluaciones comparativas del compilador en un servidor AMD EPYC”Genoa”de alto número de núcleos.

Categories: IT Info