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 加法。

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 加法。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 的和。

__host__ __device__ __nv_bfloat16 __hadd_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)

以舍入到最近偶数模式执行 nv_bfloat16 加法。

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 加法。阻止将 mul+add 浮点收缩为 fma。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 的和。

__host__ __device__ __nv_bfloat16 __hadd_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)

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

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 加法,并将结果钳位到范围 [0.0, 1.0]。NaN 结果被刷新为 +0.0。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 的和,考虑了饱和。

__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 融合乘加运算。

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

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

  • c[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • abc 执行融合乘加运算的结果。

__device__ __nv_bfloat16 __hfma_relu(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)

以舍入到最近偶数模式和 ReLU 饱和执行 nv_bfloat16 融合乘加运算。

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

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

  • c[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • abc 执行融合乘加运算并进行 ReLU 饱和的结果。

__device__ __nv_bfloat16 __hfma_sat(const __nv_bfloat16 a, const __nv_bfloat16 b, const __nv_bfloat16 c)

以舍入到最近偶数模式执行 nv_bfloat16 融合乘加运算,并饱和到 [0.0, 1.0]。

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

  • abc 执行融合乘加运算并考虑饱和的结果。

__host__ __device__ __nv_bfloat16 __hmul(const __nv_bfloat16 a, const __nv_bfloat16 b)

以舍入到最近偶数模式执行 nv_bfloat16 乘法。

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 乘法。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 相乘的结果。

__host__ __device__ __nv_bfloat16 __hmul_rn(const __nv_bfloat16 a, const __nv_bfloat16 b)

以舍入到最近偶数模式执行 nv_bfloat16 乘法。

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 乘法。阻止将 mul+add 或 sub 浮点收缩为 fma。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 相乘的结果。

__host__ __device__ __nv_bfloat16 __hmul_sat(const __nv_bfloat16 a, const __nv_bfloat16 b)

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

以舍入到最近偶数模式对输入 ab 执行 nv_bfloat16 乘法,并将结果钳位到范围 [0.0, 1.0]。NaN 结果被刷新为 +0.0。

参数
  • a[in] - nv_bfloat16。只读。

  • b[in] - nv_bfloat16。只读。

返回值

nv_bfloat16

  • ab 相乘的结果,考虑了饱和。

__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。要添加的值。

返回值

__nv_bfloat16

  • address 读取的旧值。

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

执行 nv_bfloat16 乘法运算。

另请参阅 __hmul(__nv_bfloat16, __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 加法运算。

另请参阅 __hadd(__nv_bfloat16, __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 一元减运算符。

另请参阅 __hneg(__nv_bfloat16)

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

执行 nv_bfloat16 减法运算。

另请参阅 __hsub(__nv_bfloat16, __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 除法运算。

另请参阅 __hdiv(__nv_bfloat16, __nv_bfloat16)

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

执行 nv_bfloat16 复合赋值除法运算。