4. 半精度内置函数

本节介绍半精度内置函数。

要使用这些函数,请在程序中包含头文件cuda_fp16.h。此处定义的所有函数都可在设备代码中使用。部分函数也可供主机编译器使用,详情请参阅各函数的文档说明。

注意:主机或设备编译器执行的激进浮点优化可能会影响本头文件中实现的函数的数值行为。

以下宏定义可供用户选择性地启用/禁用头文件中的各种定义:

  • CUDA_NO_HALF - 如果定义了这个宏,它将阻止在全局命名空间中定义额外的类型别名,有助于避免与用户程序中定义的符号产生潜在冲突。

  • __CUDA_NO_HALF_CONVERSIONS__ - 如果定义了这个宏,将禁止使用C++类型转换(转换构造函数和转换运算符),这些转换对于内置浮点类型很常见,但对于本质上是用户自定义类型的half可能并不理想。

  • __CUDA_NO_HALF_OPERATORS____CUDA_NO_HALF2_OPERATORS__ - 如果定义了这些宏,将防止意外使用常规算术和比较运算符。这强制执行仅存储类型语义,并防止在halfhalf2类型上进行C++风格的计算。

群组

半精度算术常量

要使用这些常量,请在程序中包含头文件cuda_fp16.h

半算术函数

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

半精度比较函数

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

半精度数学函数

要使用这些函数,请在程序中包含头文件cuda_fp16.h

半精度转换与数据移动

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

Half2算术运算函数

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

Half2比较函数

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

Half2 数学函数

要使用这些函数,请在程序中包含头文件 cuda_fp16.h

结构体

__half

__half 数据类型

__half2

__half2 数据类型

__half2_raw

__half2_raw 数据类型

__half_raw

__half_raw 数据类型

类型定义

__nv_half

该数据类型是一个带有__nv_前缀的别名。

__nv_half2

该数据类型是一个带有__nv_前缀的别名。

__nv_half2_raw

该数据类型是一个带有__nv_前缀的别名。

__nv_half_raw

该数据类型是一个带有__nv_前缀的别名。

half

该数据类型旨在成为半精度数字格式的一流或基础实现。

half2

该数据类型旨在成为半精度数对的一流或基础类型实现。

nv_half

该数据类型是一个带有nv_前缀的别名。

nv_half2

该数据类型是一个带有nv_前缀的别名。

4.9. 类型定义

typedef __half __nv_half

该数据类型是一个带有__nv_前缀的别名。

typedef __half2 __nv_half2

该数据类型是一个带有__nv_前缀的别名。

typedef __half2_raw __nv_half2_raw

该数据类型是一个带有__nv_前缀的别名。

typedef __half_raw __nv_half_raw

该数据类型是一个带有__nv_前缀的别名。

typedef __half half

该数据类型旨在成为半精度数字格式的一流或基础实现。

未来应在编译器中实现。当前实现仅是对带下划线的相应用户级类型进行简单typedef。

typedef __half2 half2

该数据类型旨在成为半精度数对的一流或基础类型实现。

未来应在编译器中实现。当前实现仅是一个简单的类型定义,指向带有下划线的相应用户级类型。

typedef __half nv_half

该数据类型是一个带有nv_前缀的别名。

typedef __half2 nv_half2

该数据类型是一个带有nv_前缀的别名。