CANN pyasc `MatmulApiTiling.set_traverse` 接口详解:固定 M 轴/N 轴优先的 Matmul 计算方向

发布时间:2026/9/19 20:54:36

CANN pyasc `MatmulApiTiling.set_traverse` 接口详解:固定 M 轴/N 轴优先的 Matmul 计算方向 CANN pyascMatmulApiTiling.set_traverse接口详解固定 M 轴/N 轴优先的 Matmul 计算方向【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyascasc.lib.host.MatmulApiTiling.set_traverse是 CANN pyasc 在 Python 侧提供的 Host 端 Matmul Tiling 设置接口用于固定 Matmul 分块计算时大矩阵的输出遍历方向M 轴优先还是 N 轴优先。本文以 关联 API 文档 为主线结合 pybind11 绑定源码 与仓库内 Matmul 示例完整讲解接口签名、参数语义、返回值、底层实现与真实算子中的调用方式帮助读者在编写 Matmul 类算子的 Host 侧 Tiling 时正确控制计算方向。接口背景为什么需要设置 Matmul 计算方向在昇腾 AI 处理器上编写 Matmul 类算子时通常需要两份代码Kernel 侧的矩阵乘计算逻辑以及 Host 侧的 Tiling 逻辑。Tiling 负责根据输入矩阵的形状、数据类型、片上 Buffer 容量等信息计算出 Kernel 执行所需的切分参数如 baseM/baseN/baseK、单核计算范围等。CANN pyasc 在asc.lib.host模块中提供了一组 Matmul Tiling API其定位与 模块总览 中的描述一致用户只需要传入 A/B/C 矩阵的 Position 位置、Format 格式和 DType 数据类型等信息调用 API 接口即可获取 Kernel 侧Init中TCubeTiling结构体中的相关参数。set_traverse正是这组 API 中用于控制矩阵遍历顺序的接口一次迭代计算出[baseM, baseN]大小的 C 矩阵分片后下一次迭代的输出分片是优先沿 M 方向移动还是优先沿 N 方向移动。这一顺序直接影响数据搬运的局部性与多核切分的结果是影响 Matmul 性能的细节参数之一。接口签名与 Ascend C 函数原型对应set_traverse是MatmulApiTiling/MultiCoreMatmulTiling/BatchMatmulTiling的共有接口Python 侧签名如下set_traverse(self: libhost.MatmulApiTilingBase, traverse: libhost.MatrixTraverse) - int它对应的 Ascend C 函数原型为int32_t SetTraverse(MatrixTraverse traverse)从绑定实现看python/asc/lib/host/bindings/MatmulApiTiling.cpp#L1147-L1148 通过 pybind11 将 C 的SetTraverse(traverse)直接暴露为 Python 方法.def( set_traverse, [](MatmulApiTilingBase self, MatrixTraverse traverse) { return self.SetTraverse(traverse); }, traverse_a, ...)这意味着 Python 侧的方法名、参数顺序与 C 侧完全一致返回值也原样透传。参数说明MatrixTraverse 枚举的三种取值参数traverse用于设置固定的 Matmul 计算方向类型为MatrixTraverse。该枚举在 python/asc/lib/host/bindings/Enums.cpp#L89-L92 中注册为 Python 枚举共三个取值枚举值说明MatrixTraverse.NOSET不设置固定遍历方向由 Tiling 函数内部根据形状与 Buffer 情况自行决策是多数接口如MatmulConfigParams构造函数、set_matmul_config_params的默认值MatrixTraverse.FIRSTMM 轴优先C 矩阵分片沿 M 方向优先迭代MatrixTraverse.FIRSTNN 轴优先C 矩阵分片沿 N 方向优先迭代在 Python 代码中通过host.MatrixTraverse.FIRSTM/host.MatrixTraverse.FIRSTN引用。从源码结构看NOSET主要用于表示未显式设置的默认状态而set_traverse文档明确限定可选值为FIRSTM/FIRSTN两者。traverse 的深层语义参考同模块set_matmul_config_params接口对traverse参数的解释见 绑定源码 docstring可以更准确理解该参数的含义traverseMatmul 做矩阵运算的循环迭代顺序即一次迭代计算出[baseM, baseN]大小的 C 矩阵分片后自动偏移到下一次迭代输出的 C 矩阵位置的偏移顺序。也就是说Matmul 计算被拆分为若干个[baseM, baseN]的输出分片set_traverse决定这些分片在 C 矩阵上的游走路径FIRSTM表示沿 M 方向先把当前 N 列走完再切到下一组 NFIRSTN表示沿 N 方向优先。选择与数据排布如 NZ 格式、A/B 矩阵的搬运方式匹配的方向可以减少缓存失效、提升搬运效率。返回值说明与错误处理接口返回int-1设置失败0设置成功。与模块内其他set_*系列接口set_a_type、set_shape、set_buffer_space等的返回值约定完全一致。设置失败时建议检查传入的traverse取值是否合法必须是MatrixTraverse枚举成员以及调用时机是否正确。调用示例完整可运行以下示例完整继承自 API 文档展示了在配置完 A/B/C/Bias 矩阵类型、形状与 Buffer 空间之后如何设置 M 轴优先的遍历方向并获取 Tiling 结果import asc.lib.host as host ascendc_platform host.get_ascendc_platform() tiling host.MatmulApiTiling(ascendc_platform) tiling.set_a_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT16) tiling.set_b_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT16) tiling.set_c_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT) tiling.set_bias_type(host.TPosition.GM, host.CubeFormat.ND, host.DataType.DT_FLOAT) tiling.set_shape(1024, 1024, 1024) tiling.set_org_shape(1024, 1024, 1024) tiling.set_bias(True) tiling.set_traverse(host.MatrixTraverse.FIRSTM) # 固定 M 轴优先 tiling.set_buffer_space(-1, -1, -1) tiling_data host.TCubeTiling() ret tiling.get_tiling(tiling_data) # ret 不为 -1 表示 Tiling 计算成功代码要点说明host.get_ascendc_platform()根据当前运行时 SOC 版本获取平台对象作为MatmulApiTiling构造参数实现见 host/init.pyset_shape/set_org_shape分别设置计算形状与原始完整形状单位为元素个数set_buffer_space(-1, -1, -1)使用默认的片上 Buffer 空间L1/L0C/UB 均取 AI 处理器默认大小get_tiling将计算结果写入TCubeTiling结构体供 Kernel 侧使用若需改为 N 轴优先仅需将set_traverse参数替换为host.MatrixTraverse.FIRSTN其余配置保持不变。仓库内的真实调用案例set_traverse在仓库的 Matmul 系列示例中均有实际使用可作为参照examples/05_matmul_leakyrelu/matmul_leakyrelu.py#L107在生成 Tiling 时调用matmul_tiling.set_traverse(host.MatrixTraverse.FIRSTM)其 README 明确说明该行用于设置遍历方式为先 M 后 Nexamples/09_linear/linear.py#L326线性层GEMM 类算子Tiling 生成中同样使用mm.set_traverse(host.MatrixTraverse.FIRSTM)examples/09_linear/ascendc/linear.asc#L138C 侧对应的 Host Tiling 实现调用mmTiling.SetTraverse(matmul_tiling::MatrixTraverse::FIRSTM);与 Python 侧形成一一对应examples/10_fused_infer_attention/ascendc/fused_infer_attention.asc#L1066 与 L1092融合注意力算子的 QK 与 PV 两次矩阵乘均固定为FIRSTM遍历方向。这些案例表明无论是 Python 侧通过asc.lib.host计算 Tiling还是 C 侧直接调用SetTraverse仓库内的 Matmul 类算子普遍选择FIRSTMM 轴优先作为固定遍历方向。使用约束与建议调用时机set_traverse属于配置类接口与set_shape、set_buffer_space等一样需要在get_tiling之前调用才会生效在get_tiling之后再调用不会影响已生成的 Tiling 结果。与set_matmul_config_params的关系set_matmul_config_params的traverse参数默认值为MatrixTraverse::NOSET见 绑定源码即不强制遍历方向而set_traverse用于显式固定方向。若两种方式同时使用需要保证语义一致避免 Tiling 与 Kernel 侧预期不符。与 Kernel 侧保持一致遍历方向会体现在 Tiling 参数如 C 分片的偏移计算中Kernel 侧按 Tiling 结果执行因此无需额外在 Kernel 中重复设置但若自行编写 Kernel 侧的循环顺序需要与 Tiling 侧的方向匹配。性能调优参考当输出 C 矩阵分片的遍历路径与数据在 L2/UB 中的排布吻合时数据复用率更高。实际算子开发中可通过对比FIRSTM与FIRSTN两档配置下的执行耗时来选择仓库示例的默认选择可作为起点。总结asc.lib.host.MatmulApiTiling.set_traverse是 Host 侧 Matmul Tiling 配置链路上控制计算方向的关键一环它通过MatrixTraverse枚举FIRSTM/FIRSTN固定 M 轴或 N 轴优先的输出分片遍历顺序并以-1/0的返回值告知设置是否成功。该接口由 CSetTraverse经 pybind11 直接绑定而来MatmulApiTiling.cpp#L1146-L1184与set_matmul_config_params中的traverse参数、C 侧SetTraverse调用见 linear.asc#L138共同构成完整的遍历方向控制手段。在编写或调优 Matmul 类算子时将set_traverse与 set_shape、set_org_shape、set_buffer_space 等接口配合使用即可获得完整的、可供 Kernel 直接消费的TCubeTiling参数。【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/19 20:54:36

自动驾驶感知系统在恶劣天气下的鲁棒性设计与多传感器协同

1. 为什么“复杂工况恶劣天气”不是附加题,而是自动驾驶的及格线“复杂工况和恶劣天气,检验自动驾驶能力的‘试金石’”——这句话在行业内部早已不是口号,而是每家车企、每支算法团队每周都要直面的硬核考卷。我参与过三款L2/L3级量产车型的…

2026/9/19 20:54:36

制造业AI质检:技术路径与成本效益分析

1. 项目背景与核心价值最近在帮几家制造企业做数字化转型咨询时,发现一个有趣现象:生产线上越来越多的质检岗位开始被视觉检测系统取代。这让我想起三年前参与的第一个AI落地项目——当时我们用目标检测算法替代了电子厂的外观检验员,如今这套…

2026/9/20 6:05:03

Node.js安装后npm命令无效?深度解析PATH环境变量配置原理

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 6:05:03

Mac Mouse Fix 使用指南:让 10 美元鼠标比苹果触控板更顺手

Mac Mouse Fix 使用指南:让 10 美元鼠标比苹果触控板更顺手 【免费下载链接】mac-mouse-fix Mac Mouse Fix - Make Your $10 Mouse Better Than an Apple Trackpad! 项目地址: https://gitcode.com/GitHub_Trending/ma/mac-mouse-fix 如果你用普通鼠标操作 M…

2026/9/20 6:05:03

用Obsidian和Claude Code搭建内容工厂:从素材管理到AI写作全流程

我大概有三年时间一直处在一种“素材很多,稿子很赶”的状态里。浏览器收藏夹存了几百个链接,微信收藏里堆着各种截图,本地文件夹里的半成品文档更是数不清。等到真要动笔的时候,光是把这些散落的东西找齐,就能耗掉半天…

2026/9/20 6:05:03

DDU显卡驱动清理原理与跨平台实战指南

1. 为什么你每次重装显卡驱动都像在拆炸弹?——DDU不是“一键卸载”,而是显卡驱动手术刀显卡驱动彻底清理、Display Driver Uninstaller、DDU——这三个词,几乎贯穿了所有Windows图形故障排查的起点。但凡遇到黑屏、花屏、蓝屏0x116、游戏闪退…

2026/9/20 6:00:03

Linux驱动自动加载:从设备树匹配到modprobe的完整机制

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码