FMA指令集的硬件支持有多丰富
Posted
技术标签:
【中文标题】FMA指令集的硬件支持有多丰富【英文标题】:how abundant is hardware support for FMA instruction set 【发布时间】:2015-07-17 10:47:10 【问题描述】:Steam's hardware survey 非常有用,因为它概述了对 SSE 指令集的硬件支持。但是,我找不到任何关于 FMA 支持有多丰富的资源。有没有这方面的数据?或者是否有任何其他与 FMA 或多或少相关的指令集,比如如果你有一个你很可能有另一个,你可以根据这些指令进行估计?
【问题讨论】:
我认为 FMA 支持与 AVX2 相关,因此 Haswell/Broadwell/Skylake 及更高版本。 极端课程估计:渗透率低于 76%。因为这就是 SSE4.2 所在,所有支持 FMA 的处理器也都支持 SSE4.2。它可能少得多,但至少它给出了一些上限.. @harold 这绝对是不正确的估计,因为 SSE4.2 根本不意味着 FMA 支持!!!这仅意味着 ppl 在 2008 年引入的约 76% 的案例中拥有 Nehalem+,而 Haswell 于 2013 年发布。如果我们假设用户的“线性更新”,这意味着其中只有约 30% 可能是 Haswell 和/ 或 Broadwell => 只有约 20% 的 CPU 可能支持 FMA,这可能是上限 @Elalfer 是的,现在请真正阅读我写的内容。 @harold 是的,总能说 100% 是上限 ;) 【参考方案1】:FMA3 由AMD in Piledriver 介绍(2012 年 5 月)。 (Vishera FX CPU、Trinity & Richland APU)。 Piledriver 有一个严重的性能错误,存储吞吐量为 256b (AVX ymm)(VMOVAPS/VMOVUPS
:每 17/20 个周期一个)。 (请参阅Agner Fog's microarch 文档和其他来源。)要么禁用 Piledriver 上的 256b AVX 例程,要么编写使用 128b xmm FMA 的 Piledriver 特定版本。 (或者 FMA4,它也可以在 Bulldozer 上运行。)
继任者 Steamroller 仅在 Kaveri APU 中找到。 (FX CPU 仍然是 Piledriver。)Steamroller 修复了 256b 存储的性能错误,但是 256b 的所有内容都需要两倍于 128b 版本的周期,所以你没有从 256b AVX 获得任何东西(除了循环开销的微小减少)。也就是说,如果 FMA4 可用,您不妨编写代码来运行 128b FMA4 版本。
FMA3 与 AVX2 同时由英特尔在 Haswell(2013 年 6 月)推出。很多人没有从 Sandybridge/IvyBridge 升级,因为只有很小的性能差异,除了可以使用 AVX2/FMA 的代码。 (即不是大多数东西。)
FMA3 是独立于 AVX2 的 CPUID 功能标志。说它是 AVX2 的一部分的错误答案是由于英特尔在 Haswell 中引入了它。
因此,总而言之,很多 AMD 用户可能确实支持 FMA,即使它是 Bulldozer FMA4-only。至于英特尔,即使是 Nehalem CPU 对大多数人来说也足够快,所以没有太多升级的理由。不过,我没有任何数字。
【讨论】:
【参考方案2】:FMA3 是 AVX2 的一部分,因此任何具有 AVX2 的芯片都应该支持 FMA3。也就是说,您可以并且应该独立检查 FMA3 支持。
英特尔“Haswell”、AMD Excavator 和更高版本的处理器支持 AVX2。
FMA4 由 AMD “Bulldozer” 支持,但他们已转回使用 AMD “Piledriver” 支持 FMA3。
鉴于所有这些芯片都是最近才出现的,它并没有广泛传播。 Valve Hardare 调查尚未显示 AVX、FMA3 或 AVX2 数据,因此目前绝对是猜测。
顺便说一句,Xbox One 和 PS4 AMD Jaguar CPU 不支持 FMA3,尽管它们支持 AVX 和 F16C。
见DirectXMath: AVX2, DirectXMath: F16C and FMA
【讨论】:
FMA3 是随 AVX2 引入的,但它们是单独的 CPUID 功能标志。这就是 Piledriver 如何支持 FMA4 和 FMA3,但不支持 AVX2。我在 avx2 标签 wiki 的更新中提到了这一点:***.com/tags/avx2/info【参考方案3】:FMA3 通常简称为 FMA 是 AVX2 指令集的一部分,可从 Haswell 和 Piledriver 微架构开始使用。
AMD 有自己的 FMA4,我见过它只用过一次...
我不确定如何通过知道 AVX2 数字来估计 FMA 的使用情况...基本上,这里有 2 点 - 编译器可能会在为 AVX2 编译时生成 FMA; FMA 只是 FP,我希望大部分 FP 代码已经在客户端/游戏空间中卸载到 GPU。因此 FMA 可能并没有真正使用。
但另一方面,我知道它 在 HPC 中很有用(如 dgemm 和其他 LAPACK 和 MKL 函数)。
老实说,我只使用过一次 FMA,正在为一个相当大的应用程序进行 AVX2 调优。
【讨论】:
以上是关于FMA指令集的硬件支持有多丰富的主要内容,如果未能解决你的问题,请参考以下文章