Skip to content
版 本

asc_copy_ub2l1

产 品 支 持 情 况

产 品是 否 支 持
Ascend 950PR/Ascend 950DT

功 能 说 明

将 数 据 从Unified Buffer (UB)搬 运 到L1 Buffer。

函 数 原 型

  • 前n个 数 据 搬 运
C++
__aicore__ inline void asc_copy_ub2l1(__cbuf__ void* dst, __ubuf__ void* src, uint32_t size)
  • 高 维 切 分 搬 运
C++
__aicore__ inline void asc_copy_ub2l1(__cbuf__ void* dst, __ubuf__ void* src, uint16_t n_burst, uint16_t len_burst, uint16_t src_gap, uint16_t dst_gap)
  • 同 步 搬 运
C++
__aicore__ inline void asc_copy_ub2l1_sync(__cbuf__ void* dst, __ubuf__ void* src, uint32_t size)

参 数 说 明

参 数 名输 入/输 出描 述
dst输 出目 的L1 Buffer地 址。
src输 入源UB地 址。
size输 入搬 运 数 据 大 小(字 节)。
n_burst输 入待 搬 运 的 连 续 传 输 数 据 块 个 数。取 值 范 围:[1, 4095]。
len_burst输 入待 搬 运 的 每 个 连 续 传 输 数 据 块 的 长 度,单 位 为DataBlock(32字 节)。取 值 范 围:[1, 65535]。
src_gap输 入源 操 作 数 相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 一 个 数 据 块 的 头 的 间 隔)。
单 位 为DataBlock(32字 节)。
dst_gap输 入目 的 操 作 数 相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 一 个 数 据 块 的 头 的 间 隔)。
单 位 为DataBlock(32字 节)。

返 回 值 说 明

流 水 类 型

PIPE_MTE3

约 束 说 明

  • dst的 起 始 地 址 要 求 按 照 对 应 数 据 类 型 所 占 字 节 数 对 齐。
  • src的 起 始 地 址 要 求32字 节 对 齐。
  • 如 果 需 要 执 行 多 条asc_copy_ub2l1指 令,且asc_copy_ub2l1指 令 的 目 的 地 址 存 在 重 叠,需 要 插 入 同 步 指 令,保 证 多 个asc_copy_ub2l1指 令 的 串 行 化,防 止 出 现 异 常 数 据。
  • 同 步 计 算 包 含 同 步 等 待。

调 用 示 例

C++
// total_length指 参 与 搬 运 的 数 据 总 长 度。dst是 外 部 输 入 的L1 Buffer内 存。
constexpr uint64_t total_length = 128;
__ubuf__ half src[total_length];
asc_copy_ub2l1(dst, src, total_length * sizeof(half));

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