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

CANN竞赛Add算子测试设计

决赛题目Add 算子测试用例设计【免费下载链接】cann-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-competitions任务说明本题目要求参赛者为 CANN ops-math 仓库中的Add逐元素加法算子编写端到端测试用例。参赛者需要在官方提供的 example 测试代码基础上进行扩展尽可能覆盖算子的各种执行路径并深入分析算子的精度特性。算子定义$y x_1 \alpha \times x_2$其中 $\alpha$ 为标量缩放因子默认为 1。当两个输入的 shape 不一致时按广播规则对齐后逐元素计算。算子概况Add 算子位于math/add/目录下采用 op_api → op_host → op_kernel 的三层架构。Add 算子引入了alpha缩放参数和 V3 版本 API。目录结构math/add/ ├── op_api/ # 接口层 │ ├── aclnn_add.h / aclnn_add.cpp # API 声明与实现713 行 │ ├── aclnn_add_v3.h / .cpp # V3 版本 API247 行 │ ├── add.h / add.cpp # 底层接口与设备路由162 行 ├── op_host/ # 主机计算层 │ ├── add_def.cpp # 算子注册声明支持的 dtype 组合 │ ├── add_infershape.cpp # shape 推断 │ └── arch35/ │ └── add_tiling_arch35.cpp # tiling 切分策略190 行 ├── op_kernel/ # 设备计算层 │ └── ... ├── examples/ # 使用示例 └── tests/ # 单元测试支持的数据类型Add 算子支持 14 种数据类型组合包括 BF16、FLOAT16、FLOAT32、INT32、UINT8、INT8、INT64、BOOL、COMPLEX32、COMPLEX64 等同类型运算以及 FLOAT16-FLOAT、BF16-FLOAT 等混合类型运算。完整列表可查看op_host/add_def.cpp。API 变体Add 算子对外提供 6 个 API分为标准版和 V3 版两组API语义aclnnAdd(self, other, alpha, out)out self alpha * othertensor 加 tensoraclnnAdds(self, other, alpha, out)out self alpha * scalartensor 加标量aclnnInplaceAdd(selfRef, other, alpha)selfRef alpha * other原地加 tensoraclnnInplaceAdds(selfRef, other, alpha)selfRef alpha * scalar原地加标量aclnnAddV3(self, other, alpha, out)out scalar alpha * other标量加 tensoraclnnInplaceAddV3(selfRef, other, alpha)V3 版本的原地加法注意Add 的所有 API 都包含一个alpha参数aclScalar*类型用于对第二个输入进行缩放。当alpha 1时等价于普通加法当alpha取其他值时会走不同的计算路径。这是 Add 算子的重要测试维度。V3 版本 API 说明aclnnAddV3与标准aclnnAdd的核心区别在于self参数的类型不同aclnnAddaclnnAddV3self 参数类型const aclTensor*tensorconst aclScalar*标量语义tensor alpha * tensorscalar alpha * tensorV3 版本本质上是ScalarTensor 形式的加法——第一个输入是标量而非 tensor。它在aclnn_add_v3.cpp247 行中有完全独立的实现包括独立的类型提升逻辑和三分支调度alpha1 直接 Add / 支持 Axpy 的类型走融合算子 / 其余先 Mul 再 Add。不调用 V3 API该文件中的代码就不会被覆盖。调用 V3 API 时需要引入对应的头文件aclnnop/aclnn_add_v3.h并注意 self 参数用aclCreateScalar创建。任务要求官方示例代码位于math/add/examples/test_aclnn_add.cpp。参赛者的任务1扩展测试覆盖面并补充结果验证为每个测试用例在 CPU 端独立计算期望值并与算子输出进行数值比对。Add 算子的期望值计算需要考虑 alpha 参数// x1, x2 为 float 输入alpha 为缩放因子 double expected (double)x1[i] alpha * (double)x2[i];浮点类型使用容差比较$|actual - expected| \leq atol rtol \times |expected|$建议容差FLOAT32: atol1e-6, rtol1e-6FLOAT16: atol1e-4, rtol1e-4INT32: 精确匹配覆盖维度包括但不限于数据类型FLOAT32、FLOAT16、BF16、INT32、INT8 等不同 dtype 触发不同的 tiling 策略分支alpha 参数alpha1标准加法、alpha0、alpha 为负数、alpha 为浮点数等Shape 组合同 shape、广播、标量、较大 tensor 等数值边界零值、极大值、NaN、Inf、整数溢出等API 变体Add、Adds、InplaceAdd、InplaceAdds、AddV3、InplaceAddV3 共 6 个 API异常输入nullptr、不支持的 dtype 等V3 API 调用示例#include aclnnop/aclnn_add_v3.h // 创建 scalar self注意不是 tensor float scalarValue 10.0f; aclScalar* self aclCreateScalar(scalarValue, ACL_FLOAT); // 调用 V3 API ret aclnnAddV3GetWorkspaceSize(self, other, alpha, out, workspaceSize, executor); ret aclnnAddV3(workspaceAddr, workspaceSize, executor, stream); // 清理 aclDestroyScalar(self);2精度测试与分析分析精度问题的场景和原因并在测试报告中详细记录每个场景仅举一例即可。以下场景提供参考场景提示1大数小数尝试[1e10, 1e10] [1e-5, 1e-5]这样的输入观察小数是否被大数吞没分析浮点数有效位数的限制场景提示2正负抵消尝试[1.0000001, 2.0000001] [-1.0, -2.0]这样的输入观察接近值相减时的精度损失分析 Catastrophic Cancellation 现象其他可探索的精度场景Alpha 参数引入的额外误差混合类型运算的精度损失浮点特殊值NaN, Inf, 次正规数的处理3输出格式每个测试用例输出[PASS]或[FAIL]程序结尾输出汇总有失败用例返回非 0 值。输出示例Test case 1: Basic Add (float32) Expected: [1.200000, 2.200000, 3.200000] Actual: [1.200000, 2.200000, 3.200000] [PASS] Test case 2: Large Small (precision loss) Expected: [10000000000.000010, 10000000000.000010] Actual: [10000000000.000000, 10000000000.000000] Error: [0.000010, 0.000010] [FAIL] Precision loss detected Summary: 1 passed, 1 failed编译与运行前置步骤修复 CMakeLists 以启用 Host 层覆盖率问题现象默认的math/add/CMakeLists.txt在ascend910_93SOC 下存在两处配置问题导致op_host/arch35/add_tiling_arch35.cpp的.gcno / .gcda均无法生成Host 层覆盖率将为0%直接拉低综合得分SUPPORT_COMPUTE_UNIT列表中不包含ascend910_93查表返回空即便补上 SOCSUPPORT_TILING_DIR也需要对应一个存在的目录仓库只有arch35/。解决方案编译前先修改math/add/CMakeLists.txt补齐 SOC 列表并统一映射到arch35- set(SUPPORT_COMPUTE_UNIT ascend950 mc62cm12a) - set(SUPPORT_TILING_DIR arch35 arch35) set(SUPPORT_COMPUTE_UNIT ascend310p ascend910_93 ascend910b ascend950 mc62cm12a) set(SUPPORT_TILING_DIR arch35 arch35 arch35 arch35 arch35)两行sed命令搞定sed -i s|set(SUPPORT_COMPUTE_UNIT ascend950 mc62cm12a)|set(SUPPORT_COMPUTE_UNIT ascend310p ascend910_93 ascend910b ascend950 mc62cm12a)|; s|set(SUPPORT_TILING_DIR arch35 arch35)$|set(SUPPORT_TILING_DIR arch35 arch35 arch35 arch35 arch35)| \ math/add/CMakeLists.txt根因简述tiling 代码运行在CPUhost 侧gcov 完全可观测。之所以测不到不是架构限制而是 CMake 层面的 SOC→arch 目录映射配置错误导致源码未进入编译。注意修改 CMakeLists 后如已经跑过一次编译请先rm -rf build build_out清空产物再重新编译否则缓存中的旧配置仍然生效。编译运行流程# 编译启用覆盖率插桩 bash build.sh --pkg --socascend910_93 --opsadd --vendor_namecustom --cov # 安装算子包 ./build_out/cann-ops-math-custom_linux-aarch64.run # 运行测试真实 NPU 环境 bash build.sh --run_example add eager cust \ --vendor_namecustom --socascend910_93 --cov # 查看覆盖率 find build -name *.gcda | grep add gcov -b -c gcda文件路径注意使用--socascend910_93参数不使用--simulator参数直接在真实 NPU 上运行每次修改测试用例后需要重新执行编译 → 安装 → 运行的完整流程以更新覆盖率数据编译后务必校验 host 层产物find build -name add_tiling*.gcno应能查到对应文件若为空说明前置 CMakeLists 修复未生效请回到上面的前置步骤重新操作评分标准决赛采用五维综合评分如下维度 1. 编译通过率提交的测试代码必须能在评测环境中通过下述完整流程正常执行bash build.sh --pkg --socascend910_93 --opsadd --vendor_namecustom --cov → ./build_out/cann-ops-math-custom_linux-aarch64.run → bash build.sh --run_example add eager cust --vendor_namecustom --socascend910_93 --cov编译或运行任何一步失败都会影响整体得分。评测系统会尝试从提交的 build 目录提取覆盖率数据作为参考但编译失败的提交整体得分受限。维度 2. 行覆盖率覆盖率统计范围op_api 层的 3 个文件 op_host 层的 1 个 tiling 文件共 4 个源文件。文件layerop_api/aclnn_add.cppapiop_api/aclnn_add_v3.cppapiop_api/add.cppapiop_host/arch35/add_tiling_arch35.cpphost综合行覆盖率由各文件的命中行数与总行数加总后计算$$ Coverage_{line} \frac{\sum Lines_Covered_i}{\sum Total_Lines_i} $$提示aclnn_add_v3.cpp是独立的 V3 API 实现文件若不调用aclnnAddV3系列接口整个文件会是 0% 覆盖率add_tiling_arch35.cpp涵盖 Add 算子的 tiling 切分策略不同 dtype 组合走不同分支维度 3. 分支覆盖率对上述同样的 4 个文件统计分支覆盖率gcov -b输出$$ Coverage_{branch} \frac{\sum Branches_Covered_i}{\sum Total_Branches_i} $$维度 4. 精度分析根据测试报告中对精度问题的场景发现与原理分析综合评分。维度 5. 测试报告根据测试报告的完整性、结构、分析深度评分。前置条件编译通过提交的test_aclnn_add.cpp必须能在评测环境中通过编译和运行流程正常执行。编译失败的提交将无法获得覆盖率得分但评测系统会尝试从提交的 build 目录中提取覆盖率数据作为参考。结果验证测试代码中必须包含有效的结果验证逻辑即计算期望值并与实际输出比对仅打印结果而不验证的提交将被扣分。测试报告必须提交测试报告按照提供的模版编写。提交要求提交一个压缩包.zip包含队名/ ├── test_aclnn_add.cpp # 测试用例源文件必须 ├── build/ # 编译产物目录必须见下方说明 └── report.md # 测试设计说明必须按模版编写build 目录提交说明重要为减小提交包大小只需提交评分相关的.gcda和.gcno文件。涉及两个路径op_api 层目录名abs非笔误是 CMake 聚合 object library 的挂载点build/math/abs/CMakeFiles/ophost_math_opapi_obj.dir/__/add/op_api/ ├── aclnn_add.cpp.gcda ├── aclnn_add.cpp.gcno ├── aclnn_add_v3.cpp.gcda ├── aclnn_add_v3.cpp.gcno ├── add.cpp.gcda └── add.cpp.gcnoop_host 层tilingbuild/math/add/CMakeFiles/ophost_math_tiling_obj.dir/op_host/arch35/ ├── add_tiling_arch35.cpp.gcda └── add_tiling_arch35.cpp.gcno不要提交完整的 build 目录可能有几百 MB只提交上述覆盖率文件即可。如需偷懒也可以使用以下命令快速筛选find build -name aclnn_add.cpp.gc* \ -o -name aclnn_add_v3.cpp.gc* \ -o -name add.cpp.gc* \ -o -name add_tiling*.gc* \ | tar czvf add_gcov.tar.gz -T -【免费下载链接】cann-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关文章:

CANN竞赛Add算子测试设计

决赛题目:Add 算子测试用例设计 【免费下载链接】cann-competitions 本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。 项目地址: https://gitcode.com/cann/cann-competitions 任务说明 本题目要求参赛者为 CANN …...

Java基础十六:枚举,包,反射

一、枚举(Enum) 1. 什么是枚举 枚举是一种特殊的类,用于定义一组固定的常量。 2. 基本用法 // 最简单的枚举 public enum Season {SPRING, SUMMER, AUTUMN, WINTER }// 使用枚举 public class TestEnum {public static void main(String[…...

如何彻底解决显卡驱动冲突问题:Display Driver Uninstaller深度解析与实战指南

如何彻底解决显卡驱动冲突问题:Display Driver Uninstaller深度解析与实战指南 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/displ…...

论文阅读:MMA: Multi-Modal Adapter for Vision-Language Models

MMA:视觉语言模型的多模态适配器,主要用于改善文本与视觉分支表示之间的对齐,先分析 CLIP 不同层特征的“判别性 / 泛化性”,再只在高层插入一个带共享投影层的多模态适配器,让视觉和文本分支在学习任务特异知识的同时…...

华为CANN/ops-math反射填充3D梯度算子

ReflectionPad3dGrad 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAtlas A3 训练系列产品/Atlas A3 推…...

OnmyojiAutoScript:阴阳师手游智能自动化脚本终极指南

OnmyojiAutoScript:阴阳师手游智能自动化脚本终极指南 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师手游的日常任务繁重,从御魂副本到百鬼夜行&a…...

从入门到精通:彻底讲懂Agent的Skill,不做“炫技式浪费”

写在前面 现在做Agent,有一个非常典型的误区: 👉 Skill越多 Agent越强 于是开始疯狂堆Skill、堆工具、堆能力。 结果是什么? • Token飞速消耗• 调用混乱• 成本暴涨• 但任务反而做不好 本质上,这不是“在做A…...

Ceph 对象存储深度解析系列 第二部分:RGW 数据路径、分片和自动化

新钛云服已累计为您分享896篇技术干货简介在本深度解析的第一部分中,我们剖析了 Ceph RGW 内部的高性能请求路径。我们涵盖了其无状态前端、基础 RADOS 存储池以及关键的桶索引,揭示了动态分片如何使单个桶内的对象列表实现几乎无限的可扩展性。我们确立…...

Godot引擎集成本地大语言模型:从原理到实战的完整指南

1. 项目概述:在Godot引擎中集成本地大语言模型 如果你是一名游戏开发者,最近肯定没少听说AI在游戏开发中的应用。从自动生成对话到设计游戏机制,大语言模型(LLM)展现出的潜力让人兴奋。但一提到实际集成,很…...

联邦学习与Transformer融合:在CV与入侵检测中的隐私保护分布式智能实践

1. 项目概述与核心价值最近几年,我一直在关注一个技术交叉点:如何让模型在“看不见”彼此数据的情况下,还能协同进化,变得更聪明。这听起来有点像天方夜谭,但在数据隐私法规日益收紧、数据孤岛问题愈发严重的今天&…...

CANN/metadef Add函数API文档

Add 【免费下载链接】metadef Ascend Metadata Definition 项目地址: https://gitcode.com/cann/metadef 函数功能 新增一个ContinuousVector元素&#xff0c;其中新增ContinuousVector元素的容量为inner_vector_capacity。 函数原型 template<typename T> Con…...

【路径规划】基于启发式搜索与增量启发式搜索方法MRPP或MAPF的多机器人路径规划算法附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、程序设计科研仿真。&#x1f34e;完整代码获取 定制创新 论文复现点击&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和数学建模资料 &#x1f3…...

Parquet文件原理与实战:列式存储如何提升查询性能和压缩效率

1. 什么是Parquet文件&#xff1f;一个数据工程师每天都在用、却很少被真正讲透的底层逻辑Parquet不是一种“新潮技术”&#xff0c;它更像是一把被磨得锃亮的瑞士军刀——没有炫目的UI&#xff0c;不靠营销话术&#xff0c;但只要你在处理超过百万行的数据、写过哪怕一条SELEC…...

VLA-0视觉语言动作模型:零修改部署与多模态AI实践

1. 项目概述VLA-0是一种突破性的视觉语言动作模型&#xff0c;它最大的特点在于实现了"开箱即用"的零修改部署能力。作为一名长期关注多模态AI发展的从业者&#xff0c;我首次接触到这个模型时就被它的设计理念所震撼——传统视觉语言模型往往需要针对特定任务进行繁…...

CANN/ops-math矩阵乘法压缩反量化算子

aclnnMatmulCompressDequant 【免费下载链接】ops-math 本项目是CANN提供的数学类基础计算算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-math &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DTAt…...

CANN KV压缩Epilog算子

custom-npu_kv_compress_epilog 【免费下载链接】cann-recipes-infer 本项目针对LLM与多模态模型推理业务中的典型模型、加速算法&#xff0c;提供基于CANN平台的优化样例 项目地址: https://gitcode.com/cann/cann-recipes-infer 产品支持情况 产品是否支持Ascend 950…...

SQL PIVOT原理与实战:从行转列到高性能宽表生成

1. 项目概述&#xff1a;从“行变列”开始&#xff0c;真正搞懂SQL PIVOT不是语法糖&#xff0c;而是数据思维的分水岭你有没有遇到过这样的报表需求&#xff1a;销售表里每条记录是一笔订单&#xff08;客户名、产品名、金额、日期&#xff09;&#xff0c;但老板要的却是“每…...

CANN/asc-tools msopgen算子模板样例

【免费下载链接】asc-tools Ascend C Tools仓是CANN基于Ascend C编程语言推出的配套调试工具仓。 项目地址: https://gitcode.com/cann/asc-tools msopgen使用新自定义算子工程模板样例 概述 本样例介绍msopgen工具按照新算子工程模板生成新自定义算子工程。以AddCust…...

2025最权威的降重复率神器实际效果

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 对于AI生成内容容易被检测出来的这个问题&#xff0c;现如今已经存在专门用来降低文本AI率的…...

GPT-3.5在独裁者游戏中的公平性实验:AI决策的统计模式与伦理启示

1. 项目概述&#xff1a;当AI成为“裁判”&#xff0c;公平性如何定义&#xff1f;最近在翻看一些行为经济学和博弈论的资料时&#xff0c;一个经典的实验模型——“独裁者游戏”——反复出现在眼前。这个实验很简单&#xff1a;两个人&#xff0c;一笔钱。一个人是“独裁者”&…...

CANN双三次上采样算子

aclnnUpsampleBicubic2d 【免费下载链接】ops-cv 本项目是CANN提供的图像处理、目标检测相关的算子库&#xff0c;实现网络在NPU上加速计算。 项目地址: https://gitcode.com/cann/ops-cv &#x1f4c4; 查看源码 产品支持情况 产品是否支持Ascend 950PR/Ascend 950DT…...

AI赋能引力波数据分析:从信号检测到参数估计的实践与挑战

1. 引力波数据分析的挑战与AI的破局之道当LIGO在2015年首次直接探测到引力波时&#xff0c;整个物理学界为之振奋。这不仅仅是验证了爱因斯坦百年前的预言&#xff0c;更是为我们打开了一扇观测宇宙的全新窗口。然而&#xff0c;随之而来的并非全是喜悦&#xff0c;还有海啸般的…...

CANN/cannbot-skills NPU推理优化

【免费下载链接】cannbot-skills CANNBot 是面向 CANN 开发的用于提升开发效率的系列智能体&#xff0c;本仓库为其提供可复用的 Skills 模块。 项目地址: https://gitcode.com/cann/cannbot-skills name: infer-model-optimize-team description: NPU 模型推理优化助手…...

2026 毕业季必藏:9 款 AI 论文查重降重工具全测评,Paperxie 领衔高效通关

paperxie-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/期刊论文https://www.paperxie.cn/weight?type1https://www.paperxie.cn/weight?type1 毕业季论文查重与 AIGC 检测双重压力下&#xff0c;选对工具能少走 90% 弯路。2026 年知网、维普 AIGC 检测算法全面…...

Llama 3.2 Vision轻量微调实战:500图打造电商级图文生成模型

1. 项目概述&#xff1a;为什么我们要亲手微调一个视觉语言模型&#xff1f;你有没有遇到过这样的场景&#xff1a;电商运营同事凌晨三点发来一张模糊的手机拍摄图&#xff0c;配文“快帮我写个爆款标题”&#xff0c;而你盯着这张图反复放大、截图、百度识图、翻竞品页面&…...

CANN/pyasc取小数计算函数

asc.language.adv.frac 【免费下载链接】pyasc 本项目为Python用户提供算子编程接口&#xff0c;支持在昇腾AI处理器上加速计算&#xff0c;接口与Ascend C一一对应并遵守Python原生语法。 项目地址: https://gitcode.com/cann/pyasc asc.language.adv.frac(dst: LocalT…...

CANN/hccl故障诊断定位思路

定位思路 【免费下载链接】hccl 集合通信库&#xff08;Huawei Collective Communication Library&#xff0c;简称HCCL&#xff09;是基于昇腾AI处理器的高性能集合通信库&#xff0c;为计算集群提供高性能、高可靠的通信方案 项目地址: https://gitcode.com/cann/hccl …...

CANN学习中心CMake配置详解

CMake 配置详解 【免费下载链接】cann-learning-hub CANN 学习中心仓&#xff0c;支持在线互动运行、边学边练&#xff0c;提供教程、示例与优化方案&#xff0c;一站式助力昇腾开发者快速上手。 项目地址: https://gitcode.com/cann/cann-learning-hub CMakePresets.js…...

MRCV开源工具库:用AI潜在表示与神经网络重塑音乐创作与声音设计

1. MRCV&#xff1a;当AI遇见声音&#xff0c;一个开源工具库如何重塑音乐创作作为一名在音频编程和音乐技术领域摸爬滚打了十多年的从业者&#xff0c;我见证了从简单的MIDI音序器到复杂的物理建模合成器的演变。但最近几年&#xff0c;最让我感到兴奋的&#xff0c;无疑是人工…...

感知-通信-计算一体化:破解边缘AI资源困局的核心架构

1. 项目概述&#xff1a;为什么我们需要感知-通信-计算一体化&#xff1f;在智能家居里&#xff0c;你对着智能音箱说句话&#xff0c;它几乎瞬间就能回应&#xff1b;在自动驾驶汽车上&#xff0c;摄像头和雷达捕捉到的路况信息&#xff0c;需要立刻被分析并做出驾驶决策。这些…...