在编译时启用 AVX512 支持会显着降低性能

问题描述 投票:0回答:1

我有一个使用静态库的 C/C++ 项目。该图书馆是为“天湖”建筑而建的。该项目是一个数据处理模块,即它执行许多算术运算、内存复制、搜索、比较等

CPU为Xeon Gold 6130T,支持AVX512。我尝试使用

-march=skylake
-march=skylake-avx512
编译我的项目,然后与库链接。

使用

-march=skylake-avx512
时,与使用
-march=skylake
构建的项目相比,项目性能显着下降(平均下降 30%)。

这该如何解释呢?可能是什么原因?

信息:

  • Linux 3.10
  • 海湾合作委员会9.2
  • 英特尔至强金牌 6130T
linux performance gcc x86-64 avx512
1个回答
12
投票

项目绩效显着下降(平均下降30%)

在无法轻松矢量化的代码中,零星的 AVX 指令会降低 CPU 的频率,但不会带来任何好处。在这种情况下,您可能需要完全关闭 AVX 指令。

请参阅高级矢量扩展,降频

由于 AVX 指令更宽并产生更多热量,因此英特尔处理器在执行此类指令时会降低 Turbo Boost 频率限制。节流分为三级:

  • L0 (100%):正常涡轮增压限制。
  • L1 (~85%):“AVX 提升”限制。由 256 位“重”(浮点单元:FP 数学和整数乘法)指令软触发。由“轻”(所有其他)512 位指令硬触发。
  • L2 (~60%):“AVX-512 提升”限制。 由 512 位重指令软触发。 频率转换可以是软的或硬的。硬转换是指一旦发现这样的指令就降低频率;软转换意味着仅在达到匹配指令的阈值数量后才降低频率。限制是每个线程。

降频意味着在具有英特尔处理器的混合工作负载中使用 AVX 可能会导致频率损失,尽管它在“纯”环境中速度更快。避免使用宽而重的指令有助于最大限度地减少这些情况下的影响。 AVX-512VL 是在 AVX-512 中仅使用 256 位操作数的示例,使其成为混合负载的合理默认值。

另外,请参阅

© www.soinside.com 2019 - 2024. All rights reserved.