人工智能编译器模型编译高性能计算深度学习CANN【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址https://gitcode.com/cann/pypto点击查看免费下载导读在 CANN PyPTO 的混合算子Cube Vector 融合开发中pypto_pro.language.get_subblock_num()用于获取当前逻辑 Block 关联的从核subblock总数即 AscendC 中的 task ration。它是在 AIV 核上区分逻辑 Block 编号与物理 AI Core 编号、实现 Cube/Vector 两侧统一数据切分的关键系统变量。读完本文你将掌握该 API 的产品支持范围、返回值语义AIC 与 AIV 的不同表现、典型调用方式以及其从 IR 注册到 CCE 代码生成的完整底层链路。一、产品支持情况get_subblock_num()的系统变量能力与硬件平台强相关当前仓库文档明确的支持矩阵如下产品形态支持情况Ascend 950PR / Ascend 950DT支持Atlas A3 训练系列产品 / Atlas A3 推理系列产品不支持Atlas A2 训练系列产品 / Atlas A2 推理系列产品不支持也就是说目前仅 Ascend 950 系列产品提供 subblock 机制在 Atlas A2/A3 产品上使用该 API 将不受支持。撰写或移植 Kernel 时请务必按目标平台核对此支持矩阵详见 get_subblock_num.md 与同目录下的 index.md。二、功能说明与函数原型get_subblock_num()获取当前 Block 的 subblock 总数即一个 Block 关联的从核数量在 AscendC 语义中等价于 task ration。在混合算子中一个逻辑 Block 可以由一个 AICCube 核与多个 AIVVector 从核组成subblock 就是这些从核的编号维度。函数原型pypto_pro.language.get_subblock_num() - int该 API 定义在 PyPTO 语言前端 python/pypto_pro/language/_api.py 中其 docstring 直接说明了语义Get the sub-block count per AI Core (task ration). Returns 1 on AIC binaries, get_subblockdim() on AIV binaries. Matches AscendC GetTaskRation().即AIC 二进制中恒返回 1AIV 二进制中返回get_subblockdim()与 AscendC 的GetTaskRation()语义一致。参数与约束说明参数无。该 API 不接受任何参数。约束无。可在 Kernel 内的整数计算、数据索引中直接使用。IR 层的类型推导也印证了这一点在 framework/src/interface/ir/op/block_ops/memory.cpp 中DeduceBlockGetBlockIdxType会显式校验args.size() 0不接受任何参数并返回ScalarType(DataType::INT64)get_subblock_num与get_subblock_idx、get_block_idx、get_block_num一起注册为无参 IR 算子见 memory.cpp。三、返回值说明按核类型与编译模式区分返回值类型为DT_INT64具体数值与核类型及编译模式有关AIC 核Cube 侧始终返回 1。AIC 本身即 Block没有 AIC 从核因此不存在 subblock 划分。AIV 核Vector 侧融合算子mixAIC:AIV 1:2返回 2即每个 AI Core 内含 2 个 AIV 从核subblock 编号为 0 和 1。纯 Vector 算子aiv-only返回 1此时 AIV 即为 Block同样没有 subblock 划分。这一行为在 CCE 后端代码生成中可直接看到。在 framework/src/interface/pypto_pro/backend/backend_cce_ops.cpp 中get_subblock_num的代码生成逻辑为// Matches AscendC GetTaskRation(): AIC returns 1, AIV returns get_subblockdim(). auto cg dynamic_castcodegen::CCECodegen(codegen_base); const auto target cg.GetTarget(); if (target ir::SectionKind::Vector) { return std::string((int64_t)(get_subblockdim())); } return std::string((int64_t)(1));即代码生成器根据当前代码段的目标类型SectionKind::Vector与否决定下发get_subblockdim()还是常量 1——这正是返回值与核类型及编译模式有关的底层来源。与 get_subblock_idx() 的配合get_subblock_num()通常与get_subblock_idx()获取当前逻辑 AI Core 内 AIC 或 AIV 的 subblock 索引取值范围为[0, get_subblock_num())配合使用。在 1:2 的混合 Kernel 中同一逻辑 Block 对应的两个 AIV 分别返回 0 和 1。后端实现中REGISTER_BACKEND_OP(BackendCCE, get_subblock_idx) ... return std::string((int64_t)(get_subblockid()));参见 backend_cce_ops.cpp。更完整的条件执行示例可参考姊妹文档 get_subblock_idx.md。四、调用示例混合算子中还原物理 AI Core 编号在融合算子中get_block_idx()在 AIV 核上返回的是逻辑编号block_idx * subblock_num subblock_idx通过除以get_subblock_num()可还原物理 AI Core 编号从而让 cube 与 vector 两侧使用统一的core_id切分数据import pypto_pro.language as pl NUM_CORES 2 pl.jit(auto_mutexTrue) def matmul_example( a: pl.Tensor[[pl.DYNAMIC, pl.DYNAMIC], pl.DT_FP16], b: pl.Tensor[[pl.DYNAMIC, pl.DYNAMIC], pl.DT_FP16], out: pl.Tensor[[pl.DYNAMIC, pl.DYNAMIC], pl.DT_FP16], ): num_cores pl.get_block_num() # AIC/AIV两侧得到相同的物理核号详见下方NOTE core_id pl.get_block_idx() // pl.get_subblock_num() with pl.section_cube(): for i in pl.range(core_id, a.shape[0] // 128, num_cores): ... # Cube侧按行块i执行load/matmul/store with pl.section_vector(): for i in pl.range(core_id, a.shape[0] // 128, num_cores): ... # Vector侧用同一core_id切分与Cube侧对齐 matmul_exampleNone, NUM_CORES[!NOTE]说明 该除法在 AIC 核上为block_idx // 1在 AIV 核上为(block_idx * 2 subblock_idx) // 2两者均得到相同的 AI Core 编号因此 cube 与 vector 可共享同一core_id做数据切分。这一示例的底层依据在get_block_idx的后端实现中清晰可见。在 backend_cce_ops.cpp 中// Helper function for get_block_idx (returns value expression). // Matches AscendC GetBlockIdx(): AIV returns global AIV index, AIC returns AIC index. static std::string MakeBlockGetBlockIdxCodegenCCE(const ir::CallPtr op, codegen::CodegenBase codegen_base) { ... if (target ir::SectionKind::Vector) { return (int64_t)(get_block_idx() * get_subblockdim() get_subblockid()); } return (int64_t)(get_block_idx()); }AIV 侧返回的是get_block_idx() * get_subblockdim() get_subblockid()全局 AIV 逻辑索引AIC 侧返回的是get_block_idx()AIC 索引。因此AIV 核logical_idx // subblock_num (block_idx * 2 subblock_idx) // 2 block_idx物理 AI Core 编号AIC 核block_idx // 1 block_idx。两式结果一致core_id即可作为 Cube/Vector 两侧统一的数据切分依据。get_block_num()则提供经过流上 core 限制后实际生效的 worker block 数应以其作为切分步长避免限制核数后留下未处理的 tile其语义见 python/pypto_pro/language/_api.py 的 docstring。五、从 Python API 到 CCE 代码生成的完整链路get_subblock_num()的调用并不只是 Python 层的一个普通函数而是被注册为系统级 IR 算子经过前端解析、IR 类型推导、后端代码生成三步完成下发Python 前端声明在 python/pypto_pro/language/_api.py 中以_api_decl声明并在语言入口 python/pypto_pro/language/init.py 中导出为pl.get_subblock_numIR 算子注册与类型推导在 python/pypto_pro/ir/op/system_ops.py 中注册为OpSpec(ir_nameget_subblock_num, parse_argsFalse, parse_kwargsFalse)IR 层由DeduceBlockGetBlockIdxType校验无参并推导返回INT64标量类型memory.cppCCE 后端代码生成在 backend_cce_ops.cpp 中按代码段类型Vector 段下发get_subblockdim()其他段下发常量 1生成 CCE 代码与 AscendC 的GetTaskRation()语义对齐。此外subblock 维度还参与了 Kernel 级 block 寻址。在 backend_cce_ops.cpp 中sub-block 寻址按[block_num, block_num block_num * subblockdim)最多[N, 3N)的区间扩展逻辑 block 索引注释明确说明Sub-block addressing follows the established get_block_idx() backend-op即get_subblock_num()返回的 subblock 总数直接决定了逻辑 Block 展开为物理 worker 的数量关系。六、易混淆点与使用建议不要用 AIC 侧语义推断 AIV 侧AIC 恒返回 1、AIV 在 mix 模式下返回 2两者不可混用切分数据时应以get_block_idx() // get_subblock_num()得到物理核号而不是直接使用get_block_idx()。与get_block_num()配合使用get_block_num()是经过 core 限制后的实际 block 数用它作为循环步长可保证限核后所有 tile 仍被处理get_subblock_num()用于在逻辑与物理编号之间换算。平台兼容性该能力仅 Ascend 950PR/Ascend 950DT 支持Atlas A2/A3 系列不支持跨平台移植时需要提供等价替代方案。返回值类型始终为DT_INT64标量可直接参与 Kernel 内整数运算与数据索引无需额外转换。七、相关文档与源码索引API 参考get_subblock_num.md、get_subblock_idx.md、get_block_idx.md、get_block_num.md、index.mdPython 前端声明python/pypto_pro/language/_api.pyIR 算子注册python/pypto_pro/ir/op/system_ops.pyIR 类型推导framework/src/interface/ir/op/block_ops/memory.cppCCE 后端代码生成framework/src/interface/pypto_pro/backend/backend_cce_ops.cpp赞分享人工智能编译器模型编译高性能计算深度学习CANN【免费下载链接】pyptoPyPTO发音: pai p-t-oParallel Tensor/Tile Operation编程范式。项目地址https://gitcode.com/cann/pypto点击查看免费下载相关推荐CANN PyPTO Tensor.id 详解获取张量唯一标识的接口与底层实现原理CANN PyPTO Tensor.id 详解获取张量唯一标识的接口与底层实现原理 导读 pypto.Tensor.id 是 CANN PyPTO 框架中用于人工智能编译器模型编译高性能计算深度学习CANNCANN pyasc 教程GlobalTensor.get_phy_addr 获取全局地址的用法与底层原理CANN pyasc 教程GlobalTensor.get_phy_addr 获取全局地址的用法与底层原理 导读 本文聚焦 CANN pyasc 中 asc.编译器编程语言人工智能CANNCANN PyPTO 张量下三角提取pypto.Tensor.tril 接口原理、用法与实战CANN PyPTO 张量下三角提取pypto.Tensor.tril 接口原理、用法与实战 导读 pypto.Tensor.tril 是 CANN PyPT人工智能编译器模型编译高性能计算深度学习CANN上一篇Opsweekly快速入门10分钟搭建你的值班报告系统下一篇TradingAgents-CN多智能体交易框架部署实战从快速上手到生产级优化的完整指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
Podman Pod Exists 命令详解:检查 Pod 是否存在的底层实现与退出码语义 容器运行时云原生CLI 【免费下载链接】podman Podman: A tool for managing OCI containers and pods. 项目地址: https://gitcode.com/gh_mirrors/po/podman 点击查看 免费下载 导读
podman pod exists 是 Podman 中用于快速判断某个 Pod 是否存在于本地存储&… · 2026/9/20 21:44:33
React Grab 源码定位机制全解析:从浏览器选区到 AI 代理编辑的完整链路 React Grab 源码定位机制全解析:从浏览器选区到 AI 代理编辑的完整链路 【免费下载链接】react-grab Copy any UI element for your agent 项目地址: https://gitcode.com/GitHub_Trending/re/react-grab
React Grab 是一款前端开发辅助工具,将浏… · 2026/9/20 21:44:33
TabPFN 完整指南:如何在小样本表格数据上做到秒级分类与回归预测 TabPFN 完整指南:如何在小样本表格数据上做到秒级分类与回归预测 【免费下载链接】TabPFN ⚡ TabPFN: Foundation Model for Tabular Data ⚡ 项目地址: https://gitcode.com/GitHub_Trending/ta/TabPFN
TabPFN 是 Prior Labs 推出的表格数据基础模型&#x… · 2026/9/20 21:44:33
手机网站知识:从零搭建避坑指南,3步搞定备案与响应式 手机网站知识:从零搭建避坑指南,3步搞定备案与响应式 备案流程一头雾水?别慌,很多站长在 从零搭建 手机网站时,卡壳最严重的往往不是代码,而是那些看不见的行政流程。… · 2026/9/21 3:50:52
如何给SumatraPDF贡献代码?从构建、调试到提交PR的完整开发者指南 如何给SumatraPDF贡献代码?从构建、调试到提交PR的完整开发者指南 【免费下载链接】sumatrapdf SumatraPDF reader 项目地址: https://gitcode.com/gh_mirrors/su/sumatrapdf
SumatraPDF 是一款免费的开源多格式文档阅读器(支持 PDF、EPUB、MOBI、… · 2026/9/21 3:44:02
Readest OPDS 分组轮播实现解析:基于 react-virtuoso 的虚拟化横向卡片滑轨与懒加载封面 桌面应用跨平台前端 【免费下载链接】readest Readest is a modern, feature-rich ebook reader designed for avid readers offering seamless cross-platform access, powerful tools, and an intuitive interface to elevate your reading experience. 项目地址:… · 2026/9/21 3:43:02
Toonflow是什么?AI短剧工厂完整指南:2小时把小说变成成片,创作效率提升10倍 Toonflow是什么?AI短剧工厂完整指南:2小时把小说变成成片,创作效率提升10倍 【免费下载链接】Toonflow-app Toonflow 是一款 AI 短剧漫剧工具,能够利用 AI 技术将小说自动转化为剧本,并结合 AI 生成的图片和视频&#… · 2026/9/21 3:42:02
Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化 直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡… · 2026/9/21 0:02:39
Word表格编号全攻略:从列表编号到题注交叉引用 写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技… · 2026/9/21 0:02:39
从第一个站到第二个站:独立开发者的静态网站选型与落地实践 1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&… · 2026/9/20 0:00:41
agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and … · 2026/9/21 0:00:18
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,… · 2026/9/21 0:00:18