Skip to content
版 本

Reciprocal

产 品 支 持 情 况

产 品是 否 支 持(不 传 入config的 原 型)是 否 支 持(传 入config的 原 型)
Ascend 950PR/Ascend 950DT
x
Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品
x
Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品
x
Atlas 200I/500 A2 推 理 产 品
x
Atlas 推 理 系 列 产 品AI Core
x
Atlas 推 理 系 列 产 品Vector Core
xx
Atlas 训 练 系 列 产 品
x
Kirin X90
x
Kirin 9030
x

功 能 说 明

头 文 件 路 径 为:"basic_api/kernel_operator_vec_unary_intf.h"

Reciprocal属 于 单 目 矢 量 类 计 算 接 口,负 责 将 输 入 的tensor按 元 素 取 倒 数。计 算 公 式 如 下:

$dst_i = \frac{1}{src_i}$

函 数 原 型

  • 传 入config的 原 型

    • tensor前n个 数 据 连 续 计 算

      C++
      template <typename T, const ReciprocalConfig& config = DEFAULT_RECIPROCAL_CONFIG>
      __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t& count)
      
    • tensor高 维 切 分 计 算

      • mask逐bit模 式

        C++
        template <typename T, bool isSetMask = true, const ReciprocalConfig& config = DEFAULT_RECIPROCAL_CONFIG>
        __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
        
      • mask连 续 模 式

        C++
        template <typename T, bool isSetMask = true, const ReciprocalConfig& config = DEFAULT_RECIPROCAL_CONFIG>
        __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
        
  • 不 传 入config的 原 型

    • tensor前n个 数 据 连 续 计 算

      C++
      template <typename T>
      __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, const int32_t& count)
      
    • tensor高 维 切 分 计 算

      • mask逐bit模 式

        C++
        template <typename T, bool isSetMask = true>
        __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
        
      • mask连 续 模 式

        C++
        template <typename T, bool isSetMask = true>
        __aicore__ inline void Reciprocal(const LocalTensor<T>& dst, const LocalTensor<T>& src, uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
        

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名描 述
T操 作 数 数 据 类 型。
isSetMask是 否 在 接 口 内 部 设 置mask。
• true,表 示 在 接 口 内 部 设 置mask。
• false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,本 接 口 入 参 中 的mask值 必 须 设 置 为 占 位 符MASK_PLACEHOLDER
具 体 使 用 方 式 可 参 考掩 码
config
该 参 数 仅 支 持Ascend 950PR/Ascend 950DT。
用 于 配 置Subnormal计 算 模 式,ReciprocalConfig类 型,定 义 如 下:

enum class ReciprocalAlgo {
    INTRINSIC = 0,
    PRECISION_1ULP_FTZ_TRUE,
    PRECISION_1ULP_FTZ_FALSE,
};
struct ReciprocalConfig {
    ReciprocalAlgo algo = ReciprocalAlgo::INTRINSIC;
};
通 过ReciprocalConfig结 构 体 的 参 数algo来 配 置Subnormal计 算 模 式。algo取 值 如 下:
• ReciprocalAlgo::INTRINSIC、ReciprocalAlgo::PRECISION_1ULP_FTZ_TRUE,使 用 单 指 令 计 算 得 出 结 果,所 有Subnormal被 近 似 为0。
• ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE,支 持Subnormal数 据 计 算。
该 参 数 的 默 认 值DEFAULT_RECIPROCAL_CONFIG的 取 值 如 下:

constexpr ReciprocalConfig DEFAULT_RECIPROCAL_CONFIG = { ReciprocalAlgo::INTRINSIC };

表 2 参 数 说 明

参 数 名输 入/输 出描 述
dst输 出目 的 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
地 址 对 齐 约 束 参 考通 用 地 址 对 齐 约 束
src输 入源 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
地 址 对 齐 约 束 参 考通 用 地 址 对 齐 约 束
count输 入参 与 计 算 的 元 素 个 数。关 于 该 参 数 的 具 体 说 明 请 参 考连 续 计 算
mask[]/mask输 入mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。详 细 设 置 参 考掩 码
repeatTime输 入重 复 迭 代 次 数。矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。
关 于 该 参 数 的 具 体 说 明 请 参 考高 维 切 分
repeatParams输 入控 制 操 作 数 地 址 步 长 的 参 数。UnaryRepeatParams类 型,包 含 操 作 数 相 邻 迭 代 间 相 同DataBlock的 地 址 步 长,操 作 数 同 一 迭 代 内 不 同DataBlock的 地 址 步 长 等 参 数。
相 邻 迭 代 间 的 地 址 步 长 参 数 说 明 请 参 考repeatStride;同 一 迭 代 内DataBlock的 地 址 步 长 参 数 说 明 请 参 考dataBlockStride

数 据 类 型

  • 针 对Ascend 950PR/Ascend 950DT,T支 持 的 数 据 类 型 为:half、float、int64_t、uint64_t。数 据 类 型int64_t、uint64_t仅 支 持tensor前n个 数 据 计 算 接 口。
  • 针 对Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Atlas 200I/500 A2 推 理 产 品,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Atlas 推 理 系 列 产 品AI Core,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Atlas 训 练 系 列 产 品,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Kirin X90,T支 持 的 数 据 类 型 为:half、float。
  • 针 对Kirin 9030,T支 持 的 数 据 类 型 为:half、float。

返 回 值 说 明

约 束 说 明

  • 针 对 如 下 型 号,当 参 数count或repeatTime取 值 为0时,不 会 执 行 计 算 操 作,不 会 对 目 的 操 作 数 进 行 写 入,该 接 口 将 被 视 为NOP(空 操 作)。

    • Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品
    • Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品
  • 如 果src中 的 数 值 为0,可 能 会 产 生 未 知 结 果。
  • 使 用Reciprocal时,half的 算 子 结 果 对 比 误 差 不 满 足 双 千 分 之 一 的 要 求,float的 算 子 结 果 对 比 误 差 不 满 足 双 万 分 之 一 的 要 求,如 果 需 要 高 精 度,建 议 使 用Div替 代 实 现。

调 用 示 例

  • tensor高 维 切 分 计 算 样 例-mask连 续 模 式

    C++
    uint64_t mask = 256 / sizeof(half);
    // repeatTime = 4, 128 elements one repeat, 512 elements total.
    // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat.
    // dstRepStride, srcRepStride = 8, no gap between repeats.
    AscendC::Reciprocal(dstLocal, srcLocal, mask, 4, { 1, 1, 8, 8 });
    
  • tensor高 维 切 分 计 算 样 例-mask逐bit模 式

    C++
    uint64_t mask[2] = { UINT64_MAX, UINT64_MAX };
    // repeatTime = 4, 128 elements one repeat, 512 elements total.
    // dstBlkStride, srcBlkStride = 1, no gap between blocks in one repeat.
    // dstRepStride, srcRepStride = 8, no gap between repeats.
    AscendC::Reciprocal(dstLocal, srcLocal, mask, 4, { 1, 1, 8, 8 });
    
  • tensor前n个 数 据 计 算 接 口 样 例

    C++
    AscendC::Reciprocal(dstLocal, srcLocal, 512);
    

    以 下 示 例 仅 支 持Ascend 950PR/Ascend 950DT

    C++
    static constexpr ReciprocalConfig config = { ReciprocalAlgo::PRECISION_1ULP_FTZ_FALSE };
    AscendC::Reciprocal<T, config>(dstLocal, srcLocal, 512);
    

结 果 示 例 如 下:

Bash
输 入 数 据srcLocal:[-7.152 -7.24 1.771 ... -1.339 4.473]
输 出 数 据dstLocal:[-0.1396 -0.1382 0.5645 ... -0.748 0.2231]

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区