我在看示例L117#L 115-L117,我看到了__half类型,我认为它对应于半精度浮动。我想知道这是否是本地的C++类型?如果没有,是否存在本机float16类型?
发布于 2022-09-27 21:18:07
它不是原生的C++类型。C++只支持float (典型的IEEE754 binary32)、double (通常是binary64)和long double (按实现可变宽度,但至少与double一样大)。CUDA支持半精度的float,因为GPU支持它,而GPU支持它,因为GPU需要做很多低精度的浮点计算,而且您可以使用半精度浮点来执行很多这些操作,但是没有语法允许您在标准C++中请求它们。
发布于 2022-09-27 21:18:28
虽然有一个IEEE-754定义的16位浮点,但目前还没有C++便携式类型。GGC使用_Float16,CUDA使用__half等。
还有一些像bfloat16这样的16位浮点变体.
对于DirectXMath,我目前定义了一个
using HALF = uint16_t;,它不像我想的那样安全。
发布于 2022-09-27 21:15:43
C++需要float和double,它们是单精度和双精度浮点类型。这些问题的确切性质取决于执行情况。IEEE754很常见,但绝不是无处不在的。
实现半精度类型不需要C++。您的编译器可能支持一个。否则,您可以搜索实现一个库,以及一组很好的数学函数。
https://stackoverflow.com/questions/73873870
复制相似问题