作者:mobiledu2502852753 | 来源:互联网 | 2022-12-19 17:00
是否可以在英特尔芯片上执行半精度浮点运算?
我知道如何加载/存储/转换半精度浮点数[1],但我不知道如何在不转换为单精度浮点数的情况下添加/相乘它们.
[1] https://software.intel.com/en-us/articles/performance-benefits-of-half-precision-floats
1> Peter Cordes..:
是否可以在英特尔芯片上执行半精度浮点运算?
是的,显然是Skylake的片上GPU以及后来的FP16和FP64以及FP32的硬件支持.使用足够新的驱动程序,您可以通过OpenCL使用它.
在早期的芯片上,您可以获得与FP16相比吞吐量相同的FP32(可能只是快速转换几乎免费),但在SKL/KBL芯片上,您可以获得 GPGPU Mandelbrot FP32吞吐量的两倍(请注意对数刻度)该链接中图表的Mpix/s轴).
FP64(double
)性能的提升也是巨大的.
但在IA核心(英特尔架构)没有 ; 即使使用AVX512,除了转换它们之外,没有任何硬件支持.
您当然可以实现软件浮点,甚至可能在SIMD寄存器中实现,所以从技术上讲,答案对于您提出的问题仍然是"肯定",但它不会比使用F16C VCVTPH2PS
/ VCVTPS2PH
指令+打包单vmulps
/ vfmadd132ps
硬件支持更快.
技术上是肯定但不是有用的,除了GPGPU.使用HW-支持从SIMD转换/ float
/ __m256
在x86代码.
@PeterCordes:有趣。[Anandtech文章](https://www.anandtech.com/show/14179/intel-manual-updates-bfloat16-for-cooper-lake-xeon-scalable-only)和[Intel文件](https: //software.intel.com/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programming-reference.pdf),建议BF16仅包含转换说明和点积。