15.1. __half

struct __half

__half 数据类型

此结构体实现了用于存储半精度浮点数的数据类型。该结构体实现了赋值、算术和比较运算符以及类型转换。总共使用 16 位:1 位符号位,5 位指数位,尾数存储在 10 位中。总精度为 11 位。在区间 [0.0, 1.0] 内,包括端点,有 15361 个可表示的数字。平均而言,我们有 log10(2**11) ~ 3.311 位十进制数字。

这里的目标是提供符合 IEEE754 标准的 binary16 类型实现和算术运算,但由于设备硬件不支持浮点异常而存在限制。

公共函数

__half() = default

默认构造函数。

空的默认构造函数,结果未初始化。

__host__ __device__ inline constexpr __half(const __half_raw &hr)

__half_raw 构造函数。

__host__ __device__ explicit __half(const __nv_bfloat16 f)

使用默认的舍入到最接近偶数的舍入模式,从 __nv_bfloat16 输入构造 __half

需要包含头文件 cuda_bf16.h

__host__ __device__ inline __half(const double f)

使用默认的舍入到最接近偶数的舍入模式,从 double 输入构造 __half

另请参阅

__double2half(double) 有关更多详细信息。

__host__ __device__ inline __half(const float f)

使用默认的舍入到最接近偶数的舍入模式,从 float 输入构造 __half

另请参阅

__float2half(float) 有关更多详细信息。

__host__ __device__ inline __half(const int val)

使用默认的舍入到最接近偶数的舍入模式,从 int 输入构造 __half

__host__ __device__ inline __half(const long long val)

使用默认的舍入到最接近偶数的舍入模式,从 long long 输入构造 __half

__host__ __device__ inline __half(const long val)

使用默认的舍入到最接近偶数的舍入模式,从 long 输入构造 __half

__host__ __device__ inline __half(const short val)

使用默认的舍入到最接近偶数的舍入模式,从 short 整数输入构造 __half

__host__ __device__ inline __half(const unsigned int val)

使用默认的舍入到最接近偶数的舍入模式,从 unsigned int 输入构造 __half

__host__ __device__ inline __half(const unsigned long long val)

使用默认的舍入到最接近偶数的舍入模式,从 unsigned long long 输入构造 __half

__host__ __device__ inline __half(const unsigned long val)

使用默认的舍入到最接近偶数的舍入模式,从 unsigned long 输入构造 __half

__host__ __device__ inline __half(const unsigned short val)

使用默认的舍入到最接近偶数的舍入模式,从 unsigned short 整数输入构造 __half

__host__ __device__ operator __half_raw() const

类型转换为 __half_raw 运算符。

__host__ __device__ operator __half_raw() volatile const

类型转换为 __half_raw 运算符,带有 volatile 输入。

__host__ __device__ inline constexpr operator bool() const

转换为 bool 数据类型的运算符。

+0 和 -0 输入转换为 false。非零输入转换为 true

__host__ __device__ operator char() const

转换为实现定义的 char 数据类型的运算符。

使用向零舍入模式。

检测 char 类型的有符号性并相应地进行处理,有关更多详细信息,请参阅 __half2char_rz(__half)__half2uchar_rz(__half)

__host__ __device__ operator float() const

类型转换为 float 运算符。

__host__ __device__ operator int() const

转换为 int 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2int_rz(__half) 有关更多详细信息。

__host__ __device__ operator long() const

转换为 long 数据类型的运算符。

使用向零舍入模式。

检测 long 类型的大小并相应地进行处理,有关更多详细信息,请参阅 __half2int_rz(__half)__half2ll_rz(__half)

__host__ __device__ operator long long() const

转换为 long long 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2ll_rz(__half) 有关更多详细信息。

__host__ __device__ operator short() const

转换为 short 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2short_rz(__half) 有关更多详细信息。

__host__ __device__ operator signed char() const

转换为 signed char 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2char_rz(__half) 有关更多详细信息。

__host__ __device__ operator unsigned char() const

转换为 unsigned char 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2uchar_rz(__half) 有关更多详细信息。

__host__ __device__ operator unsigned int() const

转换为 unsigned int 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2uint_rz(__half) 有关更多详细信息。

__host__ __device__ operator unsigned long() const

转换为 unsigned long 数据类型的运算符。

使用向零舍入模式。

检测 unsigned long 类型的大小并相应地进行处理,有关更多详细信息,请参阅 __half2uint_rz(__half)__half2ull_rz(__half)

__host__ __device__ operator unsigned long long() const

转换为 unsigned long long 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2ull_rz(__half) 有关更多详细信息。

__host__ __device__ operator unsigned short() const

转换为 unsigned short 数据类型的运算符。

使用向零舍入模式。

另请参阅

__half2ushort_rz(__half) 有关更多详细信息。

__host__ __device__ __half &operator=(const __half_raw &hr)

__half_raw 赋值运算符。

__host__ __device__ volatile __half &operator=(const __half_raw &hr) volatile

__half_rawvolatile __half 的赋值运算符。

__host__ __device__ __half &operator=(const double f)

类型转换为 __half 赋值运算符,从 double 输入使用默认的舍入到最近偶数舍入模式。

另请参阅

__double2half(double) 有关更多详细信息。

__host__ __device__ __half &operator=(const float f)

类型转换为 __half 赋值运算符,从 float 输入使用默认的舍入到最近偶数舍入模式。

另请参阅

__float2half(float) 有关更多详细信息。

__host__ __device__ __half &operator=(const int val)

int 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ __half &operator=(const long long val)

long long 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ __half &operator=(const short val)

short 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ __half &operator=(const unsigned int val)

unsigned int 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ __half &operator=(const unsigned long long val)

unsigned long long 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ __half &operator=(const unsigned short val)

unsigned short 类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。

__host__ __device__ volatile __half &operator=(volatile const __half_raw &hr) volatile

volatile __half_rawvolatile __half 的赋值运算符。