2009-06-03 16 views
31

Me gustaría saber qué entrada utiliza el compilador gcc para optimizar Xeons.banderas de optimización gcc para Xeon?

No hay 'xeon' en mtune o march, entonces ¿cuál es la combinación más cercana?

+3

Es posible que desee ser más específico sobre a qué Xeon se dirige. La marca Xeon existe desde hace bastante tiempo y abarca una gama de arquitecturas muy diferentes. –

Respuesta

7

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

Si se refería a los procesadores Nehalem más nuevos (Core i7), entonces this slide indica que a partir de 4.3.1 gcc se debe usar -march = generic (aunque su propia prueba de su propia aplicación puede encontrar otras configuraciones que superen esto). La serie 4.3 también agregó -msse4.2 si desea optimizar ese aspecto de las matemáticas FP.

Aquí está some discussion comparando el ajuste en el compilador de Intel versus algunos indicadores de gcc.

+4

La discusión es un enlace roto. De hecho, ambos enlaces están rotos. :) –

20

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

+1

Combina eso con -mtune = native y listo. – ismail

+14

en realidad, si no especifica explícitamente -mtune, -march tiene una mtune implícita igual a la marca aprobada de acuerdo con gcc docs. – user83255

+0

Tenga en cuenta que el código creado con -march = native no necesariamente se ejecutará en CPU que no sea el host en el que se compiló. – bleater

3

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

-march = nocona se sugiere por átomo de 330 (P4/64bit) -march = Core2 es para Core2

Estoy asumiendo que va de 64 bits.

2

Mi experiencia con las CPU Intel y x86_64 ha sido que cada vez que trato de decirle a gcc que optimice para un tipo de CPU específico, el rendimiento empeoró con respecto a -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 para apuntar al menos i686 o, si se quiere SSE matemáticas, al menos Pentium 4.

51

Una reciente actualización para GCC/Xeon.

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

    -march=corei7-avx para GCC < 4.9.0 o -march=sandybridge para GCC> = 4.9.0.

    Esto habilita el Advanced Vector Extensions support así como los conjuntos de instrucciones AES y PCLMUL para Sandy Bridge. Aquí está el resumen de la página de opciones i386/x86_64 GCC:

    Intel Core i7 CPU con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES y PCLMUL instrucción conjunto de apoyo.

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

    -march=core-avx-i para GCC < 4.9.0 o -march=ivybridge para GCC> = 4.9.0.

    Esto incluye las opciones de Sandy Bridge (corei7-avx) al tiempo que hace un viraje para admitir los nuevos conjuntos de instrucciones de Ivy: FSGSBASE, RDRND y F16C. Desde la página de opciones del CCG:

    CPU Intel Core

    con extensiones de 64 bits, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND e instrucción F16C6 establecer soporte.

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

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

    De GCC página de opciones:

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

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

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

    De GCC página de opciones:

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

  • Skylake-based Xeon (serie v5 E3-12xx)

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

    De GCC página de opciones:

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

para averiguar lo que el compilador va a hacer con la opción -march=native puede utilizar:

gcc -march=native -Q --help=target 
3

A continuación se le mostrará todas las banderas de su procesador es compatible con:

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

La mejor manera de determinar qué optimizaciones existen para su procesador 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 verificar qué versión de gcc que tiene, y la cruz de referencia en su documentación:

https://gcc.gnu.org/onlinedocs

es decir, tengo Slackware 14.1 x 64, que tiene gcc 4.8.2, así que me quedaría aquí:

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

Cuestiones relacionadas