Skip to content
版 本

Copy

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

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

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

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

x

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

Kirin X90

Kirin 9030

功 能 说 明

VECIN,VECCALC,VECOUT之 间 的 搬 运 指 令,支 持mask操 作 和DataBlock间 隔 操 作。

函 数 原 型

  • tensor前n个 数 据 计 算

    Text
    template <typename T, bool isSetMask = true>
    __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint32_t count)
    
  • tensor高 维 切 分 计 算

    • mask逐bit模 式

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

      Text
      template <typename T, bool isSetMask = true>
      __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint64_t mask, const uint8_t repeatTime, const CopyRepeatParams& repeatParams)
      

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名

描 述

T

操 作 数 数 据 类 型。

Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint8_t/int8_t/hifloat8_t/fp8_e4m3fn_t/fp8_e5m2_t/fp4x2_e2m1_t/fp4x2_e1m2_t/fp8_e8m0_t/uint16_t/int16_t/half/bfloat16_t/float/uint32_t/int32_t/uint64_t/int64_t

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品,支 持 的 数 据 类 型 为:uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品,支 持 的 数 据 类 型 为:uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float

Atlas 200I/500 A2 推 理 产 品,支 持 的 数 据 类 型 为:uint16_t/int16_t/half/bfloat16_t/uint32_t/int32_t/float

Kirin X90,支 持 的 数 据 类 型 为:half/float/uint16_t/int16_t/uint32_t/int32_t

Kirin 9030,支 持 的 数 据 类 型 为:half/float/uint16_t/int16_t/uint32_t/int32_t

isSetMask

是 否 在 接 口 内 部 设 置mask。

  • true,表 示 在 接 口 内 部 设 置mask。
  • false,表 示 在 接 口 外 部 设 置mask,开 发 者 需 要 使 用SetVectorMask接 口 设 置mask值。这 种 模 式 下,接 口 入 参 中 的mask值 设 置 为 占 位 符MASK_PLACEHOLDER,用 于 占 位,无 实 际 含 义。

表 2 参 数 说 明

参 数 名

输 入/输 出

描 述

dst

输 出

目 的 操 作 数。

类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。起 始 地 址 需 要 保 证32字 节 对 齐。

src

输 入

源 操 作 数。

类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。起 始 地 址 需 要 保 证32字 节 对 齐。

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

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

输 入

控 制 操 作 数 地 址 步 长 的 数 据 结 构。CopyRepeatParams类 型。

具 体 定 义 请 参 考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。

参 数 说 明 请 参 考表3

表 3 CopyRepeatParams结 构 体 参 数 说 明

参 数 名 称

含 义

dstStride、srcStride

用 于 设 置 同 一 迭 代 内datablock的 地 址 步 长,取 值 范 围 为[0,65535]。

dstRepeatSize、srcRepeatSize

用 于 设 置 相 邻 迭 代 间 的 地 址 步 长,取 值 范 围 为[0,4095]。

返 回 值 说 明

约 束 说 明

  • 源 操 作 数 和 目 的 操 作 数 的 起 始 地 址 需 要 保 证32字 节 对 齐。
  • tensor前n个 数 据 计 算 接 口 仅 支 持Ascend 950PR/Ascend 950DT。
  • 针 对Ascend 950PR/Ascend 950DT,uint8_t/int8_t/hifloat8_t/fp8_e4m3fn_t/fp8_e5m2_t/fp4x2_e2m1_t/fp4x2_e1m2_t/fp8_e8m0_t/uint64_t/int64_t数 据 类 型 仅 支 持tensor前n个 数 据 计 算 接 口。
  • 针 对Ascend 950PR/Ascend 950DT,tensor前n个 数 据 计 算 接 口 中 的isSetMask参 数 不 生 效,保 持 默 认 值 即 可。
  • Copy和 矢 量 计 算API一 样,支 持 和 掩 码 操 作API配 合 使 用。但Counter模 式 配 合 高 维 切 分 计 算API时,和通 用 的Counter模 式有 一 定 差 异。具 体 差 异 如 下:
    • 通 用 的Counter模 式:Mask代 表整 个 矢 量 计 算 参 与 计 算 的 元 素 个 数,迭 代 次 数 不 生 效

    • Counter模 式 配 合Copy高 维 切 分 计 算API,Mask代 表**每 次Repeat中 处 理 的 元 素 个 数,迭 代 次 数 生 效。**示 意 图 如 下:

调 用 示 例

本 示 例 仅 展 示Compute流 程 中 的 部 分 代 码。如 需 运 行,请 参 考Copy样 例实 现 完 整 的 代 码。

本 示 例 中 操 作 数 数 据 类 型 为int16_t。

  • tensor前n个 数 据 计 算

    Text
    AscendC::Copy(dstLocal, srcLocal, 512);
    

    结 果 示 例 如 下:

    Text
    输 入 数 据srcLocal:[9 -2 8 ... 9]
    输 出 数 据dstLocal:
    [9 -2 8 ... 9]
    
  • mask连 续 模 式

    Text
    uint64_t mask = 128;
    // repeatTime = 4, 128 elements one repeat, 512 elements total
    // dstStride, srcStride = 1, no gap between blocks in one repeat
    // dstRepStride, srcRepStride = 8, no gap between repeats
    AscendC::Copy(dstLocal, srcLocal, mask, 4, { 1, 1, 8, 8 });
    

    结 果 示 例 如 下:

    Text
    输 入 数 据srcLocal:[9 -2 8 ... 9]
    输 出 数 据dstLocal:
    [9 -2 8 ... 9]
    
  • mask逐bit模 式

    Text
    uint64_t mask[2] = { UINT64_MAX, UINT64_MAX };
    // repeatTime = 4, 128 elements one repeat, 512 elements total
    // dstStride, srcStride = 1, no gap between blocks in one repeat
    // dstRepStride, srcRepStride = 8, no gap between repeats
    AscendC::Copy(dstLocal, srcLocal, mask, 4, { 1, 1, 8, 8 });
    

    结 果 示 例 如 下:

    Text
    输 入 数 据srcLocal:[9 -2 8 ... 9]
    输 出 数 据dstLocal:
    [9 -2 8 ... 9]
    

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