FMA指令集的硬件支持有多丰富

时间:2015-07-17 10:47:10

标签: x86 hardware sse simd avx

Steam's hardware survey非常有用,因为它概述了SSE指令集的硬件支持。但是,我找不到任何关于FMA支持有多丰富的资源。这个地方有没有这方面的数据?或者是否有任何其他指令集FMA或多或少与之相关,例如,如果你有一个你最有可能拥有另一个,你可以根据估算?

3 个答案:

答案 0 :(得分:2)

FMA3是AVX2的一部分,因此任何具有AVX2的芯片都应该支持FMA3。也就是说,您可以而且应该独立检查FMA3支持。

AVX2受英特尔“Haswell”,AMD挖掘机和后续处理器支持。

FMA4得到了AMD“Bulldozer”的支持,但他们又回到了支持FMA3的AMD“Piledriver”。

鉴于所有这些芯片都是最新的,它并没有广泛传播。 Valve Hardare Survey没有显示AVX,FMA3或AVX2数据,因此在这一点上绝对是猜测。

BTW,Xbox One和PS4 AMD Jaguar CPU不支持FMA3,尽管它们支持AVX和F16C。

DirectXMath: AVX2DirectXMath: F16C and FMA

答案 1 :(得分:2)

FMA3(2012年5月)介绍了{p> AMD in Piledriver。 (Vishera FX CPU,Trinity& Richland APU)。 Piledriver存在严重的性能错误,256b(AVX ymm)存储吞吐量(VMOVAPS/VMOVUPS:每17/20周期一个)。 (请参阅Agner Fog's microarch doc和其他来源。)在Piledriver上禁用256b AVX例程,或者编写使用128b xmm FMA的Piledriver特定版本。 (或者FMA4,它也可以在Bulldozer上运行。)

后继者Steamroller仅在Kaveri APU中找到。 (FX CPU仍然是Piledriver。)Steamroller使用256b存储修复了perf错误,但是256b一切都需要两倍于128b版本的周期,所以你没有从256b获得任何东西(除了微小的环路开销减少) AVX。即如果FMA4可用,您也可以编写代码来运行128b FMA4版本。

FMA3由英特尔与Haswell的AVX2同时推出(2013年6月)。许多人还没有从Sandybridge / IvyBridge升级,因为只有很小的性能差异,除了可以使用AVX2 / FMA以获得良好优势的代码。 (即不是大多数东西。)

FMA3是来自AVX2的单独CPUID功能标志。说它是AVX2的一部分的错误答案是由于英特尔将其与Haswell一起引入。

总而言之,很多AMD用户可能都支持FMA,即使它只是Bulldozer FMA4。至于英特尔,即使是Nehalem CPU对于大多数人来说都足够快,所以升级的理由也不多。但是,我没有任何数字。

答案 2 :(得分:1)

FMA3 {通常称为FMA}是AVX2指令集的一部分,可从Haswell& Co.打桩机微架构。

AMD拥有它自己的FMA4,而且我曾经看过它只能使用一次...

我不确定如何通过了解AVX2数据估算FMA使用情况......基本上,这里有两点 - 编译器可能会在编译AVX2时生成FMA; FMA仅限FP,我希望大部分FP代码已经卸载到客户端/游戏领域的GPU中。因此,可能没有真正使用FMA。

但另一方面我知道 在HPC中很有用(比如dgemm和其他LAPACK& MKL功能)。

老实说,对于相当大的应用程序进行AVX2调整我只使用了一次FMA。