如何在 gcc 上启用__fp16类型以进行x86_64

How to enable __fp16 type on gcc for x86_64

本文关键字:x86 类型 fp16 gcc 启用      更新时间:2023-10-16

__fp16浮点数据类型是众所周知的C标准的扩展,特别是在ARM处理器上使用。我想在我的x86_64处理器上运行它们的IEEE版本。虽然我知道他们通常没有这个,但我可以用"无符号短"存储(它们具有相同的对齐要求和存储空间)和(硬件)浮点运算来模拟它们。

有没有办法在 gcc 中请求它?

我认为四舍五入可能有点"不正确",但这对我来说没关系。

如果这也适用于C++,那将是理想的。

我没有在 gcc 中找到这样做的方法(从 gcc 8.2.0 开始)。

至于 clang,在 6.0.0 中,以下选项取得了一些成功:

clang -cc1 -fnative-half-type -fallow-half-arguments-and-returns

该选项-fnative-half-type启用__fp16类型(而不是将它们提升为浮动)。虽然选项-fallow-half-arguments-and-returns允许按值传递__fp16,但非标准的 API 请注意不要混合不同的编译器。

话虽如此,它不提供使用__fp16类型的数学函数(它会将它们提升到/从floatdouble)。

对于我的用例来说,这已经足够了。

C++23 引入了std::float16_t

#include <stdfloat> // C++23

int main()
{
std::float16_t f = 0.1F16;
}

_Float16是你现在应该在最新版本的clang和gcc中寻找的类型。

至少在我使用的编译器中__fp16是一个有限的类型,你只能与binary32(使用支持的硬件)进行转换,而_Float16更像是一个"真正的"算术类型,而不是你应该在如此有限的精度下尝试太多。

相关文章: