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 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_raw
到volatile
__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 long long val)
-
从
long
long
类型转换的赋值运算符,使用默认的舍入到最近偶数舍入模式。
-
__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_raw
到volatile
__half
的赋值运算符。
-
__half() = default