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

发布时间:2026/11/5 18:27:25

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/11/5 18:27:24

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

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

2026/11/5 18:27:25

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

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

2026/11/5 16:51:33

EasyU优启通PE维护盘实战指南:制作、启动与核心操作全解析

1. 为什么一个PE维护盘值得单独拿出来聊装系统、修引导、救数据、清病毒,这些活儿但凡干过几次的人都知道,真正决定效率的往往不是你手速多快,而是手边那套PE环境靠不靠谱。EasyU(圈内习惯叫优启通)就是在这个场景下被…

2026/11/5 16:26:13

Rust原来很简单二:所有权系统

Part 2 核心篇 —— 所有权系统 本篇覆盖 第 6 ~ 10 章:所有权、借用与引用、生命周期、字符串与切片、内存模型。 ⚠️ 这是全书最重要的一篇。 把它吃透,Rust 从此“很简单”;跳过它,你会处处碰壁。请慢下来,动手敲每一段代码。 第 6 章 所有权:Rust 的第一性原理 6…

2026/11/5 15:00:49

基于Hadoop+Spark的民宿智能推荐系统设计与实现

1. 项目概述:大数据时代的民宿智能推荐这个毕业设计项目融合了当前大数据领域最主流的技术栈,构建了一个完整的民宿推荐系统解决方案。作为一名长期从事大数据系统开发的工程师,我认为这个选题非常贴合实际应用场景——随着旅游业的复苏和共享…

2026/11/5 14:10:30

ADS122U04IPWR+STM32F427ZI工业级温度测量信号链设计

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

2026/11/5 14:10:30

UART接口24位ADC搭配RS485,解决远距离温度监控难题

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

2026/11/5 14:10:30

UART接口24位ADC搭配PIC18F46K22的RTD与热电偶测温实践

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

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

2026/11/5 0:02:07

多智能体协作系统架构设计与实践优化

1. 多智能体协作系统的时代背景2017年Transformer架构的诞生彻底改变了人工智能的发展轨迹。当行业还沉浸在单一大模型带来的性能突破时,Anthropic的研究团队已经将目光投向了更前沿的领域——如何让多个智能体通过协作产生超越单体能力的系统智能。这就像交响乐团中…

2026/11/5 0:02:07

大模型系统性入门实战指南:从原理到部署微调的全链路路线

提到大模型的系统性入门,我先说个结论:这事真不难,难的是资料太散、路线太多,今天这个框架明天那个工具,新人很容易在“收藏夹吃灰”和“教程看到一半放弃”之间反复横跳。市面上关于大模型的内容少说有几十万篇&#…

2026/11/5 0:02:07

鸿蒙文件系统沙箱机制解析与开发实践

1. 鸿蒙文件系统沙箱机制深度解析作为一名从Android转向鸿蒙开发的工程师,我深刻体会到文件系统访问是迁移过程中最先遇到的"拦路虎"。在Android上运行良好的文件读写代码,在鸿蒙真机环境却频频出现文件写入后神秘消失或直接抛出权限拒绝错误的…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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