当前位置: 首页 > news >正文

CANN add_abs逐元素算子

add_abs 算子

【免费下载链接】cann-outreach项目地址: https://gitcode.com/cann/cann-outreach

概述

add_abs是一个 PyPTO 逐元素(element-wise)动态算子,计算 $y = a + |b|$,即输入a与输入b的绝对值逐元素相加。

属性
算子名称add_abs
内核函数add_abs_kernel
算子类型逐元素(Element-wise)
动态轴n 轴(支持运行时可变 n)
源文件add_abs.py(算子 + 测试一体化)

数学公式

$$ y = a + |b| $$

对于任意位置 $(i, j)$:

$$ y[i][j] = a[i][j] + |\ b[i][j]\ | $$


张量规格

参数形状数据类型说明
输入a[n, d]float32第一输入张量
输入b[n, d]float32第二输入张量(取绝对值后与 a 相加)
输出y[n, d]float32计算结果张量
  • n 轴: 动态轴,支持运行时指定任意正整数值。
  • d 轴: 固定维度(编译时由输入 shape 决定)。

精度标准

指标
绝对容差 (atol)0.000025
相对容差 (rtol)0.005

实现细节

内核签名

@pypto.frontend.jit(runtime_options={"run_mode": global_run_mode}) def add_abs_kernel( a: pypto.Tensor([], pypto.DT_FP32), b: pypto.Tensor([], pypto.DT_FP32), out: pypto.Tensor([], pypto.DT_FP32) ):
  • JIT 编译: 使用pypto.frontend.jit装饰器自动编译。
  • 动态形状: 张量声明使用Tensor([], ...)表示动态 shape 支持。
  • Tile 配置:set_vec_tile_shapes(2, 8)设置向量 tile 形状。

核心计算

# torch # y = a + torch.abs(b) # pypto: # tiling # operator

涉及的 PyPTO API: | API | 用途 | 约束 | |-----|------|------| |pypto.set_vec_tile_shapes| 设置基本块tiling | 尾轴必须32B对齐 | |pypto.abs| 计算张量b的逐元素绝对值 | | |pypto.add| 将aabs(b)逐元素相加 | |

API 使用指导: https://gitcode.com/cann/pypto/blob/master/docs/api/config/pypto-set_vec_tile_shapes.md https://gitcode.com/cann/pypto/blob/master/docs/api/operation/pypto-abs.md https://gitcode.com/cann/pypto/blob/master/docs/api/operation/pypto-add.md

运行模式

  • NPU 模式(--run_mode npu): 在 Ascend NPU 上真实执行,输出实际计算结果并进行精度校验。
  • SIM 模式(--run_mode sim): 编译 + 代价模型仿真,不执行实际计算(输出为未初始化内存),常用于编译验证和性能预估算。

快速开始

环境准备

# 设置 NPU 设备 ID export TILE_FWK_DEVICE_ID=0 # 安装依赖(如未安装) pip install pypto torch numpy

运行全部测试(NPU 模式)

python add_abs.py

运行仿真模式

python add_abs.py --run_mode sim

列出所有可用测试

python add_abs.py --list

运行指定测试

python add_abs.py add_abs::test_add_abs_basic python add_abs.py add_abs::test_add_abs_dynamic_n python add_abs.py add_abs::test_add_abs_edge_cases

测试用例

测试 ID名称说明
add_abs::test_add_abs_basic基础功能验证固定小张量[2, 2]验证 $y = a + |b|$ 的正确性
add_abs::test_add_abs_dynamic_n动态 n 轴验证测试n ∈ {3, 7, 15}运行时动态 shape,验证算子对不同 n 值的正确性
add_abs::test_add_abs_edge_cases边界场景验证覆盖全零输入、b 全部为负数、大数值等边界情况

预期输出示例(NPU 模式)

============================================================ PyPTO add_abs Operator Tests ============================================================ ============================================================ Test: Basic Usage of add_abs Operator ============================================================ Input a: tensor([[ 1., -2.], [ 3., -4.]]) Input b: tensor([[-2., 3.], [-4., 5.]]) Output: tensor([[3., 1.], [7., 1.]]) Expected: tensor([[3., 1.], [7., 1.]]) ✓ Basic usage of add_abs operator completed successfully ============================================================ Test: add_abs Operator - Dynamic n-axis ============================================================ n= 3, d=4: max_diff=0.00000000 ✓ n= 7, d=4: max_diff=0.00000000 ✓ n= 15, d=4: max_diff=0.00000000 ✓ ✓ Dynamic n-axis test completed successfully ============================================================ Test: add_abs Operator - Edge Cases ============================================================ [zeros] a=zeros, b=zeros ✓ [neg_b] a=ones, b=-3 ✓ [large] a=[100,-200], b=[-50,150] ✓ ✓ Edge cases test completed successfully ============================================================ All add_abs tests passed! ============================================================

文件结构

kadc_test/01-beginner/elewise_ops/ ├── add_abs.md # 需求规格文档 ├── add_abs.py # 算子实现 + 测试用例(唯一文件) ├── ReadMe.md # 本文档 └── __pycache__/ # Python 字节码缓存

编译产物

运行后在项目根output/目录下生成性能分析数据:

  • bubble_analysis.log— 气泡分析报告
  • merged_swimlane.json— 泳道图数据(可在 ui.perfetto.dev 或 vscode插件 PyPTO ToolKits 打开)

已知限制

  1. SIM 模式: 不会产生实际计算结果(仅编译验证和代价模型仿真),精度校验自动跳过。
  2. NPU 环境依赖: 需要正确安装 CANN 及相关库(libhccl.solibc_sec.sotorch_npu)。
  3. Tile 配置: 当前使用固定set_vec_tile_shapes(2, 8),尾轴需要32B对齐。

【免费下载链接】cann-outreach项目地址: https://gitcode.com/cann/cann-outreach

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

http://www.jsqmd.com/news/859118/

相关文章:

  • MTK设备Bootloader解锁与授权绕过技术深度解析:mtkclient-gui实战指南
  • 多语种语音合成新突破,ElevenLabs维吾尔语TTS上线即受限?3类企业正在紧急迁移替代方案
  • 2026年佛山定制家居五金代理商破局指南:从低毛利内卷到高端供应链的蜕变 - 企业名录优选推荐
  • MAPDN:突破性多智能体强化学习框架实现电力配电网电压智能控制实战指南
  • k8s部署lowcoder 2.6.4
  • 5分钟快速上手:用Vue+SVG轻松绘制专业网络拓扑图
  • 紫微斗数排盘新选择:iztro 5分钟极速入门指南
  • 微积分基础2-积分篇
  • Lovable + Kotlin Multiplatform落地实战:单代码库支撑iOS/Android/Web三端,已验证于百万级DAU项目(含Gradle构建耗时优化42%方案)
  • 南京及镇江管道漏水施工服务商排行 口碑实测对比 - 奔跑123
  • 微信小程序二维码生成终极指南:三步搞定专业级二维码
  • 2026深州市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 智能方案:高效备份QQ空间历史数据的实用工具
  • 长期使用中感受到的Taotoken服务稳定性与路由优化
  • 暗黑2存档编辑器终极指南:5分钟掌握角色修改与装备管理
  • KirikiriTools深度解析:突破视觉小说资源加密的实战指南
  • Taotoken用量看板如何帮助开发者清晰掌控API消耗
  • 万洋集团受邀参加国家发改委民营企业座谈会 - 品牌速递
  • 字符串算法总结
  • 如何用AhabAssistantLimbusCompany彻底解放你的《Limbus Company》游戏时间:从手动重复到智能自动化的终极指南
  • 2026年京东e卡换现金的全方位攻略 - 淘淘收小程序
  • 2026汕尾市本地人必选的瓷砖空鼓专业维修公司TOP5推荐!卫生间空鼓翘边,厨房空鼓翘边,客厅空鼓翘边,全天响应,免费上门,5月专业瓷砖空鼓修复公司持证上岗师傅排名最新深度调研方案) - 一修哥修缮
  • 揭秘Cat-Catch浏览器扩展:3大核心功能实现专业资源嗅探与流媒体下载
  • Google Earth Engine(GEE)——求随机点中的长时序的各波段的折线图(附给矢量集合添加时间属性)
  • Visual Studio Uninstaller终极指南:如何彻底清理2012-2015版本残留文件
  • YOLOv8n-face模型跨平台部署:从PyTorch到ONNX的实战避坑指南
  • 5个理由选择mpv.net:Windows平台终极免费播放器的完整指南
  • 南京地区防水施工服务商排行及实测对比 - 奔跑123
  • 如何用Bifrost轻松管理三星固件:跨平台图形化下载解密工具完全指南
  • 从被动观看到主动学习:LLPlayer如何用AI技术重新定义视频语言学习