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
向量加法。以舍入到最近偶数模式,执行输入
a
和b
的nv_bfloat162
向量加法。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
nv_bfloat162
向量
a
和b
的和。
-
__host__ __device__ __nv_bfloat162 __hadd2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
以舍入到最近偶数模式执行
nv_bfloat162
向量加法。以舍入到最近偶数模式,执行输入
a
和b
的nv_bfloat162
向量加法。阻止浮点 mul+add 收缩为 fma。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
c – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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
向量加法,并在舍入到最近偶数模式中对结果进行一次舍入。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
c – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
c – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
c – [in] - nv_bfloat162。仅被读取。
- 返回值
-
nv_bfloat162
向量
a
、b
和c
的元素级融合乘加运算结果,考虑了饱和。
-
__host__ __device__ __nv_bfloat162 __hmul2(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
以舍入到最近偶数模式执行
nv_bfloat162
向量乘法。以舍入到最近偶数模式,执行输入
a
和b
的nv_bfloat162
向量乘法。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
nv_bfloat162
向量
a
和b
的元素级乘法结果。
-
__host__ __device__ __nv_bfloat162 __hmul2_rn(const __nv_bfloat162 a, const __nv_bfloat162 b)
-
以舍入到最近偶数模式执行
nv_bfloat162
向量乘法。以舍入到最近偶数模式,执行输入
a
和b
的nv_bfloat162
向量乘法。阻止浮点 mul+add 或 sub 收缩为 fma。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
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。- 参数
-
a – [in] - nv_bfloat162。仅被读取。
b – [in] - nv_bfloat162。仅被读取。
- 返回值
-
nv_bfloat162
向量
a
和b
的元素级乘法结果,考虑了饱和。
-
__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
向量
b
从a
中减去。
-
__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
向量
b
从a
中减去。
-
__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
向量
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++ 编程指南中的原子函数部分。
- 参数
-
address – [in] - __nv_bfloat162*。全局或共享内存中的地址。
val – [in] - __nv_bfloat162。要添加的值。
- 返回值
-
从
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
复合赋值除法运算。