AVX 和 Floating Point 之间有啥关系,为啥 AVX 用于 FP 计算?

Posted

技术标签:

【中文标题】AVX 和 Floating Point 之间有啥关系,为啥 AVX 用于 FP 计算?【英文标题】:What is the relation between AVX and Floating Point, and why is AVX used for FP calculations?AVX 和 Floating Point 之间有什么关系,为什么 AVX 用于 FP 计算? 【发布时间】:2019-03-07 14:58:14 【问题描述】:

我最近在研究 FP 和 AVX,在 Wikipedia (https://en.wikipedia.org/wiki/Advanced_Vector_Extensions#Applications) 上我读到 AVX 用于 FP 计算。我不明白为什么并行环境 FP 是进程。此外https://forums.aida64.com/topic/1629-real-world-benefit-of-fpu-test/ 在此表单中 AIDA 管理员告诉 FPU 使用 AVX 等。

【问题讨论】:

也许在阅读 AVX 之前开始阅读 SIMD。然后询问有关您要解决的具体问题的问题。照原样,我认为这个问题有点宽泛...... 相关:***.com/questions/3206101/… 【参考方案1】:

我只是想知道天气 AVX 有助于单个 FP 操作,例如将简单的 3.5 添加到 1.5。

是的,AVX 对标量数学也很有用,因为它为您提供了 3 操作数非破坏性运算。例如

vaddsd xmm1, xmm0, [b]

3.5 + 1.5结果放入xmm1而不破坏xmm0中的值,不像

addsd xmm0, [b]

如果您告诉编译器允许他们这样做,编译器会使用 AVX 而不是 SSE。 (gcc -march=haswellgcc -march=znver1,或其他。)

【讨论】:

感谢这消除了我的困惑,但也提出了很多问题,例如 FP 计算是如何完成的> @HuzamaAhmad:与 SSE/SSE2 addsd 的方式基本相同,但使用更灵活的编码来告诉 CPU 如何将数据从寄存器/内存发送到 FP ALU 并返回注册。我不明白这个问题。您是在问如何构建 FP 乘法器?诸如将尾数相乘、指数相加并归一化。 我的问题是 FP ALU 是如何内置在硬件中的(链接到任何有用的网站都会有所帮助),如果我不清楚我问的是单个 FP no 是否有符号位、指数和这三个有效位分别由三个时钟周期添加,使用 AVX 我们可以使用单周期提升性能添加它。这是我的理解。我想确认一下。 @HuzamaAhmad:硬件 FP 比软件模拟 FP 快,但 AVX 并不是使用 FPU 的唯一方法。还有 SSE2 addsd 和 x87 fadd。不过,在这里谈论“时钟周期”是完全错误的。例如,在 Skylake 上,[v]addsd 有 4 个周期延迟和 2 个时钟吞吐量。有 2 个 FP mul/add/fma 256 位宽的流水线,每个流水线都是完全流水线的,以在每个时钟周期接受一个新的输入。有关吞吐量与延迟的更多信息,请参阅Why does mulss take only 3 cycles on Haswell, different from Agner's instruction tables?。 使用 addsd 仅使用 SIMD FPU 的低元素。有趣的事实:Skylake 上的fadd 80 位浮点使用单独的硬件,在端口 5 上而不是端口 0/端口 1 上,具有 3 个周期的延迟。但是无论如何,是的,当然,硬件 FPU 可以同时在所有字段上运行,但特别是对于 add,它们无论如何都不能“单独完成”。并且 FPU 具有单周期吞吐量,但每个操作需要多个周期,因为它比整数加法更复杂,需要对结果进行归一化等。【参考方案2】:

AVX 是对 CPU 的SIMD 扩展,它提供了在一条指令中处理 8 x 单精度或 4 x 双精度操作的能力。因此,对于您正在同质处理数据数组的应用程序,与使用单个(标量)FPU 相比,使用 AVX 可以将吞吐量提高 4 倍或 8 倍。

另见:FMA

【讨论】:

谢谢,我知道 SIMD,我确切地知道你所说的,但我在上下文中感到困惑,因为天气 AVX 用于解决单个 FP 号码,因为我在互联网上读到了一些东西,如果是的话如何。 @HuzamaAhmad:你的问题不是很清楚-请举一个你不明白的具体例子,否则回答太模糊了。 我只是想知道天气 AVX 有助于单个 FP 操作,例如将简单的 3.5 添加到 1.5。 @HuzamaAhmad 所以你真的想知道为什么现在的编译器使用 SSE/AVX 单元而不是 x87-FPU(即使是标量数学)? @chtz 是的,在什么场景下它使用 avx 以及在什么 sse 中也是如此

以上是关于AVX 和 Floating Point 之间有啥关系,为啥 AVX 用于 FP 计算?的主要内容,如果未能解决你的问题,请参考以下文章

C语言中floating point exception

测试浮点相等性。 (FE_FLOATING_POINT_EQUALITY)

Floating-point environment (Numerics) – C 中文开发手册 - Break易站

upc组队赛14 Floating-Point Hazard求导

AVX2 和 AVX-512 有啥区别?

UVa 11809 - Floating-Point Numbers