CANN/asc-devkit DCCI缓存控制接口文档
asc_dcci【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品不支持Atlas 推理系列产品AI Core不支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明头文件路径c_api/cache_ctrl/cache_ctrl.h。在AI Core内部Scalar单元和DMA单元都可能对Global Memory进行访问。 \如上图所示DMA搬运单元读写Global Memory数据通过asc_copy_ub2gm和asc_copy_gm2ub等接口在UB等Local Memory和Global Memory间交互没有Cache一致性问题 Scalar单元访问Global Memory首先会访问每个核内的Data Cache因此存在Data Cache与Global Memory的Cache一致性问题。 该接口用来刷新Cache保证Cache的一致性使用场景如下读取Global Memory的数据但该数据可能在外部被其余核修改此时需要使用asc_dcci接口直接访问Global Memory获取最新数据 用户通过Scalar单元写Global Memory的数据希望立刻写出也需要使用asc_dcci接口。Scalar单元访问UB数据时该接口需配合asc_set_ctrl()接口使用将CTRL[49]设置为1b1开启datacache模式。针对Ascend 950PR/Ascend 950DT不支持asc_dcci_entire_ub接口。函数原型// 刷新传入地址所在的单个Cache Line __aicore__ inline void asc_dcci_single(__gm__ void* dst) // 刷新传入的UB地址空间地址所在的单个Cache Line __aicore__ inline void asc_ub_dcci_single(__ubuf__ void* dst) // 刷新所有Cache Line __aicore__ inline void asc_dcci_entire_all() __aicore__ inline void asc_dcci_entire_ub() __aicore__ inline void asc_dcci_entire_out() __aicore__ inline void asc_dcci_entire_atomic()参数说明参数名输入/输出描述dst输入需要刷新缓存的向量的起始地址。返回值说明无流水类型PIPE_S约束说明无调用示例// 示例SINGLE_CACHE_LINE模式x_gm 64B对齐场景 // 假设x为外部传入的地址每个核计算16个数据block_idx为内置变量通过block_idx计算偏移实现多核间数据隔离 __gm__ float* x_gm x block_idx * 16; for (int i 0; i 16; i) { x_gm[i] static_castfloat(i block_idx); } // 由于首地址64B对齐调用asc_dcci_single指令后数据会立刻刷新到Global Memory asc_dcci_single(reinterpret_cast__gm__ uint64_t*(x_gm));【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考