尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
CANN/ops-math Polar内广播优化
Polar inner-broadcast 性能优化方案 A【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math2026-05-21。本轮针对 acceptance 50-case 中唯一性能不达 baseline 的两个 caseTest_036 / Test_044 做 angle inner-broadcast 专用优化从输基线 0.8x 反超到 1.7-3.5x并使所有 angle 周期广播 case 普遍 ~2x 提速。1. 问题定位测试口径pybind EXEC_NPU_CMD(aclnnPolar)msprof op_summary Task Duration每调用设备时50 次取中位。 baseline torch.polarNPU 内置Sin/Cos/Mul/Complex 基础算子拼接。优化前全 50 case 仅这两个输基线Caseinput × angleout 元素优化前 oursbaselinevs baseTest_036[256,256,64] ×[64]4M168.8 µs147.2 µs0.87x❌Test_044[128,128,512] ×[512]8M331.4 µs276.6 µs0.83x❌根因这两个是 angle 为 input trailing-dim 的周期重复 广播。原实现在 op_api 层用BroadcastTo把 angle 物理展开到 out shape同 shape kernel 要求于是Test_036先写 16 MBangle 展开→ kernel 再读 input 16 MB 读展开后 angle 16 MB 写 out 32 MB 80 MB HBMbaseline 用 viewstride0读 angle省掉展开的一次 HBM 写故反而更快。2. 方案 Ainner-broadcast 周期 pre-computekernel 内运行时分支无 tilingKey核心观察angle 周期长度 K angle.numel每个 tile 取整数个 period →cos/sin tile pattern 对所有 tile 完全相同。实现三处资格判定严格一致op_api / op_host tiling / pybind资格 inNoutN anNinN inN%anN0 anN2048 anN%80op_api (aclnn_polar.cpp)资格命中时 angle不 BroadcastTo保留原 shape [K] 传 kernelop_host (polar_tiling.cpp)识别bcastMode1按K-block 分核每核负载 K 整数倍 → tile 起点 period 对齐op_kernel (polar.h)Process()内if(bcastMode1)分支纯 data 字段无需多 kernel 注册PrecomputeBcastCosSin()读 angle[0:K] → Cos/Sin 得 cosT/sinT[K] → 循环 mT/K 次 broadcast 填满 常驻 buffercosTile[0:T] / sinTile[T:2T]只做一次ProcessTileBcast()main loop只读 input→Mul(cosTile,input)→real /Mul(sinTile,input)→imag → Gather 交织 → 写 out。无 angle 搬运、无每 tile Sin/Cos 重算。HBM/算力收益Test_036, 4M80 MB →48 MB省 angle 展开 16 MB angle 读 16 MB→256 B Sin/Cos 从每 tile 重算降到一次 precompute。⚠️ 实现陷阱DataCopy(srcStride0)不是重复同段 broadcast——它连续读 src会把 cosT 之后的 sinT 读进第二 period症状npu.realgolden.imag。正解是把 broadcast 提到 Precompute 一次性循环填满。3. 优化结果关注的两个 case从输基线反超CaseK优化前优化后kernel 提速baselinevs base 前→后Test_03664168.842.14.0x147.20.87x →3.50xTest_044512331.4161.92.0x276.60.83x →1.71x其它 angle 周期广播 case顺带普遍 ~2xCaseout 元素K优化前优化后baselinevs baseTest_035262K6417.615.754.73.47xTest_03716M646543217652.38xTest_03867M642595126133402.65xTest_039134M325181253167712.67xTest_040268M16103545144136332.65xTest_041537M82070110287273612.66xTest_047134M85181258167842.63xTest_04833M32130164116392.56x未启用优化K1/2/4 不满足 32B 对齐走 same-shape 兜底的 Test_042/045/046因规模大268-537M baseline 同为 HBM boundsame-shape 已 1.31-1.47x 胜基线无需再优化。全 50-case 结论无一输基线类别case加速比小同 shape (1-12)same-shape2.5-3.4x大同 shape (13-29)same-shape2.5-3.1x小广播 (30-34, K8)same-shape 兜底3.2-5.3x大广播 (35-50)bcast 资格 ~2x kernel 提速非资格规模大也胜1.3-3.5x4. 官方 AscendOpTest 验证ops-math 工程customize_math vendorpython run_test.py -i .../acceptance/op.json -c Test_036,Test_044 \ --op-type custom --op-path $ASCEND_OPP_PATH/vendors/customize_math/op_api --build结果result.csvcasecompare_resultTest_036passTest_044pass精度判据 err_threshold[1e-3, 1e-3]官方工具确认数值正确。5. 改动文件ops-mathop_kernel/polar_tiling_data.hinN/anN/bcastModeop_host/polar_tiling.cppinner-bcast 检测 K-block 分核op_kernel/polar.hProcess()分支 PrecomputeBcastCosSin()ProcessTileBcast()op_api/aclnn_polar.cpp资格命中时 angle 不 BroadcastToop_api/polar.cpp注释更正同 shape 与非 inner-bcast 广播路径中间轴 / input 侧广播如 Test_043/049/050行为不变由 same-shape kernel op_api BroadcastTo 兜底。【免费下载链接】ops-math本项目是CANN提供的数学类基础计算算子库实现网络在NPU上加速计算。项目地址: https://gitcode.com/cann/ops-math创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

TLA2518与PIC18LF27K40高精度ADC系统设计与优化

TLA2518与PIC18LF27K40高精度ADC系统设计与优化

1. TLA2518与PIC18LF27K40的硬件协同设计 1.1 TLA2518 ADC的关键特性解析 德州仪器的TLA2518是一款12位精度、1MSPS采样率的SAR型ADC,其最突出的特点是灵活的通道配置能力。在实际项目中,我发现这颗芯片的八个通道可以独立配置为: 模拟输入…

📅 2026/9/26 11:11:22
Nginx 配置SSL实现HTTPS访问

Nginx 配置SSL实现HTTPS访问

环境装备 openSSL 需要安装并配置环境变量(记住安装位置) nginx 下载解压即可 官网地址 openSSL: Win32/Win64 OpenSSL Installer for Windows - Shining Light Productionsnginx: nginx: download openSSL 环境变量配置 新增系统变量:变量名 OPENSSL_HOME 变量值…

📅 2026/9/16 20:07:28
5步轻松搞定老款Mac升级:OpenCore Legacy Patcher实用指南

5步轻松搞定老款Mac升级:OpenCore Legacy Patcher实用指南

5步轻松搞定老款Mac升级:OpenCore Legacy Patcher实用指南 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 你是否有一台性能依然不错的老款Mac&am…

📅 2026/10/12 2:24:17
MORE NEWS

更多资讯

📰

Python+Django+小程序:停车场预约推荐系统全栈实战

真正把"Python Django 小程序"这套组合用在停车场预约项目上,会遇到很多文档里没写清楚的实际问题。我最近做完了一个智能停车场预约推荐系统,项目代号就叫这个标题里的"12ob0wt2",整体跑下来的体会是:这类…

📰

手写Java版TCP文件上传下载工具:从三次握手到Socket编程实战

做Java开发这些年,只要涉及到网络功能,文件上传下载就永远是需求清单里的常客。无论是内部系统里的附件上传、定时备份服务器日志,还是两台机器之间搬运几个G的离线包,本质上都在做同一件事:把文件通过TCP从一个进程搬…

📰

AI辅助写专著全流程指南:从大纲设计到修稿校对的五段式实战方法

大家写书,特别是写专著,最大的痛点从来不是“没话说”,而是“东西太多、战线太长、改到崩溃”。我从去年开始用AI辅助写一本专业领域的专著,到今天书稿已经进入终审阶段,整个过程踩过不少坑,也摸索出一套能…

📰

PyTorch ReduceLROnPlateau调度器实战:原理、参数与踩坑指南

前阵子训练一个短文本分类模型,loss在第八个epoch开始变得极其顽固,从2.3降到1.9之后就不再动了。手动把学习率从1e-3改成1e-4,loss又往前走了一截,再隔几个epoch再次卡住。我那时候就在想,能不能让训练过程自己感知到…

📰

信息论与程序员:用Python看懂熵、交叉熵与KL散度

提到信息论,很多程序员第一反应是那些从天而降的数学公式。毕竟这门学科的奠基人写出那篇通信理论论文时,计算机还没走进公司。但今天的压缩算法、搜索引擎排序、深度学习里的交叉熵损失、异常检测,全都在信息论的辐射范围内。作为一个写了十…

📰

为什么快速排序比冒泡排序快100倍?复杂度分析与实测解读

我一直觉得,排序算法是聊程序性能时最生动的教材。“为什么快速排序比冒泡排序快100倍”这个问题,十个人里至少有八个被问到过。刚接触算法的同学最常干的事,就是拿冒泡排序跑几万条数据,跑完直接怀疑人生:明明逻辑简单…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬