4.6. Half2算术函数

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

Functions

__host__ __device__ __half2 __h2div(const __half2 a, const __half2 b)

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

__host__ __device__ __half2 __habs2(const __half2 a)

计算输入half2数值中两半部分的绝对值并返回结果。

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

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

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

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

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

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

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

执行快速复数乘加运算。

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

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

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

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

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

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

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

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

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

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

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

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

__host__ __device__ __half2 __hneg2(const __half2 a)

对输入的half2数值的两半部分取反并返回结果。

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

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

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

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

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

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

__device__ __half2 atomicAdd(__half2 *const address, const __half2 val)

将向量加法 val 的值加到全局或共享内存中存储在 address 地址处的值上,并将结果写回 address 地址。

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

执行打包的half乘法运算。

__host__ __device__ __half2 & operator*=(__half2 &lh, const __half2 &rh)

执行带有乘法操作的打包half复合赋值。

__host__ __device__ __half2 operator+(const __half2 &h)

实现打包的half一元加运算符,返回输入值。

__host__ __device__ __half2 operator+(const __half2 &lh, const __half2 &rh)

执行打包的half加法运算。

__host__ __device__ __half2 operator++(__half2 &h, const int ignored)

执行打包half后缀递增操作。

__host__ __device__ __half2 & operator++(__half2 &h)

执行打包half前缀递增操作。

__host__ __device__ __half2 & operator+=(__half2 &lh, const __half2 &rh)

执行带有加法操作的打包half复合赋值。

__host__ __device__ __half2 operator-(const __half2 &h)

实现打包的half一元减号运算符。

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

执行打包的half减法运算。

__host__ __device__ __half2 & operator–(__half2 &h)

执行打包的half前缀递减操作。

__host__ __device__ __half2 operator–(__half2 &h, const int ignored)

执行打包half后缀递减操作。

__host__ __device__ __half2 & operator-=(__half2 &lh, const __half2 &rh)

执行带有减法操作的打包half复合赋值。

__host__ __device__ __half2 operator/(const __half2 &lh, const __half2 &rh)

执行打包的half除法运算。

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

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

4.6.1. 功能

__host__ __device__ __half2 __h2div(const __half2 a, const __half2 b)

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

half2输入向量a除以输入向量b,采用四舍五入到最接近偶数的模式。

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

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

__host__ __device__ __half2 __habs2(const __half2 a)

计算输入half2数值两半部分的绝对值并返回结果。

计算输入half2数值两半部分的绝对值并返回结果。

另请参阅

__habs(__half) 详情请参阅。

Parameters

a[输入] - half2类型。仅用于读取。

Returns

half2

  • 返回 a 的两个半部分的绝对值。

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

  • 向量 ab 的和。

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

  • 向量 ab 的和。

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

  • 关于饱和度的 ab 之和。

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

执行快速复数乘加运算。

将向量 half2 输入对 abc 解释为 half 精度的复数:(a.x + I*a.y)、(b.x + I*b.y)、(c.x + I*c.y),并以简单方式执行复数乘加运算:a*b + c,计算公式为:((a.x*b.x + c.x) - a.y*b.y) + I*((a.x*b.y + c.y) + a.y*b.x)

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

  • c[输入] - half2类型。仅用于读取。

Returns

half2

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

  • __half2 结果 = __hcmadd(a, b, c) 在数值上等同于:

  • result.x = __hfma(-a.y, b.y, __hfma(a.x, b.x, c.x))

  • result.y = __hfma( a.y, b.x, __hfma(a.x, b.y, c.y))

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

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

Returns

half2

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

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

在舍入到最近偶数模式下执行half2向量融合乘加运算,并应用relu饱和。

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

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

Returns

half2

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

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

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

对输入ab执行half2向量乘法,然后将结果与c进行half2向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

  • c[输入] - half2类型。仅用于读取。

Returns

half2

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

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

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

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

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

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

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

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

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

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

__host__ __device__ __half2 __hneg2(const __half2 a)

对输入的half2数值的两半部分取反并返回结果。

对输入的half2数值a的两部分同时取反并返回结果。

另请参阅

__hneg(__half) 更多详情请参阅。

Parameters

a[输入] - half2类型。仅用于读取。

Returns

half2

  • 返回将两半都取反后的a

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

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

在四舍五入到最近偶数模式下,从输入向量a中减去half2输入向量b

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

  • 向量 a 减去向量 b

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

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

在四舍五入到最近偶数模式下,从输入向量a中减去half2输入向量b。防止将乘法加法(mul+sub)收缩为融合乘加(fma)的浮点运算优化。

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

  • 向量 a 减去向量 b

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

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

在四舍五入到最近偶数模式下,从输入向量a中减去half2输入向量b,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。

Parameters
  • a[输入] - half2类型。仅用于读取。

  • b[输入] - half2类型。仅用于读取。

Returns

half2

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

__device__ __half2 atomicAdd(__half2 *const address, const __half2 val)

将向量值 val 加到全局内存或共享内存中 address 地址存储的值上,并将结果写回 address 地址。

加法操作的原子性针对两个__half元素分别得到保证;整个__half2并不保证作为单个32位访问具有原子性。

address的位置必须位于全局内存或共享内存中,否则此操作的行为是未定义的。此操作在计算能力6.x及更高版本的设备上原生支持,较旧的设备使用模拟路径。

注意

有关此函数的更多详细信息,请参阅CUDA C++编程指南中的原子函数章节。

Parameters
  • address[in] - half2*。全局或共享内存中的一个地址。

  • val[输入] - half2。需要被添加的值。

Returns

half2

  • address读取的旧值。

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

执行打包的half乘法运算。

__host__ __device__ __half2 &operator*=(__half2 &lh, const __half2 &rh)

执行带有乘法操作的打包half复合赋值。

__host__ __device__ __half2 operator+(const __half2 &h)

实现打包的half一元加运算符,返回输入值。

__host__ __device__ __half2 operator+(const __half2 &lh, const __half2 &rh)

执行打包的half加法运算。

__host__ __device__ __half2 operator++(__half2 &h, const int ignored)

执行打包half后缀递增操作。

__host__ __device__ __half2 &operator++(__half2 &h)

执行打包half前缀递增操作。

__host__ __device__ __half2 &operator+=(__half2 &lh, const __half2 &rh)

执行带有加法操作的打包half复合赋值。

__host__ __device__ __half2 operator-(const __half2 &h)

实现打包的half一元减运算符。

另请参阅

__hneg2(__half2)

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

执行打包的half减法运算。

__host__ __device__ __half2 &operator--(__half2 &h)

执行打包的half前缀递减操作。

__host__ __device__ __half2 operator--(__half2 &h, const int ignored)

执行打包half后缀递减操作。

__host__ __device__ __half2 &operator-=(__half2 &lh, const __half2 &rh)

执行带有减法操作的打包half复合赋值。

__host__ __device__ __half2 operator/(const __half2 &lh, const __half2 &rh)

执行打包的half除法运算。

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

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