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