英特尔芯片上的半精度浮点运算

时间:2018-04-24 07:19:16

标签: x86 intel avx floating-point-conversion half-precision-float

是否可以在英特尔芯片上执行半精度浮点运算?

我知道如何加载/存储/转换半精度浮点数[1],但我不知道如何在不转换为单精度浮点数的情况下添加/相乘它们。

[1] https://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats

2 个答案:

答案 0 :(得分:8)

  

是否可以在英特尔芯片上执行半精度浮点运算?

是的,显然 Skylake的片上GPU以及后来对FP16和FP64的硬件支持以及FP32。使用足够新的驱动程序,您可以通过OpenCL使用它。

在早期的芯片上,你得到的FP16与FP32的吞吐量相同(可能只是快速转换几乎免费),但GPGPU Mandelbrot的on SKL / KBL chips you get about double the throughput of FP32  (注意该链接中图表的Mpix / s轴上的对数刻度)。

FP64(double)表现的增益也很大。

但IA核心上的(英特尔架构)没有;即使使用AVX512,除了转换它们之外,没有任何硬件支持。

你当然可以实现软件浮点,甚至可能在SIMD寄存器中,所以技术上答案仍然是#34;是&#34;对于您提出的问题,但它不会比使用F16C VCVTPH2PS / VCVTPS2PH指令+打包单vmulps / vfmadd132ps硬件支持更快。< / p>

技术上是肯定但不是有用的,除了GPGPU。在x86代码中使用HW支持的SIMD转换为float / __m256

答案 1 :(得分:1)

如果您使用的是所有内核,我会认为在许多情况下,您仍然受到内存带宽的限制,半精度浮点数将是一个胜利。