asc_storealign
产 品 支 持 情 况
| 产 品 | 是 否 支 持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
功 能 说 明
reg计 算 数 据 搬 运 接 口,适 用 于 从 矢 量 数 据 寄 存 器 或 掩 码 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景,并 支 持 多 种 搬 出 模 式,接 口 通 过int32_t传 入 偏 移,用 户 可 以 选 择 更 新 偏 移 或 者 更 新 目 的 操 作 数 的 地 址。
- 从 矢 量 数 据 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景
- NORM搬 出 模 式:正 常 模 式,搬 运VL数 据,支 持 数 据 类 型 为b8、b16、b32。
- FIRST搬 出 模 式:忽 略mask,向dst_align32b中 搬 运src第 一 个 元 素,支 持 数 据 类 型 为b8、b16、b32。
- PACK搬 出 模 式:压 缩 模 式,根 据mask将src中 有 效 元 素 的 低 半 部 分bit数 据 连 续 存 储 于dst_align32b中,支 持 数 据 类 型 为b16、b32、b64。
- PACKV2搬 出 模 式:压 缩 模 式,根 据mask将src中 有 效 元 素 的 低8bits数 据 连 续 存 储 于dst_align32b中,支 持 数 据 类 型 为b32。
- INTLV搬 出 模 式:双 搬 出 模 式,忽 略mask,将src0,src1中 的 元 素 交 错 存 储 于dst中,存 储 长 度 为VL*2。
- 从 掩 码 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景
- NORM搬 出 模 式:正 常 模 式,搬 运VL数 据,支 持 数 据 类 型 为u8、u16、u32。
- PACK搬 出 模 式:压 缩 模 式,将src中 元 素 的 低 半 部 分bit数 据 连 续 存 储 于dst中,支 持 数 据 类 型 为u8、u16、u32。
函 数 原 型
- 从 矢 量 数 据 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景 C++
// NORM搬 出 模 式 __simd_callee__ inline void asc_storealign(__ubuf__ int8_t* dst_align32b, vector_int8_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ uint8_t* dst_align32b, vector_uint8_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ int16_t* dst_align32b, vector_int16_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ uint16_t* dst_align32b, vector_uint16_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ int32_t* dst_align32b, vector_int32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ uint32_t* dst_align32b, vector_uint32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ half* dst_align32b, vector_half src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ float* dst_align32b, vector_float src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ bfloat16_t* dst_align32b, vector_bfloat16_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ fp8_e4m3fn_t* dst_align32b, vector_fp8_e4m3fn_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ hifloat8_t* dst_align32b, vector_hifloat8_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ fp8_e5m2_t* dst_align32b, vector_fp8_e5m2_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ fp8_e8m0_t* dst_align32b, vector_fp8_e8m0_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ fp4x2_e2m1_t* dst_align32b, vector_fp4x2_e2m1_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ fp4x2_e1m2_t* dst_align32b, vector_fp4x2_e1m2_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign(__ubuf__ int4b_t* dst_align32b, vector_int4x2_t src, int32_t offset, vector_bool mask) // FIRST搬 出 模 式 __simd_callee__ inline void asc_storealign_1st(__ubuf__ int8_t* dst_align32b, vector_int8_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ uint8_t* dst_align32b, vector_uint8_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ int16_t* dst_align32b, vector_int16_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ uint16_t* dst_align32b, vector_uint16_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ int32_t* dst_align32b, vector_int32_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ uint32_t* dst_align32b, vector_uint32_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ half* dst_align32b, vector_half src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ float* dst_align32b, vector_float src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ bfloat16_t* dst_align32b, vector_bfloat16_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ fp8_e4m3fn_t* dst_align32b, vector_fp8_e4m3fn_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ hifloat8_t* dst_align32b, vector_hifloat8_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ fp8_e5m2_t* dst_align32b, vector_fp8_e5m2_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ fp8_e8m0_t* dst_align32b, vector_fp8_e8m0_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ fp4x2_e2m1_t* dst_align32b, vector_fp4x2_e2m1_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ fp4x2_e1m2_t* dst_align32b, vector_fp4x2_e1m2_t src, int32_t offset) __simd_callee__ inline void asc_storealign_1st(__ubuf__ int4b_t* dst_align32b, vector_int4x2_t src, int32_t offset) // PACK搬 出 模 式 __simd_callee__ inline void asc_storealign_pack(__ubuf__ int16_t* dst_align32b, vector_int16_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint16_t* dst_align32b, vector_uint16_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ int32_t* dst_align32b, vector_int32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint32_t* dst_align32b, vector_uint32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ int64_t* dst_align32b, vector_int64_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint64_t* dst_align32b, vector_uint64_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ half* dst_align32b, vector_half src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ float* dst_align32b, vector_float src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack(__ubuf__ bfloat16_t* dst_align32b, vector_bfloat16_t src, int32_t offset, vector_bool mask) // PACKV2搬 出 模 式 __simd_callee__ inline void asc_storealign_pack_v2(__ubuf__ int32_t* dst_align32b, vector_int32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack_v2(__ubuf__ uint32_t* dst_align32b, vector_uint32_t src, int32_t offset, vector_bool mask) __simd_callee__ inline void asc_storealign_pack_v2(__ubuf__ float* dst_align32b, vector_float src, int32_t offset, vector_bool mask) // INTLV搬 出 模 式 __simd_callee__ inline void asc_storealign_intlv(__ubuf__ int8_t* dst_align32b, vector_int8_t src0, vector_int8_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ uint8_t* dst_align32b, vector_uint8_t src0, vector_uint8_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ int16_t* dst_align32b, vector_int16_t src0, vector_int16_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ uint16_t* dst_align32b, vector_uint16_t src0, vector_uint16_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ int32_t* dst_align32b, vector_int32_t src0, vector_int32_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ uint32_t* dst_align32b, vector_uint32_t src0, vector_uint32_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ half* dst_align32b, vector_half src0, vector_half src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ bfloat16_t* dst_align32b, vector_bfloat16_t src0, vector_bfloat16_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ fp8_e4m3fn_t* dst_align32b, vector_fp8_e4m3fn_t src0, vector_fp8_e4m3fn_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ hifloat8_t* dst_align32b, vector_hifloat8_t src0, vector_hifloat8_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ fp8_e5m2_t* dst_align32b, vector_fp8_e5m2_t src0, vector_fp8_e5m2_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ fp8_e8m0_t* dst_align32b, vector_fp8_e8m0_t src0, vector_fp8_e8m0_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ fp4x2_e2m1_t* dst_align32b, vector_fp4x2_e2m1_t src0, vector_fp4x2_e2m1_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ fp4x2_e1m2_t* dst_align32b, vector_fp4x2_e1m2_t src0, vector_fp4x2_e1m2_t src1, int32_t offset) __simd_callee__ inline void asc_storealign_intlv(__ubuf__ int4b_t* dst_align32b, vector_int4x2_t src0, vector_int4x2_t src1, int32_t offset) - 从 掩 码 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景 C++
// NORM搬 出 模 式 __simd_callee__ inline void asc_storealign(__ubuf__ uint32_t* dst, vector_bool src, int32_t offset) __simd_callee__ inline void asc_storealign(__ubuf__ uint16_t* dst, vector_bool src, int32_t offset) __simd_callee__ inline void asc_storealign(__ubuf__ uint8_t* dst, vector_bool src, int32_t offset) // PACK搬 出 模 式 __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint32_t* dst, vector_bool src, int32_t offset) __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint16_t* dst, vector_bool src, int32_t offset) __simd_callee__ inline void asc_storealign_pack(__ubuf__ uint8_t* dst, vector_bool src, int32_t offset)
参 数 说 明
从 矢 量 数 据 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景
参 数 名 输 入/输 出 描 述 dst_align32b 输 出 目 的 操 作 数(矢 量)的 起 始 地 址。 src 输 入 源 操 作 数(矢 量 数 据 寄 存 器)。 src0 输 入 源 操 作 数0(矢 量 数 据 寄 存 器)。 src1 输 入 源 操 作 数1(矢 量 数 据 寄 存 器)。 mask 输 入 源 操 作 数 掩 码(掩 码 寄 存 器),用 于 指 示 在 计 算 过 程 中 哪 些 元 素 参 与 计 算。对 应 位 置 为1时 参 与 计 算,为0时 不 参 与 计 算。mask未 筛 选 的 元 素 在 输 出 中 置 零。 offset 输 入 地 址 偏 移 量。 从 掩 码 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景
参 数 名 输 入/输 出 描 述 dst 输 出 目 的 操 作 数(矢 量)的 起 始 地 址。 src 输 入 源 操 作 数(掩 码 寄 存 器)。 offset 输 入 地 址 偏 移 量。
矢 量 数 据 寄 存 器 和 掩 码 寄 存 器 的 详 细 说 明 请 参 见reg数 据 类 型 定 义.md。
返 回 值 说 明
无
流 水 类 型
PIPE_V
约 束 说 明
无
调 用 示 例
- 从 矢 量 数 据 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景 C++
__ubuf__ half* dst_align32b = (__ubuf__ half*)asc_get_phy_buf_addr(0); vector_half src; vector_bool mask = asc_create_mask_b16(PAT_ALL); int32_t offset = 128; asc_storealign(dst_align32b, src, offset, mask); - 从 掩 码 寄 存 器 连 续 对 齐 搬 出 到UB的 场 景 C++
__ubuf__ uint32_t* dst = (__ubuf__ uint32_t*)asc_get_phy_buf_addr(0); vector_bool src; int32_t offset = 0; asc_storealign(dst, src, offset);