5.6. Bfloat16 算术函数
要使用这些函数,请在程序中包含头文件cuda_bf16.h。
Functions
- __host__ __device__ __nv_bfloat162 __h2div(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量除法。 - __host__ __device__ __nv_bfloat162 __habs2(const __nv_bfloat162 a)
-
计算输入
nv_bfloat162数值两半部分的绝对值并返回结果。 - __host__ __device__ __nv_bfloat162 __hadd2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法。 - __host__ __device__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法。 - __host__ __device__ __nv_bfloat162 __hadd2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法,结果饱和至[0.0, 1.0]范围。 - __device__ __nv_bfloat162 __hcmadd(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
执行快速复数乘加运算。
- __device__ __nv_bfloat162 __hfma2(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算。 - __device__ __nv_bfloat162 __hfma2_relu(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在舍入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算,并带有ReLU饱和处理。 - __device__ __nv_bfloat162 __hfma2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算,结果饱和至[0.0, 1.0]范围。 - __host__ __device__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法。 - __host__ __device__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法。 - __host__ __device__ __nv_bfloat162 __hmul2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法,结果饱和至[0.0, 1.0]范围。 - __host__ __device__ __nv_bfloat162 __hneg2(const __nv_bfloat162 a)
-
对输入的
nv_bfloat162数值的两半部分取反并返回结果。 - __host__ __device__ __nv_bfloat162 __hsub2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法。 - __host__ __device__ __nv_bfloat162 __hsub2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法。 - __host__ __device__ __nv_bfloat162 __hsub2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法运算,结果饱和至[0.0, 1.0]范围。 - __device__ __nv_bfloat162 atomicAdd(__nv_bfloat162 *const address, const __nv_bfloat162 val)
-
将向量加法
val的值加到全局或共享内存中存储在address地址处的值上,并将结果写回address地址。 - __host__ __device__ __nv_bfloat162 operator*(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16乘法运算。 - __host__ __device__ __nv_bfloat162 & operator*=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有乘法操作的打包
nv_bfloat16复合赋值。 - __host__ __device__ __nv_bfloat162 operator+(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16加法运算。 - __host__ __device__ __nv_bfloat162 operator+(const __nv_bfloat162 &h)
-
实现打包的
nv_bfloat16一元加运算符,返回输入值。 - __host__ __device__ __nv_bfloat162 operator++(__nv_bfloat162 &h, const int ignored)
-
执行打包的
nv_bfloat16后缀递增操作。 - __host__ __device__ __nv_bfloat162 & operator++(__nv_bfloat162 &h)
-
执行打包的
nv_bfloat16前缀递增操作。 - __host__ __device__ __nv_bfloat162 & operator+=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有加法操作的打包
nv_bfloat16复合赋值。 - __host__ __device__ __nv_bfloat162 operator-(const __nv_bfloat162 &h)
-
实现打包的
nv_bfloat16一元减运算符。 - __host__ __device__ __nv_bfloat162 operator-(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16减法运算。 - __host__ __device__ __nv_bfloat162 operator–(__nv_bfloat162 &h, const int ignored)
-
执行打包的
nv_bfloat16后缀递减操作。 - __host__ __device__ __nv_bfloat162 & operator–(__nv_bfloat162 &h)
-
执行打包的
nv_bfloat16前缀递减操作。 - __host__ __device__ __nv_bfloat162 & operator-=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有减法操作的打包
nv_bfloat16复合赋值。 - __host__ __device__ __nv_bfloat162 operator/(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16除法运算。 - __host__ __device__ __nv_bfloat162 & operator/=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
对打包的
nv_bfloat16执行带除法操作的复合赋值。
5.6.1. 函数
-
__host__ __device__ __nv_bfloat162 __h2div(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量除法。将
nv_bfloat162输入向量a除以输入向量b,采用四舍五入到最接近的偶数模式。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
将
a与b进行逐元素除法运算。
-
__host__ __device__ __nv_bfloat162 __habs2(const __nv_bfloat162 a)
-
计算输入
nv_bfloat162数值两半部分的绝对值并返回结果。计算输入
nv_bfloat162数值两半部分的绝对值并返回结果。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
bfloat2
返回
a的两半部分的绝对值。
-
__host__ __device__ __nv_bfloat162 __hadd2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法。对输入
a和b执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a和b的和。
-
__host__ __device__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法。对输入
a和b执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式。防止将乘法加法运算收缩为融合乘加运算(fma)。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a和b的和。
-
__host__ __device__ __nv_bfloat162 __hadd2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量加法,结果饱和至[0.0, 1.0]范围。对输入
a和b执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果将被清零为+0.0。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
关于饱和度的
a和b之和。
-
__device__ __nv_bfloat162 __hcmadd(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
执行快速复数乘加运算。
将向量
nv_bfloat162输入对a、b和c解释为nv_bfloat16精度的复数,并执行复数乘加运算:a*b + c- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
c – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
对复数
a、b和c进行复数乘加运算的结果
-
__device__ __nv_bfloat162 __hfma2(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算。对输入
a和b执行nv_bfloat162向量乘法,然后将结果与c进行nv_bfloat162向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
c – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
对向量
a、b和c进行逐元素融合乘加运算的结果。
-
__device__ __nv_bfloat162 __hfma2_relu(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在舍入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算,并带有ReLU饱和功能。对输入
a和b执行nv_bfloat162向量乘法,然后将结果与c进行nv_bfloat162向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入。然后将负结果钳制为0。NaN结果转换为规范NaN。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
c – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
对向量
a、b和c进行逐元素融合乘加运算并使用relu饱和处理后的结果。
-
__device__ __nv_bfloat162 __hfma2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量融合乘加运算,结果饱和至[0.0, 1.0]范围。对输入
a和b执行nv_bfloat162向量乘法,然后将结果与c进行nv_bfloat162向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
c – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
对向量
a、b和c进行元素级融合乘加运算的结果,考虑饱和效应。
-
__host__ __device__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法。对输入
a和b执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a和b逐元素相乘的结果。
-
__host__ __device__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法。对输入
a和b执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式。防止将乘法加或减法收缩为融合乘加运算(fma)。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a和b逐元素相乘的结果。
-
__host__ __device__ __nv_bfloat162 __hmul2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量乘法,结果饱和至[0.0, 1.0]范围。对输入
a和b执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a和b关于饱和度的逐元素乘法结果。
-
__host__ __device__ __nv_bfloat162 __hneg2(const __nv_bfloat162 a)
-
对输入的
nv_bfloat162数值的两半部分取反并返回结果。对输入的
nv_bfloat162数值a的两部分同时取反,并返回结果。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
返回
a的两半取反后的结果。
-
__host__ __device__ __nv_bfloat162 __hsub2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法。在四舍五入到最近偶数模式下,从输入向量
a中减去输入向量b的nv_bfloat162。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a减去向量b。
-
__host__ __device__ __nv_bfloat162 __hsub2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法。在四舍五入到最近偶数模式下,从输入向量
a中减去nv_bfloat162输入向量b。防止将乘法加法收缩优化为融合乘加运算。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
a减去向量b。
-
__host__ __device__ __nv_bfloat162 __hsub2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
在四舍五入到最近偶数模式下执行
nv_bfloat162向量减法,结果饱和至[0.0, 1.0]范围。在四舍五入到最近偶数模式下,从输入向量
a中减去输入向量b,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - nv_bfloat162。仅用于读取。
b – [输入] - nv_bfloat162。仅用于读取。
- Returns
-
nv_bfloat162
向量
b从a中减去,考虑饱和效应。
-
__device__ __nv_bfloat162 atomicAdd(__nv_bfloat162 *const address, const __nv_bfloat162 val)
-
将向量值
val加到全局内存或共享内存中address地址存储的值上,并将结果写回address地址。加法操作的原子性针对两个nv_bfloat16元素分别得到保证;整个__nv_bfloat162并不保证作为单个32位访问具有原子性。
address的位置必须位于全局内存或共享内存中,否则此操作的行为是未定义的。该操作原生支持计算能力9.x及更高版本的设备,较旧的设备将使用模拟路径执行。注意
有关此函数的更多详细信息,请参阅CUDA C++编程指南中的原子函数章节。
- Parameters
-
address – [in] - __nv_bfloat162*. 全局或共享内存中的一个地址。
val – [输入] - __nv_bfloat162。需要被添加的值。
- Returns
-
从
address读取的旧值。
-
__host__ __device__ __nv_bfloat162 operator*(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16乘法运算。
-
__host__ __device__ __nv_bfloat162 &operator*=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有乘法操作的打包
nv_bfloat16复合赋值。
-
__host__ __device__ __nv_bfloat162 operator+(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16加法运算。
-
__host__ __device__ __nv_bfloat162 operator+(const __nv_bfloat162 &h)
-
实现打包的
nv_bfloat16一元加运算符,返回输入值。
-
__host__ __device__ __nv_bfloat162 operator++(__nv_bfloat162 &h, const int ignored)
-
执行打包的
nv_bfloat16后缀递增操作。
-
__host__ __device__ __nv_bfloat162 &operator++(__nv_bfloat162 &h)
-
执行打包的
nv_bfloat16前缀递增操作。
-
__host__ __device__ __nv_bfloat162 &operator+=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有加法操作的打包
nv_bfloat16复合赋值。
-
__host__ __device__ __nv_bfloat162 operator-(const __nv_bfloat162 &h)
-
实现打包的
nv_bfloat16一元减运算符。
-
__host__ __device__ __nv_bfloat162 operator-(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16减法运算。
-
__host__ __device__ __nv_bfloat162 operator--(__nv_bfloat162 &h, const int ignored)
-
执行打包的
nv_bfloat16后缀递减操作。
-
__host__ __device__ __nv_bfloat162 &operator--(__nv_bfloat162 &h)
-
执行打包的
nv_bfloat16前缀递减操作。
-
__host__ __device__ __nv_bfloat162 &operator-=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有减法操作的打包
nv_bfloat16复合赋值。
-
__host__ __device__ __nv_bfloat162 operator/(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行打包的
nv_bfloat16除法运算。
-
__host__ __device__ __nv_bfloat162 &operator/=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)
-
执行带有除法操作的打包
nv_bfloat16复合赋值。