asc_set_atomic_add
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品 | √ |
| Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品 | √ |
功 能 说 明
设 置 对 后 续 的 从Unified Buffer/L0C Buffer/L1 Buffer到Global Memory的 数 据 传 输 开 启 原 子 累 加。累 加 的 数 据 类 型 支 持int8_t/int16_t/int32_t/bfloat16_t/half/float。
函 数 原 型
C++
__aicore__ inline void asc_set_atomic_add_int8()
__aicore__ inline void asc_set_atomic_add_int16()
__aicore__ inline void asc_set_atomic_add_int()
__aicore__ inline void asc_set_atomic_add_bfloat()
__aicore__ inline void asc_set_atomic_add_float16()
__aicore__ inline void asc_set_atomic_add_float()
参 数 说 明
无
返 回 值 说 明
无
流 水 类 型
PIPE_S
约 束 说 明
- 使 用 完 成 后,建 议 清 空 原 子 操 作 的 状 态(详 见asc_set_atomic_none),以 免 影 响 后 续 相 关 指 令 功 能。
- 该 指 令 执 行 前 不 会 对GM的 数 据 做 清 零 操 作,开 发 者 需 在 需 要 时 手 动 添 加 清 零 操 作。
调 用 示 例
C++
//total_length指 参 与 搬 运 的 数 据 总 长 度。dst是 外 部 输 入 的int8_t类 型 的GM内 存。
constexpr uint32_t total_length = 256;
__ubuf__ int8_t src0[total_length];
__ubuf__ int8_t src1[total_length];
asc_copy_ub2gm(dst, src0, total_length * sizeof(int8_t));
asc_sync_pipe(PIPE_MTE3);
asc_set_atomic_add_int8();
asc_copy_ub2gm(dst, src1, total_length * sizeof(int8_t));
asc_set_atomic_none();
结 果 示 例:
Text
输 入 数 据src0:[1, 1, 1, ..., 1] // int8_t类 型
输 入 数 据src1:[2, 2, 2, ..., 2] // int8_t类 型
输 出 数 据dst:[3, 3, 3, ..., 3] // int8_t类 型