【问题标题】:What instruction sets are in the Piledriver architecture that are not in Bulldozer?Piledriver 架构中有哪些指令集不在 Bulldozer 中?
【发布时间】:2014-01-10 21:36:55
【问题描述】:

我用 64 位 x86_64 汇编语言编写了相当多的代码,我即将开始另一个大型函数库,为s0128、@ 提供所有常规的按位、移位、逻辑、算术、数学运算符和函数987654323@、s0512s1024 有符号整数类型和f0128f0256f0512f1024 浮点类型。

我的两台计算机(ubuntu64 和 win7-64)中都有 AMD FX-8150(推土机)CPU。在查看了我的代码需要执行的操作之后,我发现大量最近的位操作指令将非常有帮助。

但是,当我阅读各种文档时,包括他们网站上的 AMD 官方文档,我发现关于推土机 CPU (FX-8150) 和/或打桩机 (FX-8350) 是否支持某些指令和指令集的矛盾无穷无尽.对于最近出现的各种位操作指令和指令集以及FMA3FMA4 指令集,这种混淆尤为常见。

我知道一些 AMD 文档是错误的,因为我一直在我的 FX-8150 上使用 FMA3FMA4 指令进行编程,它们工作得很好,而比较推土机和打桩机的 AMD 文档与此相矛盾。

鉴于我能找到的所有文档来源似乎在某种程度上关于这个问题是错误的,有没有人知道哪些指令和/或指令集适用于打桩机 (FX-8350) 而不是推土机 (FX-8150 )?

由于我的问题是那里的文档的有效性,请不要只指出一些文档除非您确定它是正确的。最好的答案来自在推土机 [和打桩机] CPU 上测试过这些指令和指令集的程序员。

【问题讨论】:

  • “因为我一直在我的 FX-8150 上使用 FMA3 和 FMA4 指令进行编程,它们工作得很好” - 我对此表示怀疑。你确定你在推土机上使用 FMA3 吗?推土机没有 FMA3。
  • 关于 FMA3。嗯,我记得和他们一起编程,但是当我意识到 FMA4 可用时,我切换了。 FMA4 指令对我的目的来说效率更高,因为我不必重写任何操作数。此外,它们在编程时更容易理解 1000 倍。我会去找一个 FMA3 应该工作的地方,看看会发生什么。
  • @Mystical:哦,顺便说一下,告诉我您在以下 AMD 文档的第 2 页上看到了什么:developer.amd.com/wordpress/media/2012/10/…
  • 第一次发现。好吧,我想我的记忆确实有缺陷。当我尝试执行FMA3 指令时,会生成SIGILL(非法指令),而FMA4 指令工作正常(实际上,我的代码中有数十条FMA4 指令)。当然,如果您查看我在上面给出的链接的 AMD 文档,它声称推土机可以执行 FMA3 指令(错误),但不能执行 FMA4 指令(错误)。现在进入面向位的指令。
  • 下一个发现。较新的位指令在我的推土机中不起作用 (FX-8150)。在对各种CPUID 位进行了艰苦的检查之后,它们似乎大多是准确的(但很难理解)。一个奇怪的是FMA 位(在我的推土机FX-8150 中包含错误),而它确实执行FMA4 但不执行FMA3 指令。但我确实在第二组中找到了另一个FMA 位(带有0x80000000 前缀),它设置为1。总体而言,CPUID 确实看起来相当可靠,而世界上推土机的文档非常不一致,并且很大程度上是错误的。

标签: assembly x86-64 cpu-architecture instruction-set


【解决方案1】:

正如您已经想到的那样,官方AMD release document(第2页)确实具有误导性。具体来说,此表中的第一行错误

Bulldozer支持FMA4,但不支持FMA3。

为了完整起见,Bulldozer 中不存在的打桩机指令是 BMITBMF16C(以前称为 CVT16)和 FMA32)。

这些应该提供有关推土机中不存在 FMA3 的确认。但除此之外,您可以信任the GCC Manual。 Bulldozer 和 Piledriver 的架构分别命名为 bdver1bdver2

更重要的是,您可以信任 cpuid 返回值。为方便起见,我在此处复制 Zambezi 和 Vishera 的屏幕截图(桌面部分):

来源:CPUID Dump List

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

【讨论】:

    猜你喜欢
    • 2017-09-03
    • 1970-01-01
    • 2021-07-06
    • 2014-06-27
    • 2020-01-04
    • 2011-09-27
    • 2014-02-10
    • 2020-09-25
    相关资源
    最近更新 更多