indicadores de optimización gcc para Xeon?


Quisiera su entrada ¿qué indicadores de compilador gcc usar al optimizar para Xeons?

No hay 'xeon' en mtune o marzo, así que ¿cuál es la coincidencia más cercana?

Author: Eugene Bujak, 2009-06-03

6 answers

Xeon es un término de marketing, como tal, cubre una larga lista de procesadores con funciones internas muy diferentes.

Si se refiere a los nuevos procesadores Nehalem (Core i7) entonces esta diapositiva indica que a partir de 4.3.1 gcc debe ser use-march=generic (aunque su propia prueba de su propia aplicación puede encontrar otras configuraciones que superan esto). La serie 4.3 también agregó-msse4.2 si desea optimizar ese aspecto de las matemáticas FP.

Aquí está alguna discusión comparando la sintonización El compilador de Intel contra algunas banderas del CCG.

 7
Author: ShuggyCoUk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-05 06:25:09

Una actualización para GCC / Xeon reciente.

  • Sandy-Bridge-based Xeon (serie E3-12xx, serie E5-14xx / 24xx, serie E5-16xx / 26xx / 46xx).

    -march=corei7-avx para CCG -march=sandybridge para CCG >= 4.9.0.

    Esto permite que las Extensiones Vectoriales avanzadas soporten así como los conjuntos de instrucciones AES y PCLMUL para Sandy Bridge. Aquí está el resumen de la página de opciones de GCC i386 / x86_64:

    CPU Intel Core i7 con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y compatibilidad con conjuntos de instrucciones PCLMUL.

  • Ivy-Bridge-based Xeon (E3-12xx v2-series, E5-14xx v2/24xx v2-series, E5-16xx v2/26xx v2/46xx v2-series, E7-28xx v2/48xx v2/88xx v2-series).

    -march=core-avx-i para CCG -march=ivybridge para CCG >= 4.9.0.

    Esto incluye las opciones de Sandy Bridge (corei7-avx) mientras que también se apoya en los nuevos conjuntos de instrucciones Ivy: FSGSBASE, RDRNDy F16C. Desde la página de opciones de GCC:

    CPU Intel Core con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, compatibilidad con conjuntos de instrucciones AVX, AES, PCLMUL, FSGSBASE, RDRND y F16C6.

  • Basado en Haswell Xeon (E3-1xxx v3-series, E5-1xxx v3-series, E5-2xxx v3-series).

    -march=core-avx2 para el CCG 4.8.2 / 4.8.3 o -march=haswell para el CCG >= 4.9.0.

    Desde la página de opciones de GCC:

    CPU Intel Haswell con extensiones de 64 bits, soporte para conjuntos de instrucciones MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 y F16C.

  • Basado en Broadwell Xeon (serie E3-12xx v4, serie E5-16xx v4)

    -march=core-avx2 para CCG 4.8.x o -march=broadwell para GCC >= 4.9.0.

    Desde la página de opciones de GCC:

    CPU Intel Broadwell con extensiones de 64 bits, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX y soporte para conjuntos de instrucciones PREFETCHW.

  • Basado en Skylake Xeon (serie E3-12xx v5) y Basado en KabyLake Xeon (serie E3-12xx v6):

    -march=core-avx2 para CCG 4.8.x o -march=skylake para el CCG 4.9.x o -march=skylake-avx512 para CCG >= 5.x

    Desde la página de opciones de GCC:

    CPU del servidor Intel Skylake con 64 bits extensions, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, PKU, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C, RDSEED, ADCX, PREFETCHW, CLFLUSHOPT, XSAVEC, XSAVES, AVX512F, AVX512VL, Soporte de conjunto de instrucciones AVX512BW, AVX512DQ y AVX512CD.

Para averiguar qué hará el compilador con la opción -march=native puede usar:

gcc -march=native -Q --help=target
 55
Author: manlio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-05-04 07:50:44

Las versiones más recientes de gcc tienen -march=native que permite al compilador determinar automáticamente el indicador -march óptimo.

 20
Author: user83255,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-03 12:17:25

March=native está bien para su propia máquina, pero malo para las versiones binarias.

-march = nocona se sugiere para atom 330 (p4 / 64bit) - march = core2 es para core2

Asumo que vas a 64 bits.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-03 12:35:12

Lo siguiente le mostrará todas las banderas que admite su procesador:

cat /proc/cpuinfo | grep flags | head -1

La mejor manera de determinar qué optimizaciones existen para su proceso depende específicamente no solo del modelo, sino de la versión de gcc que tenga en el sistema que está compilando. Asegúrese de comprobar qué versión de gcc tiene, y referencias cruzadas en su documentación:

Https://gcc.gnu.org/onlinedocs

Es decir, tengo Slackware 14.1 x64, que tiene gcc 4.8.2, así que iría aquí:

Https://gcc.gnu.org/onlinedocs/gcc-4.8.2/gcc/i386-and-x86-64-Options.html#i386-and-x86-64-Options

 3
Author: slugman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-10-07 00:28:42

Mi experiencia con las CPU Intel y x86_64 ha sido que cada vez que intentaba decirle a gcc que optimizara para un tipo de CPU específico, el rendimiento era peor que con-march=generic, no mejor. YMMV, por supuesto, pero he estado jugando con cosas como esta muchas veces a lo largo de los años, y siempre ha sido así.

OTOH, en i386 podría tener sentido apuntar al menos a i686 o, si desea matemáticas SSE, al menos Pentium 4.

 2
Author: Ringding,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-07-10 07:32:05