gcc флаги оптимизации для Xeon? - PullRequest
35 голосов
/ 03 июня 2009

Хотелось бы, чтобы вы указали, какие флаги компилятора gcc использовать при оптимизации для Xeons?

В mtune или march нет «xeon», так что же является ближайшим совпадением?

Ответы [ 6 ]

57 голосов
/ 02 августа 2014

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

  • на основе песчаного моста Xeon (серия E3-12xx, серия E5-14xx / 24xx, серия E5-16xx / 26xx / 46xx).

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

    Это позволяет Advanced Vector Extensions поддерживать , а также наборы команд AES и PCLMUL для Sandy Bridge. Вот обзор со страницы параметров GCC i386 / x86_64:

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

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

    -march=core-avx-i для GCC <4.9.0 или <code>-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.

  • на основе Haswell Xeon (серия 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.

  • на базе Broadwell Xeon (серия 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.

  • на основе Skylake Xeon (серия E3-12xx v5) и на основе KabyLake Xeon (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
20 голосов
/ 03 июня 2009

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

7 голосов
/ 03 июня 2009

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

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

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

3 голосов
/ 07 октября 2014

Далее будут показаны все флаги, поддерживаемые вашим процессором:

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

Лучший способ определить, какие оптимизации существуют для вашего обработчика, зависит, в частности, не только от модели, но и от того, какую версию 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

3 голосов
/ 03 июня 2009

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

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

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

2 голосов
/ 10 июля 2009

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

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

...