5.2. Bfloat16 算术函数
要使用这些函数,请在程序中包含头文件cuda_bf16.h。
Functions
- __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)
-
在舍入到最近偶数模式下执行
nv_bfloat16融合乘加运算,并带有ReLU饱和处理。 - __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数值的绝对值并返回结果。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
a的绝对值。
-
__host__ __device__ __nv_bfloat16 __hadd(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16加法运算。对输入
a和b执行nv_bfloat16加法运算,采用四舍五入到最近偶数的舍入模式。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
a和b的和。
-
__host__ __device__ __nv_bfloat16 __hadd_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16加法运算。对输入
a和b执行nv_bfloat16加法运算,采用四舍五入到最近偶数模式。防止将乘法加法运算收缩为融合乘加运算(fma)。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
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。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
关于饱和度的
a和b之和。
-
__host__ __device__ __nv_bfloat16 __hdiv(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16除法。将
nv_bfloat16输入a除以输入b,采用四舍五入到最接近偶数模式。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
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加法运算,最终以四舍五入到最近偶数模式对结果进行一次舍入。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
c – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
对
a、b和c进行融合乘加运算的结果。
-
__device__ __nv_bfloat16 __hfma_relu(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)
-
在舍入到最近偶数模式下执行
nv_bfloat16融合乘加运算,并带有ReLU饱和功能。对输入
a和b执行nv_bfloat16乘法运算,然后将结果与c进行nv_bfloat16加法运算,在四舍五入到最近偶数模式下对结果进行一次舍入。负数结果将被钳制为0。NaN结果将转换为标准NaN。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
c – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
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。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
c – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
对
a、b和c进行融合乘加运算的结果,考虑饱和效应。
-
__host__ __device__ __nv_bfloat16 __hmul(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16乘法运算。对输入
a和b执行nv_bfloat16乘法运算,采用四舍五入到最近偶数模式。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
a和b相乘的结果。
-
__host__ __device__ __nv_bfloat16 __hmul_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16乘法运算。对输入
a和b执行nv_bfloat16乘法运算,采用四舍五入到最近偶数模式。防止将乘法加或减法运算收缩为融合乘加(fma)的浮点优化。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
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。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
将
a和b相乘的结果,考虑饱和效应。
-
__host__ __device__ __nv_bfloat16 __hneg(const __nv_bfloat16 a)
-
对输入的
nv_bfloat16数值取反并返回结果。对输入的
nv_bfloat16数值取反并返回结果。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
减去 a
-
__host__ __device__ __nv_bfloat16 __hsub(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16减法运算。在四舍五入到最近偶数模式下,从输入
a中减去nv_bfloat16类型的输入b。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
a减去b的结果。
-
__host__ __device__ __nv_bfloat16 __hsub_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16减法运算。在四舍五入到最接近偶数模式下,从输入
a中减去nv_bfloat16类型的输入b。防止将乘法加法运算(mul+sub)收缩为融合乘加运算(fma)。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
nv_bfloat16
a减去b的结果。
-
__host__ __device__ __nv_bfloat16 __hsub_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat16减法运算,结果饱和至[0.0, 1.0]范围内。在四舍五入到最近偶数模式下,从输入
a中减去nv_bfloat16类型的输入b,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - nv_bfloat16。仅用于读取。
b – [输入] - nv_bfloat16。仅用于读取。
- Returns
-
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++编程指南中的原子函数章节。
- Parameters
-
address – [in] - __nv_bfloat16*. 全局或共享内存中的一个地址。
val – [输入] - __nv_bfloat16。需要被添加的值。
- Returns
-
从
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复合赋值。