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

  • ab 进行逐元素除法运算。

__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向量加法。

对输入ab执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 向量 ab 的和。

__host__ __device__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)

在四舍五入到最近偶数模式下执行nv_bfloat162向量加法。

对输入ab执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式。防止将乘法加法运算收缩为融合乘加运算(fma)。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 向量 ab 的和。

__host__ __device__ __nv_bfloat162 __hadd2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)

在四舍五入到最近偶数模式下执行nv_bfloat162向量加法,结果饱和至[0.0, 1.0]范围。

对输入ab执行nv_bfloat162向量加法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果将被清零为+0.0。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 关于饱和度的 ab 之和。

__device__ __nv_bfloat162 __hcmadd(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)

执行快速复数乘加运算。

将向量nv_bfloat162输入对abc解释为nv_bfloat16精度的复数,并执行复数乘加运算:a*b + c

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

  • c[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 对复数 abc 进行复数乘加运算的结果

__device__ __nv_bfloat162 __hfma2(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)

在四舍五入到最近偶数模式下执行nv_bfloat162向量融合乘加运算。

对输入ab执行nv_bfloat162向量乘法,然后将结果与c进行nv_bfloat162向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

  • c[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 对向量abc进行逐元素融合乘加运算的结果。

__device__ __nv_bfloat162 __hfma2_relu(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)

在舍入到最近偶数模式下执行nv_bfloat162向量融合乘加运算,并带有ReLU饱和功能。

对输入ab执行nv_bfloat162向量乘法,然后将结果与c进行nv_bfloat162向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入。然后将负结果钳制为0。NaN结果转换为规范NaN。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

  • c[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 对向量abc进行逐元素融合乘加运算并使用relu饱和处理后的结果。

__device__ __nv_bfloat162 __hfma2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b, const __nv_bfloat162 c)

在四舍五入到最近偶数模式下执行nv_bfloat162向量融合乘加运算,结果饱和至[0.0, 1.0]范围。

对输入ab执行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

  • 对向量abc进行元素级融合乘加运算的结果,考虑饱和效应。

__host__ __device__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b)

在四舍五入到最近偶数模式下执行nv_bfloat162向量乘法。

对输入ab执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 向量ab逐元素相乘的结果。

__host__ __device__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)

在四舍五入到最近偶数模式下执行nv_bfloat162向量乘法。

对输入ab执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式。防止将乘法加或减法收缩为融合乘加运算(fma)。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 向量ab逐元素相乘的结果。

__host__ __device__ __nv_bfloat162 __hmul2_sat(const __nv_bfloat162 a, const __nv_bfloat162 b)

在四舍五入到最近偶数模式下执行nv_bfloat162向量乘法,结果饱和至[0.0, 1.0]范围。

对输入ab执行nv_bfloat162向量乘法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。

Parameters
  • a[输入] - nv_bfloat162。仅用于读取。

  • b[输入] - nv_bfloat162。仅用于读取。

Returns

nv_bfloat162

  • 向量ab关于饱和度的逐元素乘法结果。

__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中减去输入向量bnv_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

  • 向量 ba 中减去,考虑饱和效应。

__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

__nv_bfloat162

  • address读取的旧值。

__host__ __device__ __nv_bfloat162 operator*(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)

执行打包的nv_bfloat16乘法运算。

另请参阅 __hmul2(__nv_bfloat162, __nv_bfloat162)

__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加法运算。

另请参阅 __hadd2(__nv_bfloat162, __nv_bfloat162)

__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一元减运算符。

另请参阅 __hneg2(__nv_bfloat162)

__host__ __device__ __nv_bfloat162 operator-(const __nv_bfloat162 &lh, const __nv_bfloat162 &rh)

执行打包的nv_bfloat16减法运算。

另请参阅 __hsub2(__nv_bfloat162, __nv_bfloat162)

__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除法运算。

另请参阅 __h2div(__nv_bfloat162, __nv_bfloat162)

__host__ __device__ __nv_bfloat162 &operator/=(__nv_bfloat162 &lh, const __nv_bfloat162 &rh)

执行带有除法操作的打包nv_bfloat16复合赋值。