4.2. 半精度算术函数

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

函数

__host__ __device__ __half __habs(const __half a)

计算输入 half 数的绝对值并返回结果。

__host__ __device__ __half __hadd(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 加法。

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

以四舍五入到最近偶数模式执行 half 加法。

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

以四舍五入到最近偶数模式执行 half 加法,结果饱和到 [0.0, 1.0]。

__host__ __device__ __half __hdiv(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 除法。

__device__ __half __hfma(const __half a, const __half b, const __half c)

以四舍五入到最近偶数模式执行 half 融合乘加运算。

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

以四舍五入到最近偶数模式执行 half 融合乘加运算,并进行 ReLU 饱和。

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

以四舍五入到最近偶数模式执行 half 融合乘加运算,结果饱和到 [0.0, 1.0]。

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

以四舍五入到最近偶数模式执行 half 乘法。

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

以四舍五入到最近偶数模式执行 half 乘法。

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

以四舍五入到最近偶数模式执行 half 乘法,结果饱和到 [0.0, 1.0]。

__host__ __device__ __half __hneg(const __half a)

对输入 half 数取反并返回结果。

__host__ __device__ __half __hsub(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法。

__host__ __device__ __half __hsub_rn(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法。

__host__ __device__ __half __hsub_sat(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法,结果饱和到 [0.0, 1.0]。

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

val 加到全局或共享内存中 address 存储的值,并将此值写回 address

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

执行 half 乘法运算。

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

执行 half 复合赋值乘法运算。

__host__ __device__ __half operator+(const __half &h)

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

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

执行 half 加法运算。

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

执行 half 前缀递增运算。

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

执行 half 后缀递增运算。

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

执行 half 复合赋值加法运算。

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

执行 half 减法运算。

__host__ __device__ __half operator-(const __half &h)

实现 half 一元减运算符。

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

执行 half 后缀递减运算。

__host__ __device__ __half & operator–(__half &h)

执行 half 前缀递减运算。

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

执行 half 复合赋值减法运算。

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

执行 half 除法运算。

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

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

4.2.1. 函数

__host__ __device__ __half __habs(const __half a)

计算输入 half 数的绝对值并返回结果。

计算输入 half 数的绝对值并返回结果。

参数

a[in] - half。只读。

返回值

half

  • a 的绝对值。

  • __habs \( (\pm 0)\) 返回 +0。

  • __habs \( (\pm \infty)\) 返回 \( +\infty \)

  • __habs(NaN) 返回 NaN。

__host__ __device__ __half __hadd(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 加法。

以四舍五入到最近偶数模式执行输入 abhalf 加法。

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

  • b[in] - half。只读。

返回值

half

  • ab 的和。

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

以四舍五入到最近偶数模式执行 half 加法。

以四舍五入到最近偶数模式执行输入 abhalf 加法。防止浮点数将 mul+add 收缩为 fma。

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

  • b[in] - half。只读。

返回值

half

  • ab 的和。

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

以四舍五入到最近偶数模式执行 half 加法,结果饱和到 [0.0, 1.0]。

以四舍五入到最近偶数模式执行输入 abhalf 加法,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。

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

  • b[in] - half。只读。

返回值

half

  • ab 的和,考虑了饱和。

__host__ __device__ __half __hdiv(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 除法。

以四舍五入到最近偶数模式将 half 输入 a 除以输入 b

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

  • b[in] - half。只读。

返回值

half

  • a 除以 b 的结果。

__device__ __half __hfma(const __half a, const __half b, const __half c)

以四舍五入到最近偶数模式执行 half 融合乘加运算。

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

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

  • b[in] - half。只读。

  • c[in] - half。只读。

返回值

half

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

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

以四舍五入到最近偶数模式执行 half 融合乘加运算,并进行 ReLU 饱和。

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

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

  • b[in] - half。只读。

  • c[in] - half。只读。

返回值

half

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

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

以四舍五入到最近偶数模式执行 half 融合乘加运算,结果饱和到 [0.0, 1.0]。

对输入 ab 执行 half 乘法,然后将结果与 c 执行 half 加法,并在四舍五入到最近偶数模式中对结果进行一次舍入,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。

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

  • b[in] - half。只读。

  • c[in] - half。只读。

返回值

half

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

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

以四舍五入到最近偶数模式执行 half 乘法。

以四舍五入到最近偶数模式执行输入 abhalf 乘法。

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

  • b[in] - half。只读。

返回值

half

  • ab 相乘的结果。

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

以四舍五入到最近偶数模式执行 half 乘法。

以四舍五入到最近偶数模式执行输入 abhalf 乘法。防止浮点数将 mul+add 或 sub 收缩为 fma。

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

  • b[in] - half。只读。

返回值

half

  • ab 相乘的结果。

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

以四舍五入到最近偶数模式执行 half 乘法,结果饱和到 [0.0, 1.0]。

以四舍五入到最近偶数模式执行输入 abhalf 乘法,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。

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

  • b[in] - half。只读。

返回值

half

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

__host__ __device__ __half __hneg(const __half a)

对输入 half 数取反并返回结果。

对输入 half 数取反并返回结果。

参数

a[in] - half。只读。

返回值

half

  • 取反的输入 a

  • __hneg \( (\pm 0)\) 返回 \( \mp 0 \)

  • __hneg \( (\pm \infty)\) 返回 \( \mp \infty \)

  • __hneg(NaN) 返回 NaN。

__host__ __device__ __half __hsub(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法。

以四舍五入到最近偶数模式从输入 a 中减去 half 输入 b

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

  • b[in] - half。只读。

返回值

half

  • a 中减去 b 的结果。

__host__ __device__ __half __hsub_rn(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法。

以四舍五入到最近偶数模式从输入 a 中减去 half 输入 b。防止浮点数将 mul+sub 收缩为 fma。

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

  • b[in] - half。只读。

返回值

half

  • a 中减去 b 的结果。

__host__ __device__ __half __hsub_sat(const __half a, const __half b)

以四舍五入到最近偶数模式执行 half 减法,结果饱和到 [0.0, 1.0]。

以四舍五入到最近偶数模式从输入 a 中减去 half 输入 b,并将结果钳制到 [0.0, 1.0] 范围内。NaN 结果被刷新为 +0.0。

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

  • b[in] - half。只读。

返回值

half

  • a 中减去 b 的结果,考虑了饱和。

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

val 加到全局或共享内存中 address 处存储的值,并将此值写回 address

此操作在一个原子操作中执行。

address 的位置必须在全局或共享内存中。否则,此操作的行为未定义。此操作仅受计算能力为 7.x 及更高版本的设备支持。

注意

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

参数
  • address[in] - half*。全局或共享内存中的地址。

  • val[in] - half。要添加的值。

返回值

half

  • address 读取的旧值。

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

执行 half 乘法运算。

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

执行 half 复合赋值乘法运算。

__host__ __device__ __half operator+(const __half &h)

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

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

执行 half 加法运算。

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

执行 half 前缀递增运算。

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

执行 half 后缀递增运算。

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

执行 half 复合赋值加法运算。

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

执行 half 减法运算。

__host__ __device__ __half operator-(const __half &h)

实现 half 一元减运算符。

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

执行 half 后缀递减运算。

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

执行 half 前缀递减运算。

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

执行 half 复合赋值减法运算。

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

执行 half 除法运算。

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

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