gpt4 book ai didi

assembly - AVX 支持是否意味着 BMI1 支持?

转载 作者:行者123 更新时间:2023-12-01 13:32:57 25 4
gpt4 key购买 nike

我有一些依赖于 AVX 的代码。
在相同的代码库中,我还使用了 TZCNT
后者是 BMI1 的一部分。我知道我可以使用 CPUID 测试这条指令,但我很懒,所以我没有真正实现它。

为了测试支持,我只是执行了一条 AVX 指令。如果返回#UD 未定义指令异常,我知道 CPU 不支持 AVX。
但是 tzcnt 向后兼容(有点)bsf(或 bsr - 我总是忘记哪个是哪个),所以不会触发一个异常(exception)。

如果我有 AVX 支持,是否意味着 BMI1 支持?
郑重声明,我现在正在测试的 CPU 上没有 AVX2。

最佳答案

不,AVX 支持并不意味着 BMI1 支持。

详情见下表:

          Intel          AMD                  Year
---------------------------------------------------
AVX Sandy Bridge Bulldozer 2011
---------------------------------------------------
BMI1 Haswell Piledriver/Jaguar 2013
---------------------------------------------------
ABM Barcelona 2007
Haswell 2013
---------------------------------------------------
AVX2 Haswell 2013
Carrizo 2015
Ryzen 2017
---------------------------------------------------
BMI2 Haswell 2013
Excavator 2015
Ryzen 2017

大多数处理器都支持两者,但 AVX 比 BMI1 早两年。
除此之外,tzcntbsf 在标志方面具有不同的语义。
如果你想强制一个#UD异常,你可以使用andn .

来源:维基百科:BMI , AVX

如果要使用CPUID:

BMI1 -> CPUID.(EAX=07H, ECX=0H):EBX.BMI1[bit 3]
(ANDN, BEXTR, BLSI, BLSMSK, BLSR, TZCNT)

BMI2 -> CPUID.(EAX=07H, ECX=0H):EBX.BMI2[bit 8]
(BZHI, MULX, PDEP, PEXT, RORX, SARX, SHLX, SHRX)

LZCNT -> CPUID.(EAX=80000001H) ECX.LZCNT[bit 5]

POPCNT -> CPUID.(EAX=01H) :ECX.POPCNT [Bit 23]

请注意,即使 CPUID 指示(英特尔)处理器不支持 popcnt,它也经常支持。

关于assembly - AVX 支持是否意味着 BMI1 支持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44827477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com