Skip to content
版 本

MulCast

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

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

按 元 素 求 积,并 根 据 源 操 作 数 和 目 的 操 作 数Tensor的 数 据 类 型 进 行 精 度 转 换。计 算 公 式 如 下:

$$ dst_i = conv(src0_i * src1_i) $$

函 数 原 型

  • tensor前n个 数 据 计 算

    C++
    template <typename T, typename U>
    __aicore__ inline void MulCast(const LocalTensor<T> &dst, const LocalTensor<U> &src0, const LocalTensor<U> &src1, uint32_t count)
    
  • tensor高 维 切 分 计 算

    • mask逐bit模 式

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

      C++
      template <typename T, typename U, bool isSetMask = true>
      __aicore__ inline void MulCast(const LocalTensor<T> &dst, const LocalTensor<U> &src0, const LocalTensor<U> src1, uint64_t mask, const uint8_t repeatTime, const BinaryRepeatParams &repeatParams)
      

参 数 说 明

模 板 参 数 说 明

参 数 名描 述
T目 的 操 作 数 数 据 类 型。
U源 操 作 数 数 据 类 型。
isSetMask是 否 在 接 口 内 部 设 置mask。
• true,表 示 在 接 口 内 部 设 置mask。
• false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,接 口 入 参 中 的mask值 设 置 为 占 位 符MASK_PLACEHOLDER。

参 数 说 明

参 数 名输 入/输 出描 述
dst输 出目 的 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
src0、src1输 入源 操 作 数。
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。
LocalTensor的 起 始 地 址 需 要32字 节 对 齐。
count输 入参 与 计 算 的 元 素 个 数。
注:参 数 取 值 范 围 和 操 作 数 的 数 据 类 型 有 关,数 据 类 型 不 同,能 够 处 理 的 元 素 个 数 最 大 值 不 同,最 大 处 理 的 数 据 量 不 能 超 过UB大 小 限 制。
mask[]/mask输 入mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
设 置 详 见掩 码 操 作
repeatTime输 入重 复 迭 代 次 数。
矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。
关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分
repeatParams输 入控 制 操 作 数 地 址 步 长 的 参 数。BinaryRepeatParams类 型,包 含 操 作 数 相 邻 迭 代 间 相 同datablock的 地 址 步 长,操 作 数 同 一 迭 代 内 不 同datablock的 地 址 步 长 等 参 数。
相 邻 迭 代 间 的 地 址 步 长 参 数 说 明 请 参 考repeatStride;同 一 迭 代 内DataBlock的 地 址 步 长 参 数 说 明 请 参 考dataBlockStride

数 据 类 型

Ascend 950PR/Ascend 950DT数 据 类 型 组 合 情 况

src0、src1数 据 类 型dst数 据 类 型
halfint8_t
halfuint8_t
int64_tfloat
int64_tint32_t

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 数 据 类 型 组 合 情 况

src0、src1数 据 类 型dst数 据 类 型
halfint8_t
halfuint8_t

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 数 据 类 型 组 合 情 况

src0、src1数 据 类 型dst数 据 类 型
halfint8_t
halfuint8_t

Atlas 200I/500 A2 推 理 产 品 数 据 类 型 组 合 情 况

src0、src1数 据 类 型dst数 据 类 型
halfint8_t
halfuint8_t

Atlas 推 理 系 列 产 品AI Core数 据 类 型 组 合 情 况

src0、src1数 据 类 型dst数 据 类 型
halfint8_t
halfuint8_t

返 回 值 说 明

约 束 说 明

  • 地 址 对 齐 约 束 参 考地 址 对 齐 约 束
  • 操 作 数 地 址 重 叠 约 束 请 参 考地 址 重 叠 约 束
  • 使 用tensor高 维 切 分 计 算 接 口 时,一 个 迭 代 处 理 的 源 操 作 数 元 素 个 数 需 要 和 目 的 操 作 数 保 持 一 致,而 一 次 计 算 最 多 输 入128个half类 型 数 据,因 此 目 的 操 作 数 最 多 输 出128个b8类 型 数 据,所 以 每 次 迭 代 输 出 到 前4个datablock,srcRepStride需 要 设 置 为8,dstRepStride则 设 置 为4。
  • 本 指 令 涉 及 精 度 转 换,转 换 规 则 参 考精 度 转 换 规 则
  • 针 对Ascend 950PR/Ascend 950DT,int64_t数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。

调 用 示 例

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

    C++
    uint64_t mask = 128;
    // repeatTime = 4,一 次 迭 代 计 算128个 数,共 计 算512个 数
    // dstBlkStride, src0BlkStride, src1BlkStride = 1,单 次 迭 代 内 数 据 连 续 读 取 和 写 入
    // dstRepStride = 4,相 邻 迭 代 间 数 据 连 续 写 入
    // src0RepStride, src1RepStride = 8,相 邻 迭 代 间 数 据 连 续 读 取
    AscendC::MulCast(dstLocal, src0, src1Local, mask, repeatTime, repeatParams);
    
  • tensor高 维 切 分 计 算 样 例-mask逐bit模 式。

    C++
    uint64_t mask[2] = { UINT64_MAX, UINT64_MAX }; 
    // repeatTime = 4,一 次 迭 代 计 算128个 数,共 计 算512个 数
    // dstBlkStride, src0BlkStride, src1BlkStride = 1,单 次 迭 代 内 数 据 连 续 读 取 和 写 入
    // dstRepStride = 4,相 邻 迭 代 间 数 据 连 续 写 入
    // src0RepStride, src1RepStride = 8,相 邻 迭 代 间 数 据 连 续 读 取
    AscendC::MulCast(dstLocal, src0, src1Local, mask, repeatTime, repeatParams);
    
  • tensor前n个 数 据 计 算 样 例。

    C++
    AscendC::MulCast(dstLocal, src0, src1Local, 512);
    

结 果 示 例 如 下:

输 入 数 据src0: [1 -2 3 ... -6]
输 入 数 据src1Local: [1 3 -4 ... 5]
输 出 数 据dstLocal: [1 -6 -12 ... -30]

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