asc_copy_l12l0b_mx
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功 能 说 明
将Mx scale矩 阵 从L1 Buffer搬 运 到L0B Buffer。
函 数 原 型
C++
__aicore__ inline void asc_copy_l12l0b_mx(uint64_t dst, __cbuf__ fp8_e8m0_t* src, uint16_t x_start_pos, uint16_t y_start_pos, uint8_t x_step, uint8_t y_step, uint16_t src_stride, uint16_t dst_stride)
__aicore__ inline void asc_copy_l12l0b_mx_sync(uint64_t dst, __cbuf__ fp8_e8m0_t* src, uint16_t x_start_pos, uint16_t y_start_pos, uint8_t x_step, uint8_t y_step, uint16_t src_stride, uint16_t dst_stride)
参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| dst | 输 出 | 目 的 操 作 数 的 地 址。 |
| src | 输 入 | 源 操 作 数(Mx scale矩 阵)的 起 始 地 址,数 据 类 型 为fp8_e8m0_t。 |
| x_start_pos | 输 入 | 源 操 作 数X轴 方 向 的 起 始 位 置,即M维 度 方 向,单 位 为1个 分 形(1个 单 位 代 表 一 个32B的 分 形)。 |
| y_start_pos | 输 入 | 源 操 作 数Y轴 方 向 的 起 始 位 置,即K维 度 方 向,单 位 为32B。 |
| x_step | 输 入 | 源 操 作 数X轴 方 向 搬 运 长 度,即M维 度 方 向,单 位 为1个 分 形(1个 单 位 代 表 一 个32B的 分 形)。取 值 范 围:[0, 255]。 |
| y_step | 输 入 | 源 操 作 数Y轴 方 向 搬 运 长 度,即K维 度 方 向,单 位 为32B。取 值 范 围:[0, 255]。 |
| src_stride | 输 入 | 源 操 作 数X轴 方 向 前 一 个 分 形 起 始 地 址 与 后 一 个 分 形 起 始 地 址 的 间 隔,单 位 为32B。 |
| dst_stride | 输 入 | 目 的 操 作 数X轴 方 向 前 一 个 分 形 起 始 地 址 与 后 一 个 分 形 起 始 地 址 的 间 隔,单 位 为32B。 |
返 回 值 说 明
无
流 水 类 型
PIPE_MTE1
约 束 说 明
- scale矩 阵 的 分 形 固 定 为(16, 2, 16),对 应L0B Buffer的 分 形 为(16, 32, 16),占L0B Buffer地 址 的1 / 16,需 要 按 照 这 种 地 址 约 束 存 放 地 址。
- dst(L0B Buffer的 地 址)的 数 据 类 型 支 持fp4x2_e2m1_t、fp4x2_e1m2_t、fp8_e5m2_t、fp8_e4m3fn_t,src的 数 据 类 型 支 持fp8_e8m0_t。
- dst、src的 起 始 地 址 需 要32字 节 对 齐。
调 用 示 例
C++
__cbuf__ fp8_e8m0_t src[1024];
__cb__ fp8_e5m2_t dst[1024];
uint16_t x_start_pos = 0;
uint16_t y_start_pos = 0;
uint8_t x_step = 0;
uint8_t y_step = 0;
uint16_t src_stride = 8;
uint16_t dst_stride = 8;
uint64_t mx_dst_addr = static_cast<uint64_t>(reinterpret_cast<uintptr_t>(dst)) / 16;
asc_copy_l12l0b_mx(mx_dst_addr, src, x_start_pos, y_start_pos, x_step, y_step, src_stride, dst_stride);