assembly 哪些指令集是在Piledriver架构中而不是在Bulldozer中的?

rpppsulh  于 2023-08-06  发布在  其他
关注(0)|答案(1)|浏览(94)

我用64位x86_64汇编语言编写了相当多的代码,我即将开始另一个大型函数库,为s0128s0256s0512s1024有符号整数类型和f0128f0256f0512s0512s1024s0512f1024浮点类型。
我的两台电脑(ubuntu 64和win7-64)都有AMD FX-8150(推土机)CPU。在回顾了我的代码需要执行的操作之后,我发现大量最近的位操作指令将非常有帮助。
但是,当我阅读各种文档,包括他们网站上的AMD官方文档时,我发现关于推土机CPU(FX-8150)和/或piledriver(FX-8350)是否支持某些指令和指令集的矛盾无穷无尽。这种混淆在各种最新的位操作指令和指令集以及FMA3FMA4指令集方面尤其常见。
我知道一些AMD文档是错误的,因为我一直在我的FX-8150上使用FMA3FMA4指令编程,它们工作得很好,而AMD文档比较推土机和piledriver与此相矛盾。
考虑到我能找到的所有文档来源在这个问题上似乎都有一定程度的错误,有没有人知道哪些指令和/或指令集在piledriver(FX-8350)上工作,而不是推土机(FX-8150)?
由于我的问题是文件的有效性,请不要只是指向我一些文件**,除非你确定它是正确的**。最好的答案来自那些在推土机[和piledriver] CPU上测试过这些指令和指令集的程序员。

5t7ly7z5

5t7ly7z51#

正如您已经发现的,官方的AMD release document(第2页)确实具有误导性。具体来说,本表第一行错误

的数据

推土机支持FMA4,不支持FMA3。

为了完整起见,推土机中没有的Piledriver指令是BMITBMF16C(以前称为CVT16)和FMA3(2)。
这些应可确认推土铲中不存在FMA3。但除此之外,你可以信任the GCC Manual。Bulldozer和Piledriver的架构分别命名为bdver1bdver2
此外,您还可以信任cpuid返回值。为了方便起见,我在这里复制Zambezi和Vishera的屏幕截图(桌面部分):


来源:CPUID Dump List
请注意,cpuid仅使用fma来指定FMA3和FMA4支持。GCC遵循相同的语义。从Wikipedia link可以推断出这是因为FMA4变体实际上是在 * FMA3之前实现的(所以不能简单地删除之前定义的fma4标识符,否则它会破坏现有的应用程序)。

相关问题