深入解析 CANN pyasc `MatmulApiTiling.set_split_range`:baseM/baseN/baseK 切分范围约束与 C0_size 对齐机制

发布时间:2026/11/9 3:31:06

深入解析 CANN pyasc `MatmulApiTiling.set_split_range`:baseM/baseN/baseK 切分范围约束与 C0_size 对齐机制 深入解析 CANN pyascMatmulApiTiling.set_split_rangebaseM/baseN/baseK 切分范围约束与 C0_size 对齐机制【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc本指南围绕 CANN pyasc 开源仓库中asc.lib.host.MatmulApiTiling.set_split_range这一 Host 侧 Matmul Tiling API 展开讲解其函数签名、六个切分范围参数的语义与默认值、返回值约定以及计算 Tiling 时的 C0_size 对齐约束。读完本文你将理解 baseM/baseN/baseK 在 Matmul Tiling 中的角色掌握该接口与set_fix_split、MultiCoreMatmulTiling.set_single_range等切分控制接口的差异并能在实际算子开发中正确使用该接口或明确判断其适用性。接口定位Host 侧 Matmul Tiling 参数计算链路中的一环set_split_range是asc.lib.host模块中 MatmulApiTiling 系列接口之一。该系列接口用于在 Host 侧获取 Matmul kernel 计算所需的 Tiling 参数用户只需要传入 A/B/C 矩阵的 Position 位置、Format 格式和 DType 数据类型等信息调用 API 接口即可获取 Init 中TCubeTiling结构体中的相关参数。在 pyasc 中MatmulApiTiling、MultiCoreMatmulTiling、BatchMatmulTiling三个类共享一组共有接口set_split_range即其中之一见 host.md 中的接口列表。它对应 Ascend C 原生的SetSplitRange接口用于设置 Tiling 计算过程中 baseM/baseN/baseK 的最大值和最小值从而把 Tiling 函数自动计算出的 base 尺寸约束在指定区间内。在 pyasc 的 Python 侧接口先由类型桩声明再通过 pybind11 绑定到 C 实现类型桩声明位于 wrappers.py签名与文档一致六个参数均有默认值C 绑定位于 bindings/MatmulApiTiling.cpp通过py::class_MatmulApiTiling, MatmulApiTilingBase上的.def(set_split_range, ...)注册实际调用MatmulApiTilingBase::SetSplitRange。从绑定代码可以看到六个参数的默认值max_base_m_a -1等在 pybind11 层以关键字参数默认值的形式提供与 Python 侧类型桩保持一致这也意味着调用时可以只传需要约束的维度其余维度保持不设置。函数签名与参数语义函数原型MatmulApiTiling.set_split_range( self: libhost.MatmulApiTilingBase, max_base_m: SupportsInt -1, max_base_n: SupportsInt -1, max_base_k: SupportsInt -1, min_base_m: SupportsInt -1, min_base_n: SupportsInt -1, min_base_k: SupportsInt -1, ) - int对应的 Ascend C 函数原型为int32_t SetSplitRange(int32_t maxBaseM -1, int32_t maxBaseN -1, int32_t maxBaseK -1, int32_t minBaseM -1, int32_t minBaseN -1, int32_t minBaseK -1)参数类型为SupportsInt即任何支持整数转换的 Python 对象均可传入在 C 绑定层统一转换为int32_t后传给SetSplitRange。六个参数的含义参数含义默认值默认值语义max_base_m设置最大的 baseM 值-1不设置 baseM 最大值由 Tiling 函数自行计算max_base_n设置最大的 baseN 值-1不设置 baseN 最大值由 Tiling 函数自行计算max_base_k设置最大的 baseK 值-1不设置 baseK 最大值由 Tiling 函数自行计算min_base_m设置最小的 baseM 值-1不设置 baseM 最小值由 Tiling 函数自行计算min_base_n设置最小的 baseN 值-1不设置 baseN 最小值由 Tiling 函数自行计算min_base_k设置最小的 baseK 值-1不设置 baseK 最小值由 Tiling 函数自行计算其中baseM/baseN/baseK 是 Matmul Tiling 的核心概念baseM、baseN 表示每个计算分块Tile在 M、N 方向上的尺寸baseK 表示 K 方向上一次累加的分块尺寸。base 尺寸直接决定 L0/L1 Buffer 的占用和循环次数是 Tiling 函数内部自动计算的核心输出之一可通过 get_base_m、get_base_n、get_base_k 三个接口在get_tiling完成后读取。返回值说明-1设置失败0设置成功。重要约束当前版本 Tiling 暂不支持该功能文档与绑定代码中的描述均明确标注目前 Tiling 暂时不支持该功能。也就是说在 pyasc 当前仓库对应的 Tiling 实现中调用该接口会被接受绑定层会正常调用SetSplitRange但 Tiling 计算并不会真正使用这一范围约束。这一点务必在阅读和选型时注意避免误以为设置了set_split_range就能约束 base 尺寸。如果你的目标是固定 base 尺寸应改用 set_fix_split固定 baseM/baseN/baseK 的具体值如果是多核场景约束单核切分尺寸应使用 MultiCoreMatmulTiling.set_single_range。C0_size 对齐约束设置值不满足对齐时由 Tiling 自动对齐set_split_range的约束说明揭示了 Tiling 内部对 base 尺寸的对齐规则若 base_m/base_n/base_k 不满足 C0_size 对齐计算 Tiling 时会将该值对齐到 C0_size。C0_size 是昇腾 Cube 单元计算的基本对齐粒度其取值与数据类型相关数据类型C0_sizehalf / bfloat16_t16float8int8_t32int4b_t64这一对齐规则与同族接口 set_fix_split 的约束相互印证后者明确要求 base_m 需要小于等于 single_m 按 16 个元素向上对齐后的值如ceil(single_m/16)*16base_n 需要小于等于 single_n 以 C0_size 个元素向上对齐的值且 base 尺寸还需满足分形对齐要求否则获取 Tiling 将失败。可以推断set_split_range中设置的最小值/最大值在实际参与 Tiling 计算时同样会先被对齐到 C0_size 的整数倍因此传入非对齐的值不会直接报错但最终生效的 base 尺寸可能是对齐后的值。从实现结构上看这一约束语义体现在 bindings/MatmulApiTiling.cpp 的接口文档中对齐逻辑则位于底层的 Tiling 库实现pyasc 通过 loader.py 加载的 Host 侧动态库这也是为什么文档建议以 C0_size 对齐的整数倍传入以避免因对齐导致的尺寸意外放大。调用示例与典型使用模式基本调用模式set_split_range通常与其他设置接口配合使用完整调用序列如下参数仅为演示import asc.lib.host as host ascendc_platform host.get_ascendc_platform() tiling host.MatmulApiTiling(ascendc_platform) # 设置 A/B/C/Bias 的 Position、Format、DataType 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) # 设置形状与 buffer 空间 tiling.set_shape(1024, 1024, 1024) tiling.set_org_shape(1024, 1024, 1024) tiling.set_bias(True) # 设置 baseM/baseN/baseK 的最大值与最小值 ret tiling.set_split_range(max_base_m256, max_base_n256, max_base_k-1, min_base_m16, min_base_n16, min_base_k-1) assert ret 0, set_split_range failed tiling.set_buffer_space(-1, -1, -1) # 计算 Tiling 并读取结果 tiling_data host.TCubeTiling() ret tiling.get_tiling(tiling_data) base_m tiling.get_base_m() base_n tiling.get_base_n() base_k tiling.get_base_k()需要特别说明由于当前 Tiling 版本暂不支持该功能上面的set_split_range调用不会真正影响get_tiling的结果。若确实需要约束 base 尺寸请参考下一节的替代方案。与相近接口的对比与选型接口作用适用场景当前可用性set_split_range设置 baseM/baseN/baseK 的最大值与最小值希望把自动计算的 base 尺寸约束在区间内当前 Tiling 暂不支持set_fix_split固定 baseM/baseN/baseK 的具体值固定切分尺寸如set_fix_split(16, 16, -1)可用MultiCoreMatmulTiling.set_single_range设置 single_core_m/n/k 的最大值与最小值多核切分时约束单核计算尺寸可用MultiCoreMatmulTiling.set_align_split设置单核切分尺寸的对齐值多核切分时控制对齐粒度可用其中set_fix_split与set_split_range的语义最接近都作用于 base 尺寸但前者是固定值、后者是区间约束set_single_range则作用于多核场景的单核尺寸与 base 尺寸是不同的粒度层级。选型建议单核 Tiling 需要固定 base 尺寸 →set_fix_split多核 Tiling 需要约束单核尺寸 →MultiCoreMatmulTiling.set_single_range需要 base 尺寸区间约束 → 关注set_split_range但需确认所用 Tiling 版本已支持该能力。源码实现佐证从 Python 类型桩到 C 绑定的完整链路set_split_range的完整调用链路在 pyasc 仓库中可逐层追溯Python 类型桩wrappers.py 中MatmulApiTilingBase.set_split_range声明六个int参数并返回int供静态类型检查与 IDE 提示使用pybind11 绑定bindings/MatmulApiTiling.cpp 中通过py::class_MatmulApiTiling, MatmulApiTilingBase注册该方法lambda 将六个 Python 参数转为int32_t后调用self.SetSplitRange(...)关键字默认值-1在此层声明C 原生接口MatmulApiTilingBase::SetSplitRange即 Ascend C 的SetSplitRange对应文档中给出的 C 原型枚举与平台对象示例中的TPosition、CubeFormat、DataType、MatrixTraverse等均在 wrappers.py 中以ProxyBase子类形式暴露如CubeFormat的ND/NZ/NN等成员运行时通过Loader.get_attr代理到 C 对象。由于 wrappers.py 中的ProxyMeta元类会在__call__和__getattribute__中把 Python 侧的类访问转发到由Loader加载的 C 类因此类型桩中的...仅是静态占位真正的行为由 bindings/MatmulApiTiling.cpp 中 pybind11 定义的 C 实现决定——set_split_range也不例外。总结set_split_range用于设置 baseM/baseN/baseK 的最大值与最小值六个参数均有-1默认值-1表示不设置、由 Tiling 函数自行计算返回值0表示设置成功-1表示设置失败传入的 base 尺寸若不满足 C0_size 对齐Tiling 计算时会自动对齐到 C0_sizehalf/bfloat16_t 为 16float 为 8int8_t 为 32int4b_t 为 64当前 Tiling 版本暂不支持该功能实际约束 base 尺寸请优先使用set_fix_split单核固定 base或MultiCoreMatmulTiling.set_single_range多核单核尺寸范围接口完整链路为Python 类型桩wrappers.py→ pybind11 绑定bindings/MatmulApiTiling.cpp→ Ascend CSetSplitRange原生实现可通过上述路径在仓库中继续深入。【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/7 11:04:03

从航新科技净利预增超50%看MRO资产质量改善信号

每年年报季,除了看营收和利润,我最在意的是上市公司在业绩预增公告里有没有那句“资产质量明显改善”。航新科技这次的公告正好把这两件事都占了:2025年净利润预计增长超50%,同时对外释放了资产质量改善的信号。这个组合在航空产业…

2026/11/8 18:05:29

不同类型老板应对攻略:从职场沟通到向上管理

项目标题: 小邦教你如何应对不同类型老板 项目正文: 围绕职场中老板的主要类型(如控制型、放任型、情绪型、专业型、老好人型等),小邦分享如何识别、适应、沟通、向上管理,以及自我保护与职业发展的实用方法,内容包括行…

2026/11/9 3:28:30

怎么升级中级电工证良心建议来了 真实操作全在这

怎么升级中级电工证良心建议来了 真实操作全在这 证书过期了不知道怎么复审延期?很多人在工作中遇到这种情况,尤其是从事电工作业的人员,中级电工证一旦过期,就可能面临停岗、不能上岗作业、甚至影响职业发展。这正是为什么我今天要拿出【良心建议】,和…

2026/11/9 3:28:30

电工证可否异地复审怎么报名

电工证可否异地复审怎么报名 怕考不过白交培训费,你不是一个人。现在越来越多的电工想考个证,但一听说要报名、培训、考试,心里就打鼓,怕花了钱最后白忙一场。特别是电工证这类特种作业证,如果没弄清楚怎么报名、怎么复审,就很容易走弯路。今天咱们就聊…

2026/11/9 3:28:30

特种作业人员有钢筋工怎么考?考前押题帮你搞定证书复审

特种作业人员有钢筋工怎么考?考前押题帮你搞定证书复审 证书过期了不知道怎么复审延期?最近有不少人私信我,说自己的特种作业操作证快到期了,但又不知道怎么操作,甚至不知道自己是不是符合复审条件。尤其是像钢筋工这种岗位,虽然在建筑施工中很常见,但…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/7 14:54:47

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

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

2026/11/7 14:50:12

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
免费获取方案
☎咨询二维码 ☎ ↑