cann/asc-devkit:避免bank冲突(NPU架构版本2201)
避免bank冲突NPU架构版本2201【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit【优先级】高[!NOTE]说明 该性能优化建议适用于如下产品型号Atlas A3 训练系列产品/Atlas A3 推理系列产品Atlas A2 训练系列产品/Atlas A2 推理系列产品【描述】为了提高数据访问的效率和吞吐量Unified Buffer采用了bank大小相等的内存模块结构设计。Unified Buffer总大小为192K划分为48个bank。每个bank由128行组成每行长度为32B。这48个bank进一步组织为16个bank group每个bank group包含3个bank例如bank15、bank31和bank47组成一个bank group。图1bank结构示意图图中箭头方向表示内存排布的顺序![](https://raw.gitcode.com/cann/asc-devkit/raw/ded540824a702f5cab69a36879315c31ce8ff9b7/docs/zh/guide/figures/bank结构示意图图中箭头方向表示内存排布的顺序.png bank结构示意图图中箭头方向表示内存排布的顺序?utm_sourcegitcode_repo_files)每个bank可以独立地进行数据的读写操作允许多个数据请求同时进行。然而当多个读写操作试图同时访问同一个bank或bank group时由于硬件资源的限制这些操作必须排队等待会导致bank冲突引起性能下降。具体来说Vector计算单元每拍一个指令周期能够从每个bank group中读取或写入一行数据。如果同一个API中的多个操作试图同时访问同一个bank或bank groupVector计算单元无法在同一个周期内处理所有请求导致这些请求排队等待。这种排队增加了数据访问的延迟降低了系统的整体性能。bank冲突的典型场景bank冲突主要可以分为以下三种场景读写冲突读操作和写操作同时尝试访问同一个bank。写写冲突多个写操作同时尝试访问同一个bank group。读读冲突多个读操作同时尝试访问同一个bank group。下文给出了一些具体的示例假设0x10000地址在bank16上0x10020在bank17上0x20020在bank33上如下图所示图2地址分配示意图![](https://raw.gitcode.com/cann/asc-devkit/raw/ded540824a702f5cab69a36879315c31ce8ff9b7/docs/zh/guide/figures/地址分配示意图.png 地址分配示意图?utm_sourcegitcode_repo_files)读写冲突示例Vector指令的源操作数src和目的操作数dst同时读写到同一个bank时造成读写冲突具体分析如下表1读写冲突示例序号src地址dst地址bankbank group结论示例10x100200x10000bank_id0 ! bank_id1bank_group_id0 ! bank_group_id1src地址和dst地址分别属于bank16和bank17故无冲突。示例20x100200x10E20bank_id0 bank_id1bank_group_id0 bank_group_id1src地址和dst地址的地址都在bank17故存在冲突。写写冲突示例Vector指令目的操作数dst对应的8个DataBlockblock0-block7同时写到一个bank group时造成写写冲突具体分析如下表2写写冲突示例序号dst地址blk_strideblock0_addrblock1_addrblock2_addr...结论示例10x1FE00160x1FE000x200000x20200...8个DataBlock均在一个bank group下故全部冲突8拍完成一个Repeat的写入。示例20x1FE0080x1FE000x1FF000x20000...block0和block2在一个bank group存在冲突4拍完成一个Repeat的写入。读读冲突Vector指令多个源操作数同时读到同一个bank group时造成读读冲突具体分析如下表3双src场景读读冲突示例序号src0地址src1地址bankbank group结论示例10x100200x20020bank_id0 ! bank_id1bank_group_id0 bank_group_id1存在冲突。示例20x100200x10000bank_id0 ! bank_id1bank_group_id0 ! bank_group_id1无冲突。Vector指令某一个源操作数对应的8个DataBlockblock0-block7读到同一个bank group时造成读读冲突具体分析如下表4单src场景读读冲突示例序号src地址blk_strideblock0_addrblock1_addrblock2_addr...结论示例10x1FE00160x1FE000x200000x20200...8个DataBlock均在一个bank group下故全部冲突8拍完成一个Repeat的读操作。示例20x1FE0080x1FE000x1FF000x20000...block0和block2在同一个bank group下存在冲突4拍完成一个Repeat。[!NOTE]说明 通过msOpProf工具可以进行资源冲突占比的相关性能数据采集。 工具的具体使用方法和资源冲突占比文件性能数据文件说明请参考《msOpProf用户指南》。如何避免bank冲突避免bank冲突的方法有两种优化计算逻辑和优化地址分配。优化计算逻辑对一个shape为(8, 16, 16)的输入做(1, 0, 2)的transpose操作输出shape为(16, 8, 16)。通过将计算逻辑由“跳读连续写”修改为“连续读跳写”可避免冲突问题。实现方案对比如下实现方案原始实现优化实现实现方法跳读连续写同一Repeat内输入的8个DataBlock都在同一个bank group而发生读读冲突。连续读跳写同一个Repeat内输入的8个DataBlock不在同一个bank group内避免了读读冲突。示意图示例代码uint64_t mask 128; UnaryRepeatParams params; params.dstBlkStride 1; params.srcBlkStride 16; for(uint32_t i0; i16; i) { AscendC::Adds(dstLocal[i * 128], srcLocal[i * 16], 0, mask, 1, params); }uint64_t mask 128; UnaryRepeatParams params; params.dstBlkStride 8; params.srcBlkStride 1; for(uint32_t i0; i8; i) { AscendC::Adds(dstLocal[i * 16], srcLocal[i * 256], 0, mask, 2, params); }优化地址分配实现8192 × 8192half ND矩阵到全局紧凑NZ布局的转换切分后每个Tile块完成144 × 128half数据的转换。通过在内存分配时适当扩大内存调整单次搬运内相邻Datablock的地址步长保证在同一个Copy搬运操作内不同Datablock的写操作不会同时出现在一个bank group内。完整样例可参考避免bank冲突样例。 实现方案对比如下实现方案原始实现优化实现实现方法不做地址优化及搬运步长Copy时步长为144各个Tensor的地址分别为ND矩阵起始地址0x0tensor长度为144 * 128 * sizeof(half)字节NZ矩阵起始地址0x12000tensor长度为144 * 128 * sizeof(half)字节在每个Copy搬运操作内8个Datablock同时写一个bank group单条Copy从一拍拉长为8拍。优化地址及搬运步长为NZ矩阵多申请256字节即多申请一行UB内存空间Copy时步长为145各个Tensor的地址分别为ND矩阵起始地址0x0tensor长度为144 * 128 * sizeof(half)字节NZ矩阵起始地址0x12000tensor长度为145 * 128 * sizeof(half)字节NZ矩阵多申请256字节且将Copy时步长增大1避免Copy搬运时8个Datablock同时写一个bank group单条Copy在一拍内完成。示意图示例代码AscendC::LocalTensor nd(AscendC::TPosition::VECIN, 0, 144 * 128); AscendC::LocalTensor nz(AscendC::TPosition::VECOUT, 2 * 144 * 128 * sizeof(half), 144 * 128); AscendC::CopyRepeatParams copyParams; copyParams.dstStride 144; copyParams.srcStride 1; copyParams.dstRepeatSize 1; copyParams.srcRepeatSize 128 / 16;AscendC::Copy(nz[0], nd[0], static_castuint64_t(128), static_castuint8_t(144), copyParams);AscendC::LocalTensor nd(AscendC::TPosition::VECIN, 0, 144 * 128); AscendC::LocalTensor nz(AscendC::TPosition::VECOUT, 2 * 144 * 128 * sizeof(half), 145 * 128); // 多申请256字节 AscendC::CopyRepeatParams copyParams; copyParams.dstStride 145; // 搬运时地址步长增加1 copyParams.srcStride 1; copyParams.dstRepeatSize 1; copyParams.srcRepeatSize 128 / 16;AscendC::Copy(nz[0], nd[0], static_castuint64_t(128), static_castuint8_t(144), copyParams);更多的UB Bank冲突场景分析可参考bank冲突分析样例。【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ARM多核系统中IPI中断机制与GIC架构详解

ARM多核系统中IPI中断机制与GIC架构详解

1. IPI中断的本质与GIC架构定位在ARM多核处理器系统中,IPI(Inter-Processor Interrupt)中断是实现核间通信的基础机制。作为GIC(Generic Interrupt Controller)架构中定义的SGI(Software Generated Interru…

2026/7/18 7:16:19阅读更多 →
金融行业BI复盘:一个风控看板项目的方案取舍与执行节奏

金融行业BI复盘:一个风控看板项目的方案取舍与执行节奏

导语 金融行业的BI项目,尤其是风控相关的看板,几乎没有"标准答案"。同一个"实时监控预警"的需求,在不同银行、不同风险偏好、不同IT基础设施下,落地路径可能完全不同。参与过不少金融客户的方案评审&#xff…

2026/7/18 7:16:19阅读更多 →
Android屏幕适配:DisplayMetrics与分辨率获取详解

Android屏幕适配:DisplayMetrics与分辨率获取详解

1. DisplayMetrics基础概念解析在Android开发中,DisplayMetrics是一个非常重要的工具类,它提供了关于设备显示特性的关键信息。这个类位于android.util包中,主要包含以下核心字段:widthPixels:屏幕的绝对宽度&#xff…

2026/7/18 7:16:19阅读更多 →
Spring Cloud Gateway与Sa-Token实现微服务无侵入鉴权

Spring Cloud Gateway与Sa-Token实现微服务无侵入鉴权

1. 项目背景与核心价值 微服务架构下鉴权一直是开发者头疼的问题。传统方案在每个服务中重复校验令牌,既冗余又难以维护。最近在电商项目中,我用Spring Cloud GatewaySa-Token组合实现了无侵入式鉴权,效果出乎意料地好。 这套方案的核心优势…

2026/7/18 8:11:23阅读更多 →
射频开关技术解析:原理、应用与选型指南

射频开关技术解析:原理、应用与选型指南

1. 射频开关的基础概念与核心价值 射频开关(RF Switch)是现代无线通信系统中不可或缺的关键元件。简单来说,它就像无线电信号的高速交通警察,负责在电路的不同路径间快速、准确地引导射频信号流向。在5G基站中,一个典型…

2026/7/18 8:11:23阅读更多 →
Python数据分析入门:餐厅订单实战项目指南

Python数据分析入门:餐厅订单实战项目指南

1. 为什么选择餐厅订单分析作为第一个Python数据分析项目当我第一次接触Python数据分析时,最困扰我的不是语法问题,而是找不到一个合适的入门项目。很多教程要么太简单(比如分析几个数字的平均值),要么太复杂&#xff…

2026/7/18 8:11:23阅读更多 →
联想拯救者工具箱:高效管理游戏本性能的终极开源方案

联想拯救者工具箱:高效管理游戏本性能的终极开源方案

联想拯救者工具箱:高效管理游戏本性能的终极开源方案 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolkit 联想拯救者…

2026/7/18 8:11:23阅读更多 →
3D Slicer Python解释器深度解析:从集成原理到自定义环境配置

3D Slicer Python解释器深度解析:从集成原理到自定义环境配置

1. 项目概述:为什么要在Slicer里折腾Python解释器?如果你正在用3D Slicer处理医学影像,无论是做科研、临床分析还是教学演示,迟早会遇到一个分水岭:是满足于软件自带的模块点点鼠标,还是想自己写几行代码&a…

2026/7/18 8:11:23阅读更多 →
Video-Use:对话式AI视频编辑框架如何实现300%创作效率提升

Video-Use:对话式AI视频编辑框架如何实现300%创作效率提升

Video-Use:对话式AI视频编辑框架如何实现300%创作效率提升 【免费下载链接】video-use Edit videos with coding agents 项目地址: https://gitcode.com/GitHub_Trending/vid/video-use 如果你曾花费数小时剪辑视频,反复观看素材寻找最佳剪辑点&a…

2026/7/18 8:06:23阅读更多 →
VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异

VSCode TypeScript 环境配置对比:全局安装 vs 项目本地安装的4个关键差异当你在VSCode中启动一个新的TypeScript项目时,第一个技术决策往往从安装方式开始。这个看似简单的选择——全局安装还是项目本地安装——实际上会深刻影响你的开发流程、团队协作和…

2026/7/17 10:42:55阅读更多 →
智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手

智慧树刷课插件:5分钟实现自动化学习的智能助手 【免费下载链接】zhihuishu 智慧树刷课插件,自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 智慧树刷课插件是一款专为智慧树在线教育平台设计的Chrome浏…

2026/7/17 8:31:03阅读更多 →
Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案

Steam创意工坊下载器WorkshopDL:跨平台游戏模组获取的终极解决方案 【免费下载链接】WorkshopDL WorkshopDL - The Best Steam Workshop Downloader 项目地址: https://gitcode.com/gh_mirrors/wo/WorkshopDL 你是否在GOG或Epic Games Store购买了心仪的游戏…

2026/7/17 13:22:23阅读更多 →
从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则

更多请点击: https://kaifayun.com 第一章:从模糊意图到可执行指令:Claude PRD中Prompt Engineering与需求颗粒度的5级映射法则 在Claude驱动的产品需求文档(PRD)生成实践中,原始业务意图往往以自然语言片…

2026/7/18 0:00:14阅读更多 →
Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

Cursor配置生成失效?3大隐藏陷阱+4行修复代码,资深工程师连夜整理的紧急补救清单

更多请点击: https://codechina.net 第一章:Cursor配置生成失效?3大隐藏陷阱4行修复代码,资深工程师连夜整理的紧急补救清单 Cursor 配置生成突然失效,是近期高频报障场景。表面看是 cursor.config.json 未更新或 LSP…

2026/7/18 0:00:14阅读更多 →
某智驾大牛创业

某智驾大牛创业

作者:钟声编辑:Mark出品:红色星际头图:智能驾驶图片据悉,国内某头部智驾公司端到端模型技术大牛Z投身创业,并且已经拿到融资。Z不仅是该头部公司内部最年轻的对标阿里P10级别技术负责⼈,更是业内…

2026/7/18 0:00:14阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/17 22:48:46阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/17 13:22:38阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/17 17:26:50阅读更多 →