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

对输入ab执行nv_bfloat16加法运算,采用四舍五入到最近偶数的舍入模式。

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

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

Returns

nv_bfloat16

  • ab 的和。

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

在四舍五入到最近偶数模式下执行nv_bfloat16加法运算。

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

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

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

Returns

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。

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

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

Returns

nv_bfloat16

  • 关于饱和度的 ab 之和。

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

对输入 ab 执行 nv_bfloat16 乘法运算,然后将结果与 c 进行 nv_bfloat16 加法运算,最终以四舍五入到最近偶数模式对结果进行一次舍入。

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

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

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

Returns

nv_bfloat16

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

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

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

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

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

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

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

Returns

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。

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

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

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

Returns

nv_bfloat16

  • abc进行融合乘加运算的结果,考虑饱和效应。

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

在四舍五入到最近偶数模式下执行nv_bfloat16乘法运算。

对输入ab执行nv_bfloat16乘法运算,采用四舍五入到最近偶数模式。

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

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

Returns

nv_bfloat16

  • ab 相乘的结果。

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

在四舍五入到最近偶数模式下执行nv_bfloat16乘法运算。

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

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

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

Returns

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。

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

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

Returns

nv_bfloat16

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

__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

__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复合赋值。