asc_set_va_reg
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| √ | |
| √ | |
| √ |
功 能 说 明
用 于 设 置transpose的16个DataBlock地 址,将 操 作 数 地 址 序 列 与 地 址 寄 存 器 关 联,接 口 要 求 前8个 和 后8个 地 址 序 列 与 地 址 寄 存 器 分 别 关 联。
函 数 原 型
C++
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ int8_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ uint8_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ int16_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ uint16_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ half** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ int32_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ uint32_t** src_array)
__aicore__ inline void asc_set_va_reg(ub_addr8_t addr, __ubuf__ float** src_array)
参 数 说 明
| 参 数 名 | 输 入/输 出 | 描 述 |
|---|---|---|
| addr | 输 入 | 地 址 寄 存 器,类 型 为ub_addr8_t,可 取 值 为: • VA0 • VA1 • VA2 • VA3 • VA4 • VA5 • VA6 • VA7 数 字 代 表 寄 存 器 顺 序,每 个 地 址 寄 存 器 只 能 关 联8个 地 址,使 用 方 法 请 参 考 调 用 示 例 |
| src_array | 输 入 | 操 作 数 地 址 序 列。 |
返 回 值 说 明
无
流 水 类 型
PIPE_V
约 束 说 明
- 操 作 数 地 址 对 齐 约 束 请 参 考通 用 地 址 对 齐 约 束。
调 用 示 例
C++
constexpr uint64_t total_length = 256; // total_length指 参 与 计 算 的 数 据 长 度
__ubuf__ half src[total_length];
__ubuf__ half dst[total_length];
const uint32_t STEP = 16;
// src_list和dst_list是16个DataBlock地 址 的 数 组
__ubuf__ half* src_list[16] = {
(__ubuf__ half*)(src + 0 * STEP),
(__ubuf__ half*)(src + 1 * STEP),
(__ubuf__ half*)(src + 2 * STEP),
(__ubuf__ half*)(src + 3 * STEP),
(__ubuf__ half*)(src + 4 * STEP),
(__ubuf__ half*)(src + 5 * STEP),
(__ubuf__ half*)(src + 6 * STEP),
(__ubuf__ half*)(src + 7 * STEP),
(__ubuf__ half*)(src + 8 * STEP),
(__ubuf__ half*)(src + 9 * STEP),
(__ubuf__ half*)(src + 10 * STEP),
(__ubuf__ half*)(src + 11 * STEP),
(__ubuf__ half*)(src + 12 * STEP),
(__ubuf__ half*)(src + 13 * STEP),
(__ubuf__ half*)(src + 14 * STEP),
(__ubuf__ half*)(src + 15 * STEP)
};
__ubuf__ half* dst_list[16] = {
(__ubuf__ half*)(dst + 0 * STEP),
(__ubuf__ half*)(dst + 1 * STEP),
(__ubuf__ half*)(dst + 2 * STEP),
(__ubuf__ half*)(dst + 3 * STEP),
(__ubuf__ half*)(dst + 4 * STEP),
(__ubuf__ half*)(dst + 5 * STEP),
(__ubuf__ half*)(dst + 6 * STEP),
(__ubuf__ half*)(dst + 7 * STEP),
(__ubuf__ half*)(dst + 8 * STEP),
(__ubuf__ half*)(dst + 9 * STEP),
(__ubuf__ half*)(dst + 10 * STEP),
(__ubuf__ half*)(dst + 11 * STEP),
(__ubuf__ half*)(dst + 12 * STEP),
(__ubuf__ half*)(dst + 13 * STEP),
(__ubuf__ half*)(dst + 14 * STEP),
(__ubuf__ half*)(dst + 15 * STEP)
};
const int32_t VA_REG_ARRAY_LEN = 8;
// 接 口 要 求 前8个 和 后8个 地 址 序 列 与 地 址 寄 存 器 分 别 关 联
asc_set_va_reg(VA0, dst_list);
asc_set_va_reg(VA1, dst_list + VA_REG_ARRAY_LEN);
asc_set_va_reg(VA2, src_list);
asc_set_va_reg(VA3, src_list + VA_REG_ARRAY_LEN);