4.2. 半精度算术函数
要使用这些函数,请在您的程序中包含头文件 cuda_fp16.h
。
函数
- __host__ __device__ __half __habs(const __half a)
-
计算输入
half
数的绝对值并返回结果。 - __host__ __device__ __half __hadd(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法。 - __host__ __device__ __half __hadd_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法。 - __host__ __device__ __half __hadd_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法,结果饱和到 [0.0, 1.0]。 - __host__ __device__ __half __hdiv(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
除法。 - __device__ __half __hfma(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算。 - __device__ __half __hfma_relu(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算,并进行 ReLU 饱和。 - __device__ __half __hfma_sat(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算,结果饱和到 [0.0, 1.0]。 - __host__ __device__ __half __hmul(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法。 - __host__ __device__ __half __hmul_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法。 - __host__ __device__ __half __hmul_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法,结果饱和到 [0.0, 1.0]。 - __host__ __device__ __half __hneg(const __half a)
-
对输入
half
数取反并返回结果。 - __host__ __device__ __half __hsub(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法。 - __host__ __device__ __half __hsub_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法。 - __host__ __device__ __half __hsub_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法,结果饱和到 [0.0, 1.0]。 - __device__ __half atomicAdd(__half *const address, const __half val)
-
将
val
加到全局或共享内存中address
存储的值,并将此值写回address
。 - __host__ __device__ __half operator*(const __half &lh, const __half &rh)
-
执行
half
乘法运算。 - __host__ __device__ __half & operator*=(__half &lh, const __half &rh)
-
执行
half
复合赋值乘法运算。 - __host__ __device__ __half operator+(const __half &h)
-
实现
half
一元加运算符,返回输入值。 - __host__ __device__ __half operator+(const __half &lh, const __half &rh)
-
执行
half
加法运算。 - __host__ __device__ __half & operator++(__half &h)
-
执行
half
前缀递增运算。 - __host__ __device__ __half operator++(__half &h, const int ignored)
-
执行
half
后缀递增运算。 - __host__ __device__ __half & operator+=(__half &lh, const __half &rh)
-
执行
half
复合赋值加法运算。 - __host__ __device__ __half operator-(const __half &lh, const __half &rh)
-
执行
half
减法运算。 - __host__ __device__ __half operator-(const __half &h)
-
实现
half
一元减运算符。 - __host__ __device__ __half operator–(__half &h, const int ignored)
-
执行
half
后缀递减运算。 - __host__ __device__ __half & operator–(__half &h)
-
执行
half
前缀递减运算。 - __host__ __device__ __half & operator-=(__half &lh, const __half &rh)
-
执行
half
复合赋值减法运算。 - __host__ __device__ __half operator/(const __half &lh, const __half &rh)
-
执行
half
除法运算。 - __host__ __device__ __half & operator/=(__half &lh, const __half &rh)
-
执行
half
复合赋值除法运算。
4.2.1. 函数
-
__host__ __device__ __half __habs(const __half a)
-
计算输入
half
数的绝对值并返回结果。计算输入
half
数的绝对值并返回结果。- 参数
-
a – [in] - half。只读。
- 返回值
-
half
a
的绝对值。__habs \( (\pm 0)\) 返回 +0。
__habs \( (\pm \infty)\) 返回 \( +\infty \)。
__habs(NaN) 返回 NaN。
-
__host__ __device__ __half __hadd(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法。以四舍五入到最近偶数模式执行输入
a
和b
的half
加法。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
的和。
-
__host__ __device__ __half __hadd_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法。以四舍五入到最近偶数模式执行输入
a
和b
的half
加法。防止浮点数将 mul+add 收缩为 fma。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
的和。
-
__host__ __device__ __half __hadd_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
加法,结果饱和到 [0.0, 1.0]。以四舍五入到最近偶数模式执行输入
a
和b
的half
加法,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
的和,考虑了饱和。
-
__host__ __device__ __half __hdiv(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
除法。以四舍五入到最近偶数模式将
half
输入a
除以输入b
。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
除以b
的结果。
-
__device__ __half __hfma(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算。对输入
a
和b
执行half
乘法,然后将结果与c
执行half
加法,并在四舍五入到最近偶数模式中对结果进行一次舍入。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
c – [in] - half。只读。
- 返回值
-
half
对
a
、b
和c
执行融合乘加运算的结果。
-
__device__ __half __hfma_relu(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算,并进行 ReLU 饱和。对输入
a
和b
执行half
乘法,然后将结果与c
执行half
加法,并在四舍五入到最近偶数模式中对结果进行一次舍入。然后,负结果被钳制为 0。NaN 结果被转换为规范 NaN。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
c – [in] - half。只读。
- 返回值
-
half
对
a
、b
和c
执行融合乘加运算的结果,并进行 ReLU 饱和。
-
__device__ __half __hfma_sat(const __half a, const __half b, const __half c)
-
以四舍五入到最近偶数模式执行
half
融合乘加运算,结果饱和到 [0.0, 1.0]。对输入
a
和b
执行half
乘法,然后将结果与c
执行half
加法,并在四舍五入到最近偶数模式中对结果进行一次舍入,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
c – [in] - half。只读。
- 返回值
-
half
对
a
、b
和c
执行融合乘加运算的结果,考虑了饱和。
-
__host__ __device__ __half __hmul(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法。以四舍五入到最近偶数模式执行输入
a
和b
的half
乘法。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
相乘的结果。
-
__host__ __device__ __half __hmul_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法。以四舍五入到最近偶数模式执行输入
a
和b
的half
乘法。防止浮点数将 mul+add 或 sub 收缩为 fma。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
相乘的结果。
-
__host__ __device__ __half __hmul_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
乘法,结果饱和到 [0.0, 1.0]。以四舍五入到最近偶数模式执行输入
a
和b
的half
乘法,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
a
和b
相乘的结果,考虑了饱和。
-
__host__ __device__ __half __hneg(const __half a)
-
对输入
half
数取反并返回结果。对输入
half
数取反并返回结果。- 参数
-
a – [in] - half。只读。
- 返回值
-
half
取反的输入
a
。__hneg \( (\pm 0)\) 返回 \( \mp 0 \)。
__hneg \( (\pm \infty)\) 返回 \( \mp \infty \)。
__hneg(NaN) 返回 NaN。
-
__host__ __device__ __half __hsub(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法。以四舍五入到最近偶数模式从输入
a
中减去half
输入b
。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
从
a
中减去b
的结果。
-
__host__ __device__ __half __hsub_rn(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法。以四舍五入到最近偶数模式从输入
a
中减去half
输入b
。防止浮点数将 mul+sub 收缩为 fma。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
从
a
中减去b
的结果。
-
__host__ __device__ __half __hsub_sat(const __half a, const __half b)
-
以四舍五入到最近偶数模式执行
half
减法,结果饱和到 [0.0, 1.0]。以四舍五入到最近偶数模式从输入
a
中减去half
输入b
,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。- 参数
-
a – [in] - half。只读。
b – [in] - half。只读。
- 返回值
-
half
从
a
中减去b
的结果,考虑了饱和。
-
__device__ __half atomicAdd(__half *const address, const __half val)
-
将
val
加到全局或共享内存中address
处存储的值,并将此值写回address
。此操作在一个原子操作中执行。
address
的位置必须在全局或共享内存中。否则,此操作的行为未定义。此操作仅受计算能力为 7.x 及更高版本的设备支持。注意
有关此函数的更多详细信息,请参阅 CUDA C++ 编程指南中的原子函数部分。
- 参数
-
address – [in] - half*。全局或共享内存中的地址。
val – [in] - half。要添加的值。
- 返回值
-
half
从
address
读取的旧值。