簡體   English   中英

至強的 gcc 優化標志?

[英]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、 RDRNDF16C 從 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標志。

Xeon 是一個營銷術語,因此它涵蓋了一長串內部結構截然不同的處理器。

如果您指的是較新的 Nehalem 處理器(Core i7),那么這張幻燈片表明從 4.3.1 gcc 開始應該使用 -march=generic(盡管您自己的應用程序測試可能會發現其他設置優於此)。 如果您希望優化 FP 數學的該方面,4.3 系列還添加了 -msse4.2。

這里有一些討論比較英特爾編譯器和一些 gcc 標志的調整。

以下將向您顯示處理器支持的所有標志:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM