[英]gcc optimization flags for Xeon?
我希望您的輸入在針對至強進行優化時使用哪些 gcc 編譯器標志?
mtune 或 March 中沒有“至強”,那么哪個是最接近的匹配?
最近 GCC / Xeon 的更新。
基於 Sandy-Bridge 的Xeon (E3-12xx 系列、E5-14xx/24xx 系列、E5-16xx/26xx/46xx 系列)。
-march=corei7-avx
對於 GCC < 4.9.0 或-march=sandybridge
對於 GCC >= 4.9.0。
這將啟用高級矢量擴展支持以及 Sandy Bridge 的 AES 和PCLMUL指令集。 以下是 GCC i386/x86_64 選項頁面的概述:
具有 64 位擴展的 Intel Core i7 CPU,支持 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 系列、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 選項頁面:
具有 64 位擴展的 Intel Core CPU,支持 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 選項頁面:
具有 64 位擴展的 Intel Haswell CPU、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 選項頁面:
具有 64 位擴展的 Intel Broadwell CPU、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是 256 位高級矢量擴展 SIMD 指令的 512 位擴展。
從 GCC 選項頁面:
具有 64 位擴展的 Intel Skylake 服務器 CPU、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 指令集支持。
基於 Coffee Lake 的Xeon (E-21xx): -march=skylake-avx512
。
基於 Cascade Lake 的Xeon (Platinum 8200/9200 系列、Gold 5200/6200 系列、Silver 4100/4200 系列、Bronze 3100/3200 系列):-march -march=cascade-lake
(需要gcc 9.x )。
從 GCC 選項頁面:
啟用 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、CLWB、AVX512VL、AVX512BW、AVX512DQ、AVX512CD 和 AVX512VNNI。
AVX-512 矢量神經網絡指令(AVX512 VNNI) 是 x86 擴展,是 AVX-512 的一部分,旨在加速基於卷積神經網絡的算法。
基於 Cooper Lake 的Xeon (白金、金、銀、銅):- -march=cooperlake
(需要gcc 10.1 )。
該開關啟用 AVX512BF16 ISA 擴展。
要了解編譯器將如何使用-march=native
選項,您可以使用:
gcc -march=native -Q --help=target
較新版本的 gcc 具有-march=native可讓編譯器自動確定最佳的-march
標志。
以下將向您顯示處理器支持的所有標志:
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
March=native 適用於您自己的機器,但不適用於二進制版本。
-march=nocona 建議用於 atom 330 (p4/64bit) -march=core2 用於 core2
我假設你要去 64 位。
我使用 Intel CPU 和 x86_64 的經驗是,每次我試圖告訴 gcc 針對特定 CPU 類型進行優化時,性能都會比使用 -march=generic 更差,而不是更好。 YMMV,當然,但這些年來我一直在玩這樣的東西很多次,而且一直都是這樣。
OTOH,在 i386 上,目標至少是 i686 可能是有意義的,或者,如果您想要 SSE 數學,至少是奔騰 4。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.