Skip to content
版 本

NdDmaDci

产 品 支 持 情 况

  • Ascend 950PR/Ascend 950DT:支 持
  • Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品:不 支 持
  • Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品:不 支 持
  • Atlas 200I/500 A2 推 理 产 品:不 支 持
  • Atlas 推 理 系 列 产 品AI Core:不 支 持
  • Atlas 推 理 系 列 产 品Vector Core:不 支 持
  • Atlas 训 练 系 列 产 品:不 支 持

功 能 说 明

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

刷 新NDDMA DataCache。在 多 核 场 景 下,当 多 个AI Core读 取 同 一 块GM(Global Memory)地 址 时,NDDMA DataCache中 可 能 缓 存 了 旧 数 据,导 致 部 分 核 读 取 到 错 误 的 数 据。因 此,在 使 用DataCopy多 维 数 据 搬 运前,需 要 调 用NdDmaDci接 口 刷 新NDDMA DataCache,确 保 缓 存 中 的 数 据 为 最 新 状 态。

函 数 原 型

C++
__aicore__ inline void NdDmaDci()

参 数 说 明

返 回 值 说 明

约 束 说 明

该 接 口 仅 在 使 用DataCopy多 维 数 据 搬 运 接 口前 调 用,用 于 刷 新NDDMA DataCache。

调 用 示 例

完 整 算 子 用 例 请 参 考:多 维 数 据 搬 运 样 例

以2D Padding场 景 为 例,将GM上shape为[2, 8]的 数 据 搬 运 至UB并Padding为[4, 16],左Padding 3,上Padding 1,右Padding 5,下Padding 1,Padding值 填 充 为0。在 调 用DataCopy多 维 数 据 搬 运 接 口前,需 要 先 调 用NdDmaDci刷 新NDDMA DataCache。

C++
// T:搬运数据的类型
// xGm:保存DataCopy搬入数据
// xLocal:保存DataCopy搬出数据

// 2D Padding场景
// xGmShape:[2, 8],搬运8列2行数据,左Padding 3,上Padding 1,右Padding 5,下Padding 1,xLocalShape:[4, 16]
AscendC::NdDmaLoopInfo<2> loopInfo{{1, 8}, {1, 16}, {8, 2}, {3, 1}, {5, 1}};
AscendC::NdDmaParams<T, 2> params{loopInfo, 0}; // padding的值为0
AscendC::NdDmaDci(); // 刷新NDDMA DataCache,保证多核场景下数据一致性
static constexpr AscendC::NdDmaConfig dmaConfig; // 使用默认参数,也可以不传
AscendC::DataCopy<T, 2, dmaConfig>(xLocal, xGm, params);

结 果 示 例 如 下:

输入数据(xGm):
[[ 1. 2. 3. 4. 5. 6. 7. 8.]
[ 9. 10. 11. 12. 13. 14. 15. 16.]]
搬运至Local的数据(xLocal):
[[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 2. 3. 4. 5. 6. 7. 8. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 9. 10. 11. 12. 13. 14. 15. 16. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]]

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