所有支持AVX2的CPU都支持BMI2或popcnt吗?

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

这里,我了解到AVX的支持并不意味着BMI1的支持。那么AVX2怎么样:所有支持AVX2的CPU也都支持BMI2吗?另外,AVX2的支持是否就意味着popcnt的支持?

查遍谷歌也找不到明确的答案。我得到的最接近的是 AVX 支持是否意味着 BMI1 支持?.

assembly x86-64 avx2 bmi
2个回答
3
投票

所有具有 AVX2 的真实硬件也具有 BMI2。

AMD Zen 2 及更早版本的速度慢得无法使用

pdep
/
pext
,因此,如果您正在进行 CPU 检测以设置函数指针,则需要检查这些 CPU 型号而不是 BMI2 的可用性在循环内使用任一指令。如果支持的话其他 BMI2 指令也可以。

几乎所有 AVX2 硬件也具有 FMA,但不完全如此。

BMI1/2 和 FMA3 是

-march=x86-64-v3
功能级别的一部分(本质上是 Haswell,但没有 TSX、AES-NI、
rdrand
和其他一些东西。 https://en.wikipedia.org/wiki/X86-64#Microarchitecture_levels)。


很可能所有未来的 CPU 都会同时具备 AVX2+BMI2,或者两者都不具备,至少在商业相关的主流 CPU 中是这样,尽管

pdep
pext
确实需要大量晶体管作为执行单元,与其他所需的东西分开对于任何其他指令。 (AVX-512 的按位版本
vpcompressb
/
vpexpandb
。)或缓慢的微代码。

AVX2 和 BMI2 具有单独的功能位,因此模拟器或虚拟机可以在启用 AVX2 的同时禁用 BMI2,因此 最好检查两者。 (并且在使用 CPUID 检查是否支持 xgetbv 后,操作系统已启用 AVX

xgetbv
)。如果您尝试运行 BMI2 指令,模拟器甚至可能会出现故障(与 VM 不同:没有控制寄存器位会导致其通常支持的 BMI2 指令上的 CPU 硬件出现故障,这与 SSE/AVX/AVX-512 不同。)

您不需要没有 BMI2 版本函数的单独 AVX2,除非您想在循环内使用

pdep

/
pext
。如果有人设置了一个奇怪的模拟器或虚拟机,因为缺少 BMI2 而阻止您的代码使用其 AVX2 功能,那就是他们的问题,并且不太可能意外发生。

迄今为止的CPU

    Intel Haswell:引入了AVX2和BMI2。 (也是Intel首款BMI1 CPU)。
  • Intel Gracemont(Alder Lake E 核):AVX2 和 BMI2。第一个具有 AVX1 或 BMI1 的低功耗 silvermont 系列。
  • AMD Excavator:AMD 的第一款 AVX2 CPU 也是他们的第一款 BMI2 CPU。 (微编码速度极其缓慢
  • pdep
     / 
    pext
  • AMD Zen 3:第一个具有
  • 可用 pdep
     / 
    pext
     的 AMD(与 Intel 相同,1 uop,3c 延迟,1c 吞吐量)。
  • VIA Nano C
  • QuadCore C4650 (Isiah) 2015 年起:AVX2 + BMI2。 (特别是没有 FMA31)。我认为这是 VIA 第一个 AVX2 CPU。
  • ZHAOXIN
  • KaiXian ZX-C+ C4580:AVX2 + BMI2(慢pdep
     / 
    pext
    ,但也许没有AMD那么糟糕?InstLatx64没有说明他们测试的输入是什么,这可能只是一个非常特殊的输入)像
    0
    这样的情况)。基于威盛 Nano C。
  • 半人马中枢神经系统:AVX512、AVX2、BMI2(快pdep
    /
    pext
AMD Zen 2 及更早版本上速度慢得难以想象

pdep
 / 
pext

Zen 3 之前的 AMD(因此 Excavator、Zen 1 和 Zen 2)速度非常慢

pdep

pext
,其中 uops 的数量取决于数据,例如
https://uops.info/ 在 Zen 1 和 2 上以 133 uops 测量 64 位 pext
,每 52 个周期吞吐量 1 个。

所有其他 BMI/BMI2 指令在支持它们的 CPU 上速度都很快,对于 Zen 4 之前的 AMD 上的

blsr

 之类的东西最多 2 微指令,或者英特尔上的单微指令。


AVX1 意味着

popcnt

AVX1 意味着 SSE4.2,而 SSE4.2 至少事实上意味着

popcnt

popcnt

确实有自己的功能位,因此CPU可以有
popcnt
但不支持SSE4.2,但实际上相反的情况并没有发生。足够多的软件假设 SSE4.2 意味着 popcnt
 如果 CPU 违反了该假设,那将是 CPU 的故障,而不是软件的故障。这实际上并不是一个合理的情况。与 SSE4.2 字符串指令相比,
popcnt
 的实现成本较低。


脚注1:

神秘评论

VIA Isaiah C4650 有 AVX2,但没有 FMA3。打破了许多在 AVX2 存在的情况下假定 FMA3 的程序

顺便说一句,我与 Hot Chips 的一位 VIA 架构师谈过此事。他很生气他们允许这样的事情发生。 IIRC,他暗示他们应该关闭 AVX2 的 CPUID 或对 FMA 进行微编码。


0
投票
我有一台配备 Intel Core i5 10210U 处理器的笔记本电脑,支持 AVX 和 AVX2,但不支持 BMI1、BMI2 或 POPCNT。

Click here a for CPU-Z screenshot.

我怀疑最新的 AVX2 硬件将支持 BMI2 和 POPCNT,但显然并非所有带有 AVX2 的硬件都支持。

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