5.6. Bfloat162 算术函数

要使用这些函数,请在您的程序中包含头文件 cuda_bf16.h

函数

__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

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • a 除以 b 的元素级除法结果。

__host__ __device__ __nv_bfloat162 __habs2(const __nv_bfloat162 a)

计算输入 nv_bfloat162 数字两半的绝对值,并返回结果。

计算输入 nv_bfloat162 数字两半的绝对值,并返回结果。

参数

a[in] - nv_bfloat162。仅被读取。

返回值

bfloat2

  • 返回 a,其中包含两半的绝对值。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量加法。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量加法。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ab 的和。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量加法。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量加法。阻止浮点 mul+add 收缩为 fma。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ab 的和。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量加法,并饱和到 [0.0, 1.0]。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量加法,并将结果钳制到范围 [0.0, 1.0]。NaN 结果会被刷新为 +0.0。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

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

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

  • c[in] - nv_bfloat162。仅被读取。

返回值

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 向量加法,并在舍入到最近偶数模式中对结果进行一次舍入。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

  • c[in] - nv_bfloat162。仅被读取。

返回值

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。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

  • c[in] - nv_bfloat162。仅被读取。

返回值

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。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

  • c[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 abc 的元素级融合乘加运算结果,考虑了饱和。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量乘法。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量乘法。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ab 的元素级乘法结果。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量乘法。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量乘法。阻止浮点 mul+add 或 sub 收缩为 fma。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ab 的元素级乘法结果。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量乘法,并饱和到 [0.0, 1.0]。

以舍入到最近偶数模式,执行输入 abnv_bfloat162 向量乘法,并将结果钳制到范围 [0.0, 1.0]。NaN 结果会被刷新为 +0.0。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ab 的元素级乘法结果,考虑了饱和。

__host__ __device__ __nv_bfloat162 __hneg2(const __nv_bfloat162 a)

对输入 nv_bfloat162 数字的两半取反,并返回结果。

对输入 nv_bfloat162 数字 a 的两半取反,并返回结果。

参数

a[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 返回 a,其中两半都取反。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量减法。

以就近舍入到偶数模式,从输入向量 b 中减去输入向量 a

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ba 中减去。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量减法。

以就近舍入到偶数模式,从输入向量 a 中减去 nv_bfloat162 输入向量 b。防止浮点数乘加收缩为 fma。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

nv_bfloat162

  • 向量 ba 中减去。

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

以舍入到最近偶数模式执行 nv_bfloat162 向量减法,并饱和到 [0.0, 1.0]。

以就近舍入到偶数模式,从输入向量 a 中减去 nv_bfloat162 输入向量 b,并将结果钳制在 [0.0, 1.0] 范围内。NaN 结果会被刷新为 +0.0。

参数
  • a[in] - nv_bfloat162。仅被读取。

  • b[in] - nv_bfloat162。仅被读取。

返回值

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++ 编程指南中的原子函数部分。

参数
  • address[in] - __nv_bfloat162*。全局或共享内存中的地址。

  • val[in] - __nv_bfloat162。要添加的值。

返回值

__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 复合赋值除法运算。