Подтвердить что ты не робот

Gcc флаги оптимизации для Xeon?

Мне нужен ваш вход, который gcc-компилятор должен использовать при оптимизации для Xeons?

Там нет "xeon" в mtune или march, так что это самое близкое совпадение?

4b9b3361

Ответ 1

Xeon - это маркетинговый термин, так как он охватывает длинный список процессоров с очень разными внутренними компонентами.

Если вы имели в виду более новые процессоры Nehalem (Core i7), то на этом слайде указано, что с 4.3.1 gcc следует использовать -march = generic (хотя ваше собственное тестирование вашего собственного приложения может найти другие настройки, которые превосходят это). В серию 4.3 также добавлено -msse4.2, если вы хотите оптимизировать этот аспект математики FP.

Вот некоторые обсуждения, сравнивающие настройку в компиляторе Intel с некоторыми флагами gcc.

Ответ 2

Обновление для последних GCC/Xeon.

  • Xeon на базе Sandy Bridge (серия E3-12xx, серия E5-14xx/24xx, серия E5-16xx/26xx/46xx).

    -march=corei7-avx для GCC <4.9.0 или -march=sandybridge для GCC> = 4.9.0.

    Это обеспечивает поддержку расширенных векторных расширений, а также наборы инструкций AES и PCLMUL для Sandy Bridge. Вот обзор со страницы опций GCC i386/x86_64:

    Процессор Intel Core i7 с 64-разрядными расширениями, поддержка набора команд MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES и PCLMUL.

  • Xeon на базе Ivy-Bridge (серия E3-12xx v2, серия E5-14xx v2/24xx v2, серия E5-16xx v2/26xx v2/46xx v2, серия E7-28xx v2/48xx v2/88xx v2),

    -march=core-avx-i для GCC <4.9.0 или -march=ivybridge для GCC> = 4.9.0.

    Сюда входят параметры Sandy Bridge (corei7-avx) и поддержка новых наборов команд Ivy: FSGSBASE, RDRND и F16C. Со страницы настроек GCC:

    Процессор Intel Core с 64-разрядными расширениями, поддержка MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, AVX, AES, PCLMUL, FSGSBASE, RDRND и F16C6.

  • Xeon на базе Haswell (серия E3-1xxx v3, серия E5-1xxx v3, серия E5-2xxx v3).

    -march=core-avx2 для GCC 4.8.2/4.8.3 или -march=haswell для GCC> = 4.9.0.

    Со страницы настроек GCC:

    Процессор Intel Haswell с 64-разрядными расширениями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2 и F16C поддержка набора команд.

  • Xeon на базе Broadwell (серия E3-12xx v4, серия E5-16xx v4)

    -march=core-avx2 для GCC 4.8.x или -march=broadwell для GCC> = 4.9.0.

    Со страницы настроек GCC:

    Процессор Intel Broadwell с 64-разрядными расширениями, MOVBE, MMX, SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2, POPCNT, AVX, AVX2, AES, PCLMUL, FSGSBASE, RDRND, FMA, BMI, BMI2, F16C Поддержка команд RDSEED, ADCX и PREFETCHW.

  • Xeon на базе Skylake (серия E3-12xx v5) и Xeon на основе KabyLake (серия E3-12xx v6):

    -march=core-avx2 для GCC 4.8.x или -march=skylake для GCC 4.9.x или -march=skylake-avx512 для GCC> = 5.x

    AVX-512 - это 512-битные расширения инструкций SIMD 256-битных расширений векторных расширений.

    Со страницы настроек GCC:

    Серверный процессор Intel Skylake с 64-разрядными расширениями, 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, AVX512BW, AVX512DQ и AVX512CD поддерживают набор команд.

Чтобы узнать, что будет делать компилятор с -march=native вы можете использовать:

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

Ответ 3

более новые версии gcc имеют -march = native, которые позволяют компилятору автоматически определять оптимальный флаг -march.

Ответ 4

march = native подходит для вашей собственной машины, но плохо для двоичных выпусков.

-march = nocona предлагается для атома 330 (p4/64bit) -march = core2 для core2

Я предполагаю, что вы собираетесь 64-битным.

Ответ 5

Ниже приведены все флаги, поддерживаемые вашим процессором:

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

Лучший способ определить, какие оптимизации существуют для вашего proccesor, определенно зависит не только от модели, но и от какой версии gcc у вас есть в системе, которую вы компилируете. Обязательно проверьте, какая версия gcc у вас есть, и перекрестные ссылки на их документацию:

https://gcc.gnu.org/onlinedocs

то есть. У меня Slackware 14.1 x64, у которого есть gcc 4.8.2, поэтому я бы пошел здесь:

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

Ответ 6

Мой опыт работы с процессорами Intel и x86_64 заключался в том, что каждый раз, когда я пытался сказать gcc оптимизировать для определенного типа процессора, производительность ухудшилась, чем с -march = generic, а не лучше. YMMV, конечно, но я много раз играл с такими вещами много лет, и это всегда было так.

OTOH, на i386 может иметь смысл нацелить хотя бы i686 или, если вы хотите математику SSE, по крайней мере, Pentium 4.