CANN pyasc 算子编程接口详解:asc.language.basic.sub 按元素求差全指南
CANN pyasc 算子编程接口详解asc.language.basic.sub 按元素求差全指南【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyascasc.language.basic.sub是 CANN pyasc 为 Python 开发者提供的矢量向量减法接口与 Ascend C 中的Sub一一对应用于在昇腾 AI 处理器的 Vector 核上按元素计算dst src0 - src1。本文以该接口的官方 API 文档为骨架结合 vec_binary.py 等仓库源码与单测用例系统讲解三种重载签名的使用方式、参数语义、底层 IR 分发机制与约束条件帮助读者在算子内核Kernel中正确、高效地完成向量减法运算。接口概述一次调用三种形态sub接口将 Ascend C 的Sub指令封装为符合 Python 原生语法的函数核心能力是按元素求差dst[i] src0[i] - src1[i]。它在源码 vec_binary.py 中通过overload声明了三种重载形态分别覆盖整段连续计算与高维切分计算两类场景# 形态一tensor 前 n 个数据计算 asc.language.basic.sub(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, count: int, is_set_mask: bool True) - None # 形态二tensor 高维切分计算mask 连续模式 asc.language.basic.sub(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, mask: int, repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool True) - None # 形态三tensor 高维切分计算mask 逐 bit 模式 asc.language.basic.sub(dst: LocalTensor, src0: LocalTensor, src1: LocalTensor, mask: List[int], repeat_times: int, repeat_params: BinaryRepeatParams, is_set_mask: bool True) - None三种形态的运行期实现统一收敛到op_impl(sub, ...)见 utils.pyPython 层会根据实参形态自动完成分派无需开发者手动判断。对应的 Ascend C 函数原型sub接口与昇腾原生算子开发接口中的Sub模板函数一一对应其 C 原型如下template typename T __aicore__ inline void Sub(const LocalTensorT dst, const LocalTensorT src0, const LocalTensorT src1, const int32_t count);template typename T, bool isSetMask true __aicore__ inline void Sub(const LocalTensorT dst, const LocalTensorT src0, const LocalTensorT src1, uint64_t mask[], const uint8_t repeatTimes, const BinaryRepeatParams repeatParams);template typename T, bool isSetMask true __aicore__ inline void Sub(const LocalTensorT dst, const LocalTensorT src0, const LocalTensorT src1, uint64_t mask, const uint8_t repeatTimes, const BinaryRepeatParams repeatParams);其中第一个原型对应 Python 的count形态第二个对应mask: List[int]逐 bit 模式第三个对应mask: int连续模式。这组 C 原型同样由 set_binary_docstring 统一生成与add、mul、max、min等二元矢量运算接口保持一致。参数说明参数类型语义dstLocalTensor目的操作数保存减法结果。支持的 TPosition 为VECIN/VECCALC/VECOUTsrc0, src1LocalTensor源操作数。支持的 TPosition 为VECIN/VECCALC/VECOUTcountint参与计算的元素个数形态一maskint/List[int]控制每次迭代内参与计算的元素。int为连续模式List[int]为逐 bit 模式形态二、三repeat_timesint重复迭代次数形态二、三repeat_paramsBinaryRepeatParams控制操作数地址步长的参数形态二、三is_set_maskbool是否在接口内部设置 mask默认True关于 LocalTensordst、src0、src1均为 LocalTensor 类型即算子内核中位于本地内存UB的矢量张量。三种 TPosition 的含义为VECIN表示矢量输入、VECCALC表示矢量计算中间缓冲、VECOUT表示矢量输出。关于 BinaryRepeatParams地址步长控制BinaryRepeatParams是形态二、三中控制地址步长的核心结构体其定义位于 types.py。构造签名为asc.BinaryRepeatParams(dst_blk_stride1, src0_blk_stride1, src1_blk_stride1, dst_rep_stride8, src0_rep_stride8, src1_rep_stride8)六个字段的职责可归纳为两组blk_stride块内步长dst_blk_stride、src0_blk_stride、src1_blk_stride控制单次迭代内相邻数据块DataBlock之间的地址步长。设为 1 表示迭代内数据连续读取/写入。rep_stride迭代间步长dst_rep_stride、src0_rep_stride、src1_rep_stride控制相邻两次迭代之间的地址步长。默认值 8 恰好对应 fp16 场景下一次迭代 256 字节的数据跨度128 个 fp16 元素 × 2 字节 256 字节 8 个 32 字节 DataBlock。从源码看BinaryRepeatParams最终通过builder.create_asc_ConstructOp构造为 IR 值字段统一以uint8类型编码见 types.py。正是因为该结构承载了地址编排信息高维、非连续张量才能通过迭代 步长的方式分片参与运算。约束说明地址对齐约束操作数地址对齐要求遵循昇腾社区《Ascend C 算子开发接口》中通用说明和约束-通用地址对齐约束的规定涉及矢量指令对起始地址的字节对齐要求。地址重叠约束操作数地址重叠约束同样参考《Ascend C 算子开发接口》中通用说明和约束-通用地址重叠约束章节使用时应避免dst与src0/src1出现非法的读写重叠。符号重载运算量使用整个 tensor 参与计算的接口对应count形态时运算量为目的LocalTensor的总长度。数据类型一致性来自源码校验见 utils.pysub的源操作数与目的操作数支持float16、float32、int16、int32四种数据类型src0与src1必须同类型且dst与二者类型必须一致否则抛出TypeError。调用前请确保三个 tensor 使用同一 dtype。调用示例以下示例均可在内核函数中直接使用asc为import asc或import asc.language as asc后的命名空间。1. tensor 前 n 个数据计算count 形态# 一次性对 dst 的前 512 个元素执行 src0 - src1 asc.sub(dst, src0, src1, count512)这是最简洁的形态适合连续内存块的整体运算运算量为count指定的元素个数。2. tensor 高维切分计算- mask 连续模式mask 128 # repeat_times 4一次迭代计算128个数共计算512个数 # dst_blk_stride, src0_blk_stride, src1_blk_stride 1单次迭代内数据连续读取和写入 # dst_rep_stride, src0_rep_stride, src1_rep_stride 8相邻迭代间数据连续读取和写入 params asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.sub(dst, src0, src1, maskmask, repeat_times4, repeat_paramsparams)连续模式下mask为整数表示每次迭代从起始位置连续参与计算的元素个数。示例中一次迭代处理 128 个元素重复 4 次共计算 512 个数。3. tensor 高维切分计算- mask 逐 bit 模式mask [uint64_max, uint64_max] # repeat_times 4一次迭代计算128个数共计算512个数 # dst_blk_stride, src0_blk_stride, src1_blk_stride 1单次迭代内数据连续读取和写入 # dst_rep_stride, src0_rep_stride, src1_rep_stride 8相邻迭代间数据连续读取和写入 params asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.sub(dst, src0, src1, maskmask, repeat_times4, repeat_paramsparams)逐 bit 模式下mask为uint64列表列表中每个 bit 对应一个元素bit 为 1 表示该元素参与计算bit 为 0 则跳过。示例中mask [uint64_max, uint64_max]即两个 64 位全 1 掩码共覆盖 128 个元素64 64 bit配合repeat_times 4同样完成 512 个元素的计算但元素筛选粒度更细。源码级实现剖析三种形态如何映射到底层算子sub的 Python 实现非常精简真正的逻辑在公共函数op_impl中见 utils.py。调用asc.sub(dst, src0, src1, ...)后发生如下过程类型校验进入check_type校验dst/src0/src1的数据类型是否落在{float16, float32, int16, int32}集合内且三者类型一致utils.py 中sub: valids即指向该集合。重载分派OverloadDispatcher依据关键字参数匹配三种注册分支maskRuntimeIntrepeat_timesrepeat_params→ 调用builder.create_asc_SubL0Op连续模式masklistrepeat_timesrepeat_params→ 调用builder.create_asc_SubL1Op逐 bit 模式mask 列表逐项转换为uint64IR 值countRuntimeInt→ 调用builder.create_asc_SubL2Opcount 被转换为int32IR 值。IR 构建三种形态最终在 vec_binary.py 的sub函数中通过create_asc_SubL0Op/create_asc_SubL1Op/create_asc_SubL2Op构造出对应的 Asc IR 算子节点进入后续编译流水线。也就是说L0/L1/L2后缀对应了昇腾矢量指令的三种编程视图连续 mask、逐 bit mask、以及按 count 的整段计算。这一设计在add、mul、max、min等二元矢量接口中完全复用因此理解sub的实现即可触类旁通。另外值得留意的是接口的 docstring即 asc.language.basic.sub.md 的生成来源由 set_binary_docstring 以cpp_nameSub统一模板化生成这也是sub与add等接口文档结构高度一致的原因。测试用例佐证仓库单测 test_vector_binary.py 中的test_sub_kernel覆盖了sub的全部三种调用形态asc.jit def sub_kernel(): x_local asc.LocalTensor(dtypeasc.float16, posasc.TPosition.VECIN, addr0, tile_size512) y_local asc.LocalTensor(dtypeasc.float16, posasc.TPosition.VECIN, addr0, tile_size512) z_local asc.LocalTensor(dtypeasc.float16, posasc.TPosition.VECOUT, addr0, tile_size512) asc.sub(z_local, x_local, y_local, count512) params asc.BinaryRepeatParams(1, 1, 1, 8, 8, 8) asc.sub(z_local, x_local, y_local, mask512, repeat_times1, repeat_paramsparams) uint64_max 2**64 - 1 mask [uint64_max, uint64_max] asc.sub(z_local, x_local, y_local, maskmask, repeat_times1, repeat_paramsparams) sub_kernel[1]()该用例给出了一个可直接套用的完整内核骨架以asc.LocalTensor声明VECIN源张量与VECOUT目的张量在asc.jit修饰的核函数中依次调用三种形态的sub。开发者可参照此结构结合 examples 目录下的算子样例如 01_add/add.py快速搭建自己的减法算子。相关接口与延伸sub_relu按元素求差后再与 0 比较取较大值ReLU实现见 vec_binary.py对应 Ascend CSubRelu。sub_relu_cast求差 ReLU 类型转换的组合运算见 vec_vconv.py。同一族二元接口add、mul、max、min、div等共享相同的重载结构与op_impl分发机制掌握sub后可直接套用其调用约定。在算子开发实践中建议优先使用count形态处理连续整块数据以获取最佳可读性当张量维度较高或需要按块跳过部分元素时再选用maskrepeat_timesBinaryRepeatParams的高维切分形态并通过调整blk_stride与rep_stride精确控制地址布局。【免费下载链接】pyasc本项目为Python用户提供算子编程接口支持在昇腾AI处理器上加速计算接口与Ascend C一一对应并遵守Python原生语法。项目地址: https://gitcode.com/cann/pyasc创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

ArcGIS for JavaScript开发实战:环境搭建、图层管理与空间查询

ArcGIS for JavaScript开发实战:环境搭建、图层管理与空间查询

简介:这是一份 ArcGIS for JavaScript API 的中文参考文档,专为 Web GIS 开发者与前端工程师打造,系统梳理了从基础概念到地图创建的完整知识链。文档从示例概述入手,按一星至三星的难度梯度介绍 API 核心用法,并详细讲…

2026/9/18 22:54:53 阅读更多 →
信息系统运维标书落地:ITIL流程、SLA指标与驻场排班核算

信息系统运维标书落地:ITIL流程、SLA指标与驻场排班核算

简介:这份信息系统运维服务方案标书是一套面向企业IT运维负责人、信息化项目投标人员及运维服务团队的完整方案文档,用于解决运维服务体系搭建、投标应答与日常运行保障缺少规范蓝本的问题。方案围绕项目背景、项目目标与需求分析展开,构建了…

2026/9/18 22:53:52 阅读更多 →
提示词工程:提升AI对话质量的结构化方法

提示词工程:提升AI对话质量的结构化方法

1. 从随机提问到结构化思维:提示词工程的核心价值三年前我刚接触AI对话系统时,总习惯像和朋友聊天一样随意输入问题,结果得到的回答时好时坏。直到有次需要生成一份技术方案,连续修改了17版提示词才获得可用结果,这个痛…

2026/9/18 22:53:52 阅读更多 →

最新新闻

VimWiki文本对象指南:用viw等文本对象提升编辑效率

VimWiki文本对象指南:用viw等文本对象提升编辑效率

VimWiki文本对象指南:用viw等文本对象提升编辑效率 【免费下载链接】vimwiki Personal Wiki for Vim 项目地址: https://gitcode.com/GitHub_Trending/vi/vimwiki VimWiki 是 Vim 中构建个人 Wiki 的强大插件,而它自带的文本对象(ah、…

2026/9/18 23:40:20 阅读更多 →
2026年按摩椅深度测评

2026年按摩椅深度测评

按摩椅行业正经历一场深刻变革。2025年,高端按摩椅线上销售额同比增长超过25%,而销量增幅仅为个位数,说明消费者不再满足于“有个椅子捶捶背”,而是愿意为真正的健康管理能力买单。消费升级趋势清晰——中高端产品尤其是万元级按摩…

2026/9/18 23:40:20 阅读更多 →
.NET Hybrid Globalization 混合模式解析:Apple 移动平台上的平台原生全球化实现

.NET Hybrid Globalization 混合模式解析:Apple 移动平台上的平台原生全球化实现

.NET Hybrid Globalization 混合模式解析:Apple 移动平台上的平台原生全球化实现 【免费下载链接】runtime .NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps. 项目地址: https://gitcode.com/GitHub_Trending/runtime6/runtime …

2026/9/18 23:40:20 阅读更多 →
制造业档案管理系统:数字化转型中的核心痛点与解决方案

制造业档案管理系统:数字化转型中的核心痛点与解决方案

1. 档案管理系统的行业现状与核心痛点制造业数字化转型浪潮下,档案管理正从传统纸质存储向智能化系统快速演进。根据2023年制造业信息化调研报告,超过67%的头部企业已将电子档案管理系统列为新基建重点投入项目。但实际落地过程中,系统功能同…

2026/9/18 23:40:20 阅读更多 →
浅谈sql注入

浅谈sql注入

sql注入,就是把用户输入当成sql的一部分去执行了。可能会造成数据泄露,权限提升,数据篡改等因为不安全的字符串拼接,缺乏输入验证,容易导致sql注入。使用参数化查询,隔离代码和数据。使用参数化查询&#x…

2026/9/18 23:40:20 阅读更多 →
试 CrewAI 对接 LM Studio,TaoToken 的 Base URL 对照表

试 CrewAI 对接 LM Studio,TaoToken 的 Base URL 对照表

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

2026/9/18 23:39:20 阅读更多 →

日新闻

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

Matlab手写逻辑回归:从数学原理到多变量概率预测模型实现

很多朋友第一次看到"逻辑回归"这四个字,第一反应就是——这玩意儿是个回归模型吧?我当年也是在Matlab里跑完一段代码,看着输出的0.73、0.86这种概率值,才回过神来:这家伙其实是披着回归外衣的分类神器&#…

2026/9/18 0:00:28 阅读更多 →
高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

高值医用耗材研报PDF:用Python完成字段抽取、清洗与趋势预测

简介:这份报告是2023-2028年高值医用耗材行业调研及发展前景趋势预测报告,面向医疗器械企业管理者、投资机构、行业研究人员及关注政策变化的从业者,用于把握行业监管动向、市场格局与未来趋势。报告以PDF格式呈现,共1个文件、整体…

2026/9/18 0:00:28 阅读更多 →
三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

三维高斯场赋能世界模型:几何语义蒸馏与机器人决策实战

先把我自己的背景交代一下:我之前在搞具身智能和机器人导航相关的项目,很长一段时间里都被“环境表示”这件事卡着。传统做法是用点云或者网格做几何建模,语义信息另外再跑分割模型,两套东西各管各的,时间一长就会发现…

2026/9/18 0:00:28 阅读更多 →

周新闻

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验

AI SDK Harness 依赖更新指南:掌握 harness 包 SDK 依赖的升级、桥接同步与一致性校验 【免费下载链接】ai The AI Toolkit for TypeScript. From the creators of Next.js, the AI SDK is a free open-source library for building AI-powered applications and ag…

2026/9/16 19:03:19 阅读更多 →
Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化

Refine v5 Ant Design NumberField 组件实战:基于 Intl 的本地化数字格式化 【免费下载链接】refine A React Framework for building internal tools, admin panels, dashboards & B2B apps with unmatched flexibility. 项目地址: https://gitcode.com/GitH…

2026/9/17 7:57:36 阅读更多 →
Flutter应用改名全指南:从Android到iOS的配置与工具实践

Flutter应用改名全指南:从Android到iOS的配置与工具实践

刚接一个外包项目时,甲方要求把工程里临时用的应用名改成正式产品名。我本来觉得“改名”这种小事,打开配置文件改一行不就完了?结果真动手才发现,Flutter项目里“应用名称”根本不是一处配置,而是一整套散落在 Androi…

2026/9/17 10:19:14 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/16 22:31:27 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/15 21:39:18 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/16 22:32:59 阅读更多 →