代码之家  ›  专栏  ›  技术社区  ›  Eugene Bujak

至强的gcc优化标志?

  •  37
  • Eugene Bujak  · 技术社区  · 17 年前

    我想让你输入在优化至强时使用哪些gcc编译器标志?

    6 回复  |  直到 17 年前
        1
  •  7
  •   Joel no not that Joel ShuggyCoUk    8 年前

    最新GCC/Xeon的更新。

    • Sandy-Bridge-based 至强

      -march=corei7-avx 对于GCC<4.9.0或 -march=sandybridge 对于GCC>= 4.9.0.

      这使得 Advanced Vector Extensions support 以及AES和 PCLMUL Sandy Bridge的指令集。以下是GCC i386/x86_64选项页面的概述:

      具有64位扩展的Intel Core i7 CPU,支持MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、AVX、AES和PCLMUL指令集。

    • Ivy-Bridge-based 至强 (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-based 至强 (E3-1xxx v3系列、E5-1xxx v3系统、E5-2xxx v3系统)。

      -march=core-avx2 -march=haswell 对于GCC>= 4.9.0.

      从GCC选项页面:

      Intel Haswell CPU,支持64位扩展、MOVBE、MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1、SSE4.2、POPCNT、AVX、AVX2、AES、PCLMUL、FSGSBASE、RDRND、FMA、BMI、BMI2和F16C指令集。

    • Broadwell-based 至强 (E3-12xx v4系列、E5-16xx v4系列)

      -三月=核心-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-based 至强 (E3-12xx v5系列)和 KabyLake-based 至强 (E3-12xx v6系列):

      -三月=核心-avx2 对于GCC 4.8.x或 -march=skylake 对于GCC 4.9.x或 -march=skylake-avx512 对于GCC>=5.x

      AVX-512 是256位高级向量扩展SIMD指令的512位扩展。

      从GCC选项页面:

    • Coffee Lake-based 至强 -三月=天湖-Vx512 .

    • Cascade Lake-based 至强 -march=cascade-lake (要求 gcc 9.x ).

      从GCC选项页面:

      AVX-512 Vector Neural Network Instructions (AVX512 VNNI)是AVX-512的x86扩展,旨在加速基于卷积神经网络的算法。

    • Cooper Lake-based 至强 (白金、黄金、白银、青铜): -march=cooperlake (要求 gcc 10.1 ).

      该开关启用AVX512BF16 ISA扩展。


    找出编译器将如何处理 -march=native 您可以使用的选项:

    gcc -march=native -Q --help=target
    
        2
  •  56
  •   manlio    8 年前

    更新版本的gcc有 -march=本地 这使编译器能够自动确定最佳 -march 旗帜。

        3
  •  20
  •   user83255    17 年前

    Xeon是一个营销术语,因此它涵盖了一长串内部结构非常不同的处理器。

    如果你指的是较新的Nehalem处理器(Core i7),那么 this slide 表示从4.3.1开始,gcc应该使用-march=generic(尽管您自己的应用程序测试可能会发现其他优于此的设置)。如果你想优化FP数学的这一方面,4.3系列还添加了-msse4.2。

    这是 some discussion 将英特尔编译器中的调优与一些gcc标志进行比较。

        4
  •  3
  •   Brian    17 年前

    march=native对于您自己的机器来说是可以的,但对于二进制版本来说是不好的。

    -march=nocona被建议用于原子330(p4/64bit) -march=core2代表core2

    我假设你要64位。

        6
  •  2
  •   Ringding    17 年前

    我对Intel CPU和x86_64的经验是,每次我试图告诉gcc针对特定的CPU类型进行优化时,性能都比-march=generic更差,而不是更好。当然是YMMV,但多年来我一直在玩这样的东西,而且一直都是这样。

    OTOH,在i386上,至少以i686为目标可能是有意义的,或者,如果你想要SSE数学,至少以Pentium 4为目标。