asc_copy_gm2ub
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| √ | |
| √ |
功 能 说 明
将 数 据 从Global Memory (GM)搬 运 到Unified Buffer (UB)。
函 数 原 型
- 前n个 数 据 搬 运
C++
__aicore__ inline void asc_copy_gm2ub(__ubuf__ void* dst, __gm__ void* src, uint32_t size)
- 高 维 切 分 搬 运
C++
__aicore__ inline void asc_copy_gm2ub(__ubuf__ void* dst, __gm__ void* src, uint16_t n_burst, uint16_t len_burst, uint16_t src_gap, uint16_t dst_gap)
- 同 步 计 算
C++
__aicore__ inline void asc_copy_gm2ub_sync(__ubuf__ void* dst, __gm__ void* src, uint32_t size)
参 数 说 明
表1参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| dst | 输 出 | 目 的UB地 址。 |
| src | 输 入 | 源GM地 址。 |
| size | 输 入 | 搬 运 数 据 大 小(字 节)。 |
| n_burst | 输 入 | 待 搬 运 的 连 续 传 输 数 据 块 个 数。取 值 范 围:[1, 4095]。 |
| len_burst | 输 入 | 待 搬 运 的 每 个 连 续 传 输 数 据 块 的 长 度,单 位 为DataBlock(32字 节)。取 值 范 围:[1, 65535]。 |
| src_gap | 输 入 | 源 操 作 数 相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 一 个 数 据 块 的 头 的 间 隔)。 单 位 为DataBlock(32字 节)。 |
| dst_gap | 输 入 | 目 的 操 作 数 相 邻 连 续 数 据 块 的 间 隔(前 面 一 个 数 据 块 的 尾 与 后 面 一 个 数 据 块 的 头 的 间 隔)。 单 位 为DataBlock(32字 节)。 |
返 回 值 说 明
无
流 水 类 型
PIPE_MTE2
约 束 说 明
- src的 起 始 地 址 要 求 按 照 对 应 数 据 类 型 所 占 字 节 数 对 齐。
- dst的 起 始 地 址 要 求32字 节 对 齐。
- 如 果 需 要 执 行 多 条asc_copy_gm2ub指 令,且asc_copy_gm2ub指 令 的 目 的 地 址 存 在 重 叠,需 要 插 入 同 步 指 令,保 证 多 个asc_copy_gm2ub指 令 的 串 行 化,防 止 出 现 异 常 数 据。
- 同 步 计 算 包 含 同 步 等 待。
- 当 采 用 前n个 数 据 搬 运 接 口 时,搬 运 数 据 大 小 要 求32字 节 对 齐。
调 用 示 例
C++
//total_length指 参 与 搬 运 的 数 据 总 长 度。src是 外 部 输 入 的half类 型 的GM内 存。
constexpr uint64_t total_length = 128;
__ubuf__ half dst[total_length];
asc_copy_gm2ub(dst, src, total_length * sizeof(half));