asc_loadalign_deintlv_postupdate
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | 支 持 |
功 能 说 明
asc_loadalign_deintlv_postupdate用 于 从UB中 读 取 以32B对 齐 地 址src为 起 始 位 置 的 连 续2 x VL长 度 数 据。数 据 按 元 素 类 型 宽 度 进 行 解 释,在Load过 程 中 完 成 解 交 织 后,分 别 写 入 两 个 目 的 向 量 寄 存 器dst0和dst1。
与asc_loadalign_deintlv不 同,该 接 口 在 完 成 数 据 加 载 后,会 对 源 地 址 参 数src执 行 后 更 新 操 作:
C++
src = src + offset
其 中,offset的 单 位 为 元 素 个 数,实 际 地 址 偏 移 字 节 数 为:offset * sizeof(data_type)。
以float数 据 类 型、Ascend 950PR/Ascend 950DT产 品 为 例,若VL = 256B、src = 32、offset = 128,调 用asc_loadalign_deintlv_postupdate后,数 据 从UB到Reg的 排 布 如 下 图 所 示,同 时src会 更 新 为544,可 直 接 用 于 后 续 计 算。

提 示:
- 使 用 本 接 口 需 要 包 含 头 文 件
reg_load.h。- 本 接 口 会 修 改 输 入 的UB地 址 参 数
src。若 需 要 保 留 原 始 地 址,请 使 用asc_loadalign_deintlv。
函 数 原 型
支 持 的 数 据 类 型 请 参 见数 据 类 型章 节。
C++
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_int4x2_t& dst0, vector_int4x2_t& dst1, __ubuf__ int4b_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_fp4x2_e2m1_t& dst0, vector_fp4x2_e2m1_t& dst1, __ubuf__ fp4x2_e2m1_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_fp4x2_e1m2_t& dst0, vector_fp4x2_e1m2_t& dst1, __ubuf__ fp4x2_e1m2_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_int8_t& dst0, vector_int8_t& dst1, __ubuf__ int8_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_uint8_t& dst0, vector_uint8_t& dst1, __ubuf__ uint8_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_fp8_e8m0_t& dst0, vector_fp8_e8m0_t& dst1, __ubuf__ fp8_e8m0_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_fp8_e5m2_t& dst0, vector_fp8_e5m2_t& dst1, __ubuf__ fp8_e5m2_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_fp8_e4m3fn_t& dst0, vector_fp8_e4m3fn_t& dst1, __ubuf__ fp8_e4m3fn_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_hifloat8_t& dst0, vector_hifloat8_t& dst1, __ubuf__ hifloat8_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_int16_t& dst0, vector_int16_t& dst1, __ubuf__ int16_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_uint16_t& dst0, vector_uint16_t& dst1, __ubuf__ uint16_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_half& dst0, vector_half& dst1, __ubuf__ half*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_bfloat16_t& dst0, vector_bfloat16_t& dst1, __ubuf__ bfloat16_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_int32_t& dst0, vector_int32_t& dst1, __ubuf__ int32_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_uint32_t& dst0, vector_uint32_t& dst1, __ubuf__ uint32_t*& src, int32_t offset)
__simd_callee__ inline void asc_loadalign_deintlv_postupdate(vector_float& dst0, vector_float& dst1, __ubuf__ float*& src, int32_t offset)
参 数 说 明
| 参 数 名 | 输 入/输 出 | 说 明 |
|---|---|---|
| dst0 | 输 出 | 第 一 个 目 的 向 量 寄 存 器。 |
| dst1 | 输 出 | 第 二 个 目 的 向 量 寄 存 器。 |
| src | 输 入/输 出 | 源 数 据 在UB中 的 起 始 地 址,要 求32B对 齐。接 口 执 行 完 成 后,src会 更 新 为src + offset。 |
| offset | 输 入 | 地 址 偏 移 量,单 位 为 元 素 个 数。 |
向 量 寄 存 器 类 型 的 详 细 说 明 请 参 见reg数 据 类 型 定 义.md。
数 据 类 型
asc_loadalign_deintlv_postupdate支 持 的 数 据 类 型 如 下 表 所 示。
源 数 据 类 型src | 目 的 寄 存 器 类 型dst0/dst1 |
|---|---|
int4b_t | vector_int4x2_t |
fp4x2_e1m2_t | vector_fp4x2_e1m2_t |
fp4x2_e2m1_t | vector_fp4x2_e2m1_t |
int8_t | vector_int8_t |
uint8_t | vector_uint8_t |
fp8_e4m3fn_t | vector_fp8_e4m3fn_t |
fp8_e5m2_t | vector_fp8_e5m2_t |
fp8_e8m0_t | vector_fp8_e8m0_t |
hifloat8_t | vector_hifloat8_t |
int16_t | vector_int16_t |
uint16_t | vector_uint16_t |
half | vector_half |
bfloat16_t | vector_bfloat16_t |
int32_t | vector_int32_t |
uint32_t | vector_uint32_t |
float | vector_float |
返 回 值 说 明
无。
流 水 类 型
PIPE_V
约 束 说 明
src必 须 为32B对 齐 地 址,且 访 问 范 围 不 能 超 过UB有 效 地 址 上 界 减 去2 x VL,否 则 可 能 导 致UB越 界 访 问。- 在 循 环 中 使 用 本 接 口 时,
offset的 取 值 需 要 保 证 更 新 后 的src仍 满 足32B对 齐 要 求。 offset以 元 素 为 单 位,实 际 地 址 步 长 需 要 结 合 源 数 据 类 型 宽 度 进 行 换 算。
调 用 示 例
从UB中 连 续 读 取 以32B对 齐 地 址src为 起 始 位 置 的float数 据,并 在 每 次 调 用 后 自 动 更 新 地 址。
C++
for (uint16_t i = 0; i < repeat_times; i++) {
asc_loadalign_deintlv_postupdate(reg0, reg1, src, one_repeat_size);
...
}