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
将
a与b进行逐元素除法运算。
-
__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向量加法。对输入
a和b执行half2向量加法,采用四舍五入到最近偶数模式。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
向量
a和b的和。
-
__host__ __device__ __half2 __hadd2_rn(const __half2 a, const __half2 b)
-
在四舍五入到最近偶数模式下执行
half2向量加法。对输入
a和b执行half2向量加法,采用四舍五入到最近偶数模式。防止将乘法加法运算收缩为融合乘加运算(fma)。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
向量
a和b的和。
-
__host__ __device__ __half2 __hadd2_sat(const __half2 a, const __half2 b)
-
在四舍五入到最近偶数模式下执行
half2向量加法,结果饱和至[0.0, 1.0]范围。对输入
a和b执行half2向量加法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
关于饱和度的
a和b之和。
-
__device__ __half2 __hcmadd(const __half2 a, const __half2 b, const __half2 c)
-
执行快速复数乘加运算。
将向量
half2输入对a、b和c解释为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
对复数
a、b和c进行复数乘加运算的结果__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向量融合乘加运算。对输入
a和b执行half2向量乘法,然后将结果与c进行half2向量加法,在舍入到最近偶数模式下对结果进行一次舍入。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
c – [输入] - half2。仅用于读取。
- Returns
-
half2
对向量
a、b和c进行逐元素融合乘加运算的结果。
-
__device__ __half2 __hfma2_relu(const __half2 a, const __half2 b, const __half2 c)
-
在舍入到最近偶数模式下执行
half2向量融合乘加运算,并应用relu饱和。对输入
a和b执行half2向量乘法,然后将结果与c进行half2向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入。然后将负结果钳制为0。NaN结果转换为规范NaN。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
c – [输入] - half2。仅用于读取。
- Returns
-
half2
对向量
a、b和c进行逐元素融合乘加运算并使用relu饱和处理后的结果。
-
__device__ __half2 __hfma2_sat(const __half2 a, const __half2 b, const __half2 c)
-
在四舍五入到最近偶数模式下执行
half2向量融合乘加运算,结果饱和至[0.0, 1.0]范围。对输入
a和b执行half2向量乘法,然后将结果与c进行half2向量加法,在四舍五入到最近偶数模式下对结果进行一次舍入,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
c – [输入] - half2类型。仅用于读取。
- Returns
-
half2
对向量
a、b和c进行元素级融合乘加运算的结果,考虑饱和效应。
-
__host__ __device__ __half2 __hmul2(const __half2 a, const __half2 b)
-
在四舍五入到最近偶数模式下执行
half2向量乘法。对输入
a和b执行half2向量乘法,采用四舍五入到最近偶数模式。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
向量
a和b逐元素相乘的结果。
-
__host__ __device__ __half2 __hmul2_rn(const __half2 a, const __half2 b)
-
在四舍五入到最近偶数模式下执行
half2向量乘法。对输入
a和b执行half2向量乘法,采用四舍五入到最近偶数模式。防止将乘法加法或减法运算收缩为融合乘加(fma)的浮点优化。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
向量
a和b逐元素相乘的结果。
-
__host__ __device__ __half2 __hmul2_sat(const __half2 a, const __half2 b)
-
在四舍五入到最近偶数模式下执行
half2向量乘法,结果饱和至[0.0, 1.0]范围。对输入
a和b执行half2向量乘法,采用四舍五入到最近偶数模式,并将结果限制在[0.0, 1.0]范围内。NaN结果会被清零为+0.0。- Parameters
-
a – [输入] - half2类型。仅用于读取。
b – [输入] - half2类型。仅用于读取。
- Returns
-
half2
向量
a和b关于饱和度的逐元素乘法结果。
-
__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
向量
b从a中减去,考虑饱和效应。
-
__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读取的旧值。