是否可以在英特尔芯片上执行半精度浮点运算?
我知道如何加载/存储/转换半精度浮点数[1],但我不知道如何在不转换为单精度浮点数的情况下添加/相乘它们。
[1] https://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats
答案 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;是"对于您提出的问题,但它不会比使用F16C VCVTPH2PS
/ VCVTPS2PH
指令+打包单vmulps
/ vfmadd132ps
硬件支持更快。< / p>
技术上是肯定但不是有用的,除了GPGPU。在x86代码中使用HW支持的SIMD转换为float
/ __m256
。
答案 1 :(得分:1)
如果您使用的是所有内核,我会认为在许多情况下,您仍然受到内存带宽的限制,半精度浮点数将是一个胜利。