CANN/asc-devkit SIMD算子L2缓存优化

发布时间:2026/7/18 10:26:10
CANN/asc-devkit SIMD算子L2缓存优化 设置合理的L2 CacheMode【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit【优先级】高[!NOTE]说明 该性能优化指导适用于如下产品型号Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品【描述】L2 Cache常用于缓存频繁访问的数据其物理位置如下图所示L2 Cache的带宽相比GM的带宽有数倍的提升因此当数据命中L2 Cache时数据的搬运耗时会优化数倍。通常情况下L2 Cache命中率越高算子的性能越好在实际访问中需要通过设置合理的L2 CacheMode来保证重复读取的数据尽量缓存在L2 Cache上。L2 Cache访问的原理及CacheMode介绍数据通过MTE2搬运单元搬入时L2 Cache访问的典型流程如下数据通过MTE3或者Fixpipe搬运单元搬出时L2 Cache访问的典型流程如下从上面的流程可以看出当数据访问总量超出L2 Cache容量时AI Core会对L2 Cache进行数据替换。由于Cache一致性的要求替换过程中旧数据需要先写回GM此过程中会占用GM带宽旧数据写回后新的数据才能进入L2 Cache。开发者可以针对访问的数据设置其CacheMode对于只访问一次的Global Memory数据设置其访问状态为不进入L2 Cache这样可以更加高效的利用L2 Cache缓存需要重复读取的数据避免一次性访问的数据替换有效数据。设置L2 CacheMode的方法Ascend C基于GlobalTensor提供了SetL2CacheHint接口用户可以根据需要指定CacheMode。考虑如下场景构造两个Tensor的相加计算输入x、y和输出z的Shape均为(8192, 8192)。下文完整样例请参考设置合理L2 CacheMode样例。实现方案原始实现优化实现实现方法总数据量384MB其中x128MBy128MBz128MB。使用48个核参与计算按行方向切分6份列方向切分8份。x、y、z对应GlobalTensor的CacheMode均设置为CACHE_MODE_NORMAL需要经过L2 Cache需要进入L2 Cache的总数据量为384MB。总数据量384MB其中x128MBy128MBz128MB。使用48个核参与计算按行方向切分6份列方向切分8份。z对应的GlobalTensor的CacheMode设置为CACHE_MODE_NORMALx和y对应的GlobalTensor的CacheMode设置为CACHE_MODE_DISABLE。只将z设置为需要经过L2 Cache。需要进入L2 Cache的总数据量为128MB。示例代码xGm.SetGlobalBuffer((__gm__ half *)x startM * totalN startN, bufferSize); yGm.SetGlobalBuffer((__gm__ half *)y startM * totalN startN, bufferSize); zGm.SetGlobalBuffer((__gm__ half *)z startM * totalN startN, bufferSize);xGm.SetGlobalBuffer((__gm__ half *)x startM * totalN startN, bufferSize); yGm.SetGlobalBuffer((__gm__ half *)y startM * totalN startN, bufferSize); zGm.SetGlobalBuffer((__gm__ half *)z startM * totalN startN, bufferSize); // disable the L2 cache mode of x and y xGm.SetL2CacheHint(AscendC::CacheMode::CACHE_MODE_DISABLE); yGm.SetL2CacheHint(AscendC::CacheMode::CACHE_MODE_DISABLE);[!NOTE]说明 你可以通过执行如下命令行通过msOpProf工具获取上述示例的性能数据并进行对比。msopprof --launch-count2 --output./prof ./execute_add_op重点关注Memory.csv中的aiv_gm_to_ub_bw(GB/s)和aiv_main_mem_write_bw(GB/s)写带宽的速率。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考