asc_storeunalign【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况产品是否支持Ascend 950PR/Ascend 950DT√功能说明reg计算数据搬运接口适用于从矢量数据寄存器连续非32B对齐的起始地址连续搬出到UB的场景。该接口使用uint32_t作为存储偏移量不改变源操作数在UB上的地址每次循环的调用都需要用户手动更新目的操作数在UB上的地址。函数原型__simd_callee__ inline void asc_storeunalign(__ubuf__ int8_t* dst, vector_store_unalign src0, vector_int8_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ uint8_t* dst, vector_store_unalign src0, vector_uint8_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ int16_t* dst, vector_store_unalign src0, vector_int16_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ uint16_t* dst, vector_store_unalign src0, vector_uint16_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ int32_t* dst, vector_store_unalign src0, vector_int32_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ int64_t* dst, vector_store_unalign src0, vector_int64_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ uint32_t* dst, vector_store_unalign src0, vector_uint32_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ half* dst, vector_store_unalign src0, vector_half src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ float* dst, vector_store_unalign src0, vector_float src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ bfloat16_t* dst, vector_store_unalign src0, vector_bfloat16_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ fp8_e4m3fn_t* dst, vector_store_unalign src0, vector_fp8_e4m3fn_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ hifloat8_t* dst, vector_store_unalign src0, vector_hifloat8_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ fp8_e5m2_t* dst, vector_store_unalign src0, vector_fp8_e5m2_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ fp8_e8m0_t* dst, vector_store_unalign src0, vector_fp8_e8m0_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ fp4x2_e2m1_t* dst, vector_store_unalign src0, vector_fp4x2_e2m1_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ fp4x2_e1m2_t* dst, vector_store_unalign src0, vector_fp4x2_e1m2_t src1, uint32_t count) __simd_callee__ inline void asc_storeunalign(__ubuf__ int4b_t* dst, vector_store_unalign src0, vector_int4x2_t src1, uint32_t count)参数说明参数名输入/输出描述dst输出目的操作数矢量的起始地址。src0输入/输出非对齐寄存器用于保存非对齐数据长度32B。src1输入源操作数矢量数据寄存器。count输入存储搬运的个数。矢量数据寄存器和非对齐寄存器的详细说明请参见reg数据类型定义.md。返回值说明无流水类型PIPE_V约束说明该接口中的dst不需要32B对齐。调用该接口之后需要调用asc_storeunalign_post接口处理非对齐搬出的尾块。调用示例// dst地址为8非32B对齐占用的地址为UB[8:520]。 __ubuf__ uint32_t* dst (__ubuf__ uint32_t*)asc_get_phy_buf_addr(8); vector_store_unalign ureg; vector_uint32_t src; uint32_t count 64; uint32_t repeat 2; for (uint32_t i 0; i repeat; i) { // 其他reg操作 // 第一次src[0:62] 写入 dst[0:62]即UB[8:256]同时src[62:64] 写入 ureg[0:2] // 第二次ureg[0:2] src[0:62] 写入 dst[62:126]即UB[256:512]同时src[62:64] 写入 ureg[0:2] asc_storeunalign(dst i*count, ureg, src, count); } // dst结束地址为520即dst repeat * count * sizeof(uint32_t)所以offset要配置为repeat * count int32_t offset repeat * count; // ureg[0:2] 写入 dst[126:128]即UB[512:520] asc_storeunalign_post(dst, ureg, offset);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考