Мне нужен ваш вход, который gcc-компилятор должен использовать при оптимизации для Xeons?
Там нет "xeon" в mtune или march, так что это самое близкое совпадение?
Мне нужен ваш вход, который gcc-компилятор должен использовать при оптимизации для Xeons?
Там нет "xeon" в mtune или march, так что это самое близкое совпадение?
Xeon - это маркетинговый термин, так как он охватывает длинный список процессоров с очень разными внутренними компонентами.
Если вы имели в виду более новые процессоры Nehalem (Core i7), то на этом слайде указано, что с 4.3.1 gcc следует использовать -march = generic (хотя ваше собственное тестирование вашего собственного приложения может найти другие настройки, которые превосходят это). В серию 4.3 также добавлено -msse4.2, если вы хотите оптимизировать этот аспект математики FP.
Вот некоторые обсуждения, сравнивающие настройку в компиляторе Intel с некоторыми флагами gcc.
Обновление для последних 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=skylake-avx512
. Чтобы узнать, что будет делать компилятор с -march=native
вы можете использовать:
gcc -march=native -Q --help=target
более новые версии gcc имеют -march = native, которые позволяют компилятору автоматически определять оптимальный флаг -march
.
march = native подходит для вашей собственной машины, но плохо для двоичных выпусков.
-march = nocona предлагается для атома 330 (p4/64bit) -march = core2 для core2
Я предполагаю, что вы собираетесь 64-битным.
Ниже приведены все флаги, поддерживаемые вашим процессором:
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
Мой опыт работы с процессорами Intel и x86_64 заключался в том, что каждый раз, когда я пытался сказать gcc оптимизировать для определенного типа процессора, производительность ухудшилась, чем с -march = generic, а не лучше. YMMV, конечно, но я много раз играл с такими вещами много лет, и это всегда было так.
OTOH, на i386 может иметь смысл нацелить хотя бы i686 или, если вы хотите математику SSE, по крайней мере, Pentium 4.