Skip to content
版 本

asc_dcci

产 品 支 持 情 况

产 品是 否 支 持
Ascend 950PR/Ascend 950DT
Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品
Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

功 能 说 明

在AI Core内 部,Scalar单 元 和DMA单 元 都 可 能 对Global Memory进 行 访 问。

\

如 上 图 所 示:

DMA搬 运 单 元 读 写Global Memory,数 据 通 过asc_copy_ub2gmasc_copy_gm2ub等 接 口 在UB等Local Memory和Global Memory间 交 互,没 有Cache一 致 性 问 题; Scalar单 元 访 问Global Memory,首 先 会 访 问 每 个 核 内 的Data Cache,因 此 存 在Data Cache与Global Memory的Cache一 致 性 问 题。 该 接 口 用 来 刷 新Cache,保 证Cache的 一 致 性,使 用 场 景 如 下:

读 取Global Memory的 数 据,但 该 数 据 可 能 在 外 部 被 其 余 核 修 改,此 时 需 要 使 用asc_dcci接 口,直 接 访 问Global Memory,获 取 最 新 数 据; 用 户 通 过Scalar单 元 写Global Memory的 数 据,希 望 立 刻 写 出,也 需 要 使 用asc_dcci接 口。

Scalar单 元 访 问UB数 据 时,该 接 口 需 配 合asc_set_ctrl()接 口 使 用,将CTRL[49]设 置 为1'b1,开 启datacache模 式。

针 对Ascend 950PR/Ascend 950DT,不 支 持asc_dcci_entire_ub接 口。

函 数 原 型

C++
// 刷 新 传 入 地 址 所 在 的 单 个Cache Line
__aicore__ inline void asc_dcci_single(__gm__ void* dst)

// 刷 新 传 入 的UB地 址 空 间 地 址 所 在 的 单 个Cache Line
__aicore__ inline void asc_ub_dcci_single(__ubuf__ void* dst)

// 刷 新 所 有Cache Line
__aicore__ inline void asc_dcci_entire_all()
__aicore__ inline void asc_dcci_entire_ub()
__aicore__ inline void asc_dcci_entire_out()
__aicore__ inline void asc_dcci_entire_atomic()

参 数 说 明

参 数 名输 入/输 出描 述
dst输 入需 要 刷 新 缓 存 的 向 量 的 起 始 地 址。

返 回 值 说 明

流 水 类 型

PIPE_S

约 束 说 明

调 用 示 例

C++
// 示 例1:SINGLE_CACHE_LINE模 式,假 设 首 地 址 为0x40(64B对 齐)
// total_length指 参 与 计 算 的 数 据 长 度
constexpr uint64_t total_length = 32;
__gm__ int16_t src[total_length];
for( int i = 0; i < total_length; i++) {
   src[i] = i;
}
// 由 于 首 地 址64B对 齐,调 用asc_dcci指 令 后,会 立 刻 刷 新 前32个 数
asc_dcci_single(reinterpret_cast<__gm__ uint64_t*>(src));

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