CANN竞赛Erf算子赛题
一、赛题背景【免费下载链接】cann-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-competitions高斯误差函数 (erf) 是数学和统计学中的基本函数广泛应用于概率论、统计学、物理学和工程学等领域。在深度学习中erf函数常用于激活函数、归一化层等场景。本题要求基于PyTorch原生算子的核心业务逻辑采用Ascend C编程语言进行算子原生开发在昇腾NPU硬件上实现一款高性能、高精度的erf算子。二、算子功能描述实现的erf算子需对输入张量执行高斯误差函数计算。算子计算公式为y erf(x)。算子支持多种数据类型输出类型与输入类型保持一致需兼容非32整倍数的维度非对齐场景。三、核心定义与约束3.1 参考算子PyTorch原生算子torch.erf参考文档https://pytorch.org/docs/stable/special.html#torch.special.erf3.2 输入输出与属性总览类型参数名类型维度形状支持数据类型数据格式备注INPUT必选xtensor无限制float32ND输入张量OUTPUT输出ytensor无限制float32ND计算结果张量3.3 关键输入约束维度取值范围均为正整数输入x任意合法维度支持多维张量输出y形状与输入x一致非对齐场景兼容算子需适配内存/数据非 32 字节对齐的场景数值取值约束输入张量的数值取值范围不超出对应数据类型的原生表达范围数据类型约束输入输出数据类型保持一致3.4 数学公式与计算规则基础公式$\operatorname{erf}(x)\frac{2}{\sqrt{\pi}}\int_{0}^{x} e^{-t^2},dt$计算步骤直接计算输入x的高斯误差函数值关键实现erf误差函数计算逻辑复杂可以有不同的近似计算方式需要满足精度标准下在不同值域更优的算法 cann社区中预置erf计算公式如下$x\min(x,3.92), \quad x\max(x,-3.92)$$\operatorname{erf}(x) \frac{ \left(\left(\left((0.053443748819x^20.75517016694e1)x^20.10162808918e3\right)x^20.13938061484e4\right)x^20.50637915060e4\right)x^20.2963838468e5 }{ \left(\left(\left((x^20.31212858877e2)x^20.39856963806e3\right)x^20.30231248150e4\right)x^20.13243365831e5\right)x^20.2667224157e5 }x$数值稳定性要求需使用数值稳定的实现方式避免中间计算溢出特别是对于大输入值精度要求计算结果需满足以下精度误差要求float32相对误差 1e-4绝对误差 1e-4双万分之一精度3.5 输出要求形状约束输出张量的形状与输入张量形状完全一致类型约束输出数据类型与输入数据类型保持一致数值范围输出值范围为[-1, 1]由于erf函数的值域为[-1, 1]四、规则要求数值稳定性必须使用数值稳定的实现方式避免中间计算溢出特别是erf函数的近似计算性能要求在保证数值精度和正确性的前提下优化计算性能充分利用NPU硬件特性支持向量化计算优化内存访问模式合理利用NPU计算单元五、示例说明示例 1基础计算输入xtensor ([0.0, 1.0, 2.0])dtypefloat32shape[3] 输出ytensor ([0.0000, 0.8427, 0.9953])dtypefloat32shape[3]结果解释标准erf函数计算结果示例 2负值计算输入xtensor ([-1.0, -2.0, -3.0])dtypefloat32shape[3] 输出ytensor ([-0.8427, -0.9953, -0.99998])dtypefloat32shape[3]结果解释erf函数是奇函数erf(-x) -erf(x)示例 3高维张量计算输入xtensor (shape[2,3,4,5])dtypefloat32随机数值范围[-3,3] 输出ytensor (shape[2,3,4,5])dtypefloat32结果解释高维张量逐元素计算输出形状与输入一致六、测试用例覆盖范围数据类型覆盖float32维度场景覆盖基础维度1维、2维、3维、4维高维场景含批次维度的多维场景非对齐场景非32整倍数的内存非对齐场景数值范围覆盖正常数值范围[-3, 3]erf函数主要变化区间饱和区间[-10, -3]和[3, 10]erf函数接近±1的区间零值附近[-0.1, 0.1]erf函数线性区间精度场景覆盖正常数值范围常规计算验证边界数值接近±1的饱和区间精度验证精度验证验证双万分之一float32精度要求【免费下载链接】cann-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-competitions创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考