Copy
产 品 支 持 情 况
功 能 说 明
VECIN,VECCALC,VECOUT之 间 的 搬 运 指 令,支 持mask操 作 和DataBlock间 隔 操 作。
函 数 原 型
tensor前n个 数 据 计 算
Texttemplate <typename T, bool isSetMask = true> __aicore__ inline void Copy(const LocalTensor<T>& dst, const LocalTensor<T>& src, const uint32_t count)tensor高 维 切 分 计 算
mask逐bit模 式
Texttemplate <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连 续 模 式
Texttemplate <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 模 板 参 数 说 明
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 Kirin X90,支 持 的 数 据 类 型 为:half/float/uint16_t/int16_t/uint32_t/int32_t Kirin 9030,支 持 的 数 据 类 型 为:half/float/uint16_t/int16_t/uint32_t/int32_t | |
|
表 2 参 数 说 明
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。起 始 地 址 需 要 保 证32字 节 对 齐。 | ||
类 型 为LocalTensor,支 持 的TPosition为VECIN/VECCALC/VECOUT。起 始 地 址 需 要 保 证32字 节 对 齐。 | ||
mask用 于 控 制 每 次 迭 代 内 参 与 计 算 的 元 素。
| ||
重 复 迭 代 次 数。矢 量 计 算 单 元,每 次 读 取 连 续 的256Bytes数 据 进 行 计 算,为 完 成 对 输 入 数 据 的 处 理,必 须 通 过 多 次 迭 代(repeat)才 能 完 成 所 有 数 据 的 读 取 与 计 算。repeatTime表 示 迭 代 的 次 数。 关 于 该 参 数 的 具 体 描 述 请 参 考高 维 切 分API。 | ||
控 制 操 作 数 地 址 步 长 的 数 据 结 构。CopyRepeatParams类 型。 具 体 定 义 请 参 考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_data_copy.h,${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。 参 数 说 明 请 参 考表3。 |
表 3 CopyRepeatParams结 构 体 参 数 说 明
返 回 值 说 明
无
约 束 说 明
- 源 操 作 数 和 目 的 操 作 数 的 起 始 地 址 需 要 保 证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个 数 据 计 算
TextAscendC::Copy(dstLocal, srcLocal, 512);结 果 示 例 如 下:
Text输 入 数 据srcLocal:[9 -2 8 ... 9] 输 出 数 据dstLocal: [9 -2 8 ... 9]mask连 续 模 式
Textuint64_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模 式
Textuint64_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]