Skip to content
版 本

Subs

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

x

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

x

Atlas 200I/500 A2 推 理 产 品

x

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

矢 量 内 每 个 元 素 和 标 量 间 做 减 法,支 持 标 量 在 前 和 标 量 在 后 两 种 场 景,其 中 标 量 输 入 支 持 配 置LocalTensor单 点 元 素。计 算 公 式 如 下,idx表 示LocalTensor单 点 元 素 的 位 置 系 数。

函 数 原 型

  • tensor前n个 数 据 计 算

    Text
    template <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V>
    __aicore__ inline void Subs(const U& dst, const S& src0, const V& src1, const int32_t& count)
    
  • tensor高 维 切 分 计 算

    • mask逐bit模 式

      Text
      template <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V>
      __aicore__ inline void Subs(const U& dst, const S& src0, const V& src1, uint64_t mask[], const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
      
    • mask连 续 模 式

      Text
      template <typename T = BinaryDefaultType, bool isSetMask = true, const BinaryConfig& config = DEFAULT_BINARY_CONFIG, typename U, typename S, typename V>
      __aicore__ inline void Subs(const U& dst, const S& src0, const V& src1, uint64_t mask, const uint8_t repeatTime, const UnaryRepeatParams& repeatParams)
      

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名

描 述

T

预 留 参 数,暂 未 启 用,为 后 续 的 功 能 扩 展 做 保 留,需 要 指 定 时,传 入 默 认 值BinaryDefaultType即 可。

isSetMask

是 否 在 接 口 内 部 设 置mask模 式 和mask值。

  • true,表 示 在 接 口 内 部 设 置。

    tensor高 维 切 分 计 算API/tensor前n个 数 据 计 算API内 部 使 用 了mask的Normal模 式/Counter模 式,一 般 情 况 下 保 持isSetMask默 认 值 即 可,表 示 在API内 部 进 行 根 据 开 发 者 传 入 的mask/count参 数 进 行mask模 式 和mask值 的 设 置。

  • false,表 示 在 接 口 外 部 设 置。
    • 针 对tensor高 维 切 分 计 算 接 口,对 性 能 要 求 较 高 的 部 分 场 景 下,开 发 者 需 要 使 用SetMaskNorm/SetMaskCount设 置mask模 式,并 通 过SetVectorMask接 口 设 置mask值。接 口 入 参 中 的mask值 设 置 为 占 位 符MASK_PLACEHOLDER,用 于 占 位,无 实 际 含 义。
    • 针 对tensor前n个 数 据 计 算 接 口,对 性 能 要 求 较 高 的 部 分 场 景 下,开 发 者 需 要 使 用SetMaskCount设 置mask模 式 为Counter模 式,并 通 过SetVectorMask接 口 设 置mask值。本 接 口 入 参 中 的count不 生 效,建 议 设 置 成1。

针 对 以 下 型 号,tensor前n个 数 据 计 算API中 的isSetMask参 数 不 生 效,保 持 默 认 值 即 可。

  • 针 对Ascend 950PR/Ascend 950DT

config

类 型 为BinaryConfig,当 标 量 为LocalTensor单 点 元 素 类 型 时 生 效,用 于 指 定 单 点 元 素 操 作 数 位 置。默 认 值DEFAULT_BINARY_CONFIG,表 示 右 操 作 数 为 标 量。

struct BinaryConfig {
    int8_t scalarTensorIndex = 1; // 用 于 指 定 标 量 为LocalTensor单 点 元 素 时 标 量 的 位 置,0表 示 左 操 作 数,1表 示 右 操 作 数
};
constexpr BinaryConfig DEFAULT_BINARY_CONFIG = {1};

U

LocalTensor类 型,根 据 输 入 参 数dst自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证dst满 足 数 据 类 型 的 约 束 即 可。

S

LocalTensor类 型 或 标 量 类 型,根 据 输 入 参 数src0自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证src0满 足 数 据 类 型 的 约 束 即 可。

V

LocalTensor类 型 或 标 量 类 型,根 据 输 入 参 数src1自 动 推 导 相 应 的 数 据 类 型,开 发 者 无 需 配 置 该 参 数,保 证src1满 足 数 据 类 型 的 约 束 即 可。

表 2 参 数 说 明

参 数 名

类 型

说 明

dst

输 出

目 的 操 作 数。

类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。

LocalTensor的 起 始 地 址 需 要32字 节 对 齐。

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:half/bfloat16_t/int16_t/float/int32_t/uint64_t/int64_t/complex32/complex64

src0/src1

输 入

源 操 作 数。

  • 类 型 为LocalTensor时,支 持 当 作 矢 量 操 作 数 或 标 量 单 点 元 素,支 持 的TPosition为VECIN/VECCALC/VECOUT。

    LocalTensor的 起 始 地 址 需 要32字 节 对 齐。

    Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:half/bfloat16_t/int16_t/float/int32_t/uint64_t/int64_t/complex32/complex64

  • 类 型 为 标 量 时:

    Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:half/bfloat16_t/int16_t/float/int32_t/uint64_t/int64_t/complex32/complex64

数 据 类 型 需 要 与 目 的 操 作 数 保 持 一 致。

count

输 入

参 与 计 算 的 元 素 个 数。

mask/mask[]

输 入

mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。

  • 逐bit模 式:可 以 按 位 控 制 哪 些 元 素 参 与 计 算,bit位 的 值 为1表 示 参 与 计 算,0表 示 不 参 与。

    mask为 数 组 形 式,数 组 长 度 和 数 组 元 素 的 取 值 范 围 和 操 作 数 的 数 据 类 型 有 关。当 操 作 数 为16位 时,数 组 长 度 为2,mask[0]、mask[1]∈[0, 264-1]并 且 不 同 时 为0;当 操 作 数 为32位 时,数 组 长 度 为1,mask[0]∈(0, 264-1];当 操 作 数 为64位 时,数 组 长 度 为1,mask[0]∈(0, 232-1]。

    例 如,mask=[8, 0],8=0b1000,表 示 仅 第4个 元 素 参 与 计 算。

  • 连 续 模 式:表 示 前 面 连 续 的 多 少 个 元 素 参 与 计 算。取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,每 次 迭 代 内 能 够 处 理 的 元 素 个 数 最 大 值 不 同。当 操 作 数 为16位 时,mask∈[1, 128];当 操 作 数 为32位 时,mask∈[1, 64];当 操 作 数 为64位 时,mask∈[1, 32]。

repeatTime

输 入

重 复 迭 代 次 数。 矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。

关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API

repeatParams

输 入

元 素 操 作 控 制 结 构 信 息,具 体 请 参 考UnaryRepeatParams

返 回 值 说 明

约 束 说 明

  • 使 用tensor高 维 切 分 计 算 接 口 时,节 省 地 址 空 间,开 发 者 可 以 定 义 一 个Tensor,供 源 操 作 数 与 目 的 操 作 数 同 时 使 用(即 地 址 重 叠),相 关 约 束 如 下:

    • 对 于 单 次repeat(repeatTime=1),且 源 操 作 数 与 目 的 操 作 数 之 间 要 求100%完 全 重 叠,不 支 持 部 分 重 叠。
    • 对 于 多 次repeat(repeatTime>1),操 作 数 与 目 的 操 作 数 之 间 存 在 依 赖 的 情 况 下,即 第N次 迭 代 的 目 的 操 作 数 是 第N+1次 的 源 操 作 数,不 支 持 地 址 重 叠。
    • 源 操 作 数 为LocalTensor单 点 元 素 的 场 景,不 支 持 源 操 作 和 目 的 操 作 数 地 址 重 叠。
  • 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束

  • 针 对Ascend 950PR/Ascend 950DT,uint64_t/int64_t/complex32/complex64数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。

  • 左 操 作 数 及 右 操 作 数 中,必 须 有 一 个 为 矢 量;当 前 不 支 持 左 右 操 作 数 同 时 为 标 量。

  • 本 接 口 传 入LocalTensor单 点 数 据 作 为 标 量 时,idx参 数 需 要 传 入 编 译 期 已 知 的 常 量,传 入 变 量 时 需 要 声 明 为constexpr。

调 用 示 例

更 多 样 例 可 参 考LINK

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

    Text
    // dstLocal:输 出Tensor
    // src0Local:输 入Tensor
    // src1Local:输 入Tensor
    
    uint64_t mask = 128;
    // repeatTime = 4, 单 次 迭 代 处 理128个 数,计 算512个 数 需 要 迭 代4次
    // dstBlkStride, srcBlkStride = 1, 每 个 迭 代 内src0参 与 计 算 的 数 据 地 址 间 隔 为1个datablock,表 示 单 次 迭 代 内 数 据 连 续 读 取 和 写 入
    // dstRepStride, srcRepStride = 8, 相 邻 迭 代 间 的 地 址 间 隔 为8个datablock,表 示 相 邻 迭 代 间 数 据 连 续 读 取 和 写 入
    // 标 量 在 后 示 例
    AscendC::Subs(dstLocal, src0Local, src1Local[0], mask, 4, {1, 1, 8, 8});
    
    // 标 量 在 前 示 例
    static constexpr AscendC::BinaryConfig config = { 0 };
    AscendC::Subs<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, mask, 4, {1, 1, 8, 8});
    
  • tensor高 维 切 分 计 算 样 例-mask逐bit模 式

    Text
    // dstLocal:输 出Tensor
    // src0Local:输 入Tensor
    // src1Local:输 入Tensor
    
    uint64_t mask[2] = { UINT64_MAX, UINT64_MAX };
    // repeatTime = 4, 单 次 迭 代 处 理128个 数,计 算512个 数 需 要 迭 代4次
    // dstBlkStride, srcBlkStride = 1, 每 个 迭 代 内src0参 与 计 算 的 数 据 地 址 间 隔 为1个datablock,表 示 单 次 迭 代 内 数 据 连 续 读 取 和 写 入
    // dstRepStride, srcRepStride = 8, 相 邻 迭 代 间 的 地 址 间 隔 为8个datablock,表 示 相 邻 迭 代 间 数 据 连 续 读 取 和 写 入
    // 标 量 在 后 示 例
    AscendC::Subs(dstLocal, src0Local, src1Local[0], mask, 4, {1, 1, 8, 8});
    
    // 标 量 在 前 示 例
    static constexpr AscendC::BinaryConfig config = { 0 };
    AscendC::Subs<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, mask, 4, {1, 1, 8, 8});
    
  • tensor前n个 数 据 计 算 样 例

    Text
    // 标 量 在 后 示 例
    AscendC::Subs(dstLocal, src0Local, src1Local[0], 512);
    
    // 标 量 在 前 示 例
    static constexpr AscendC::BinaryConfig config = { 0 };
    AscendC::Subs<BinaryDefaultType, true, config>(dstLocal, src0Local[0], src1Local, 512);
    

结 果 示 例 如 下:

Text
输 入 数 据src0Local:[1 2 3 ... 512]
输 入 数 据src1Local:[1 2 3 ... 512]
// 标 量 在 前,src0Local[0]作 为 标 量
输 出 数 据dstLocal:[0 1 2 ... 511]
// 标 量 在 后,src1Local[0]作 为 标 量
输 出 数 据dstLocal:[0 1 2 ... 511]

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