CANN竞赛Erf算子实现
2026/6/10 10:19:55 网站建设 项目流程

团队信息

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

  • 团队名称:[Ski]
  • 所属单位:[南京邮电大学(蒋兴宝、李珂), 南京理工大学(胡秀洋)]
  • 团队成员:
    • [蒋兴宝],队伍负责人及联系人,主要负责Erf算子整体方案设计、host 侧 tiling 逻辑编写、device 侧 kernel 开发、精度与性能优化、测试验证以及文档整理。
    • [李珂],参与资料整理、实现思路讨论和测试结果核对等辅助工作。
    • [胡秀洋],参与资料整理、测试结果核对和文档内容校对等辅助工作。
  • 联系人:[蒋兴宝]
  • 联系邮箱:[jiangxingbao25@mails.ucas.ac.cn]

1. 算子整体实现思路

本算子实现的是Erf前向计算,输入输出均为float32ND格式,输出 shape 和 dtype 与输入保持一致。整体分为 host 侧 tiling 与 device 侧 kernel 两部分:host 侧读取输入张量元素总数、平台 AIV 核数和数据类型,根据元素规模生成 tiling 参数;device 侧根据 tiling 参数完成多核并行、分块搬运、向量计算和结果写回。

host 侧以 8 个元素为基本对齐单位,将输入展平成一维连续数据处理。根据totalLength计算对齐后的 block 数,并将 block 平均分配到可用 AIV 核上,余数 block 分配给前若干个核,从而保证各核负载尽量均衡。tiling 数据中保存totalLength、实际使用核数、每核基础 block 数、余数 block 数以及单次处理的tileSize=8192

kernel 侧每个 AIV 核根据blockIdx计算自己负责的全局偏移和元素长度,然后按 tile 循环处理。每个 tile 的执行流程为:从 Global Memory 搬入 UB,调用对应计算路径得到erf(x),再将结果写回 Global Memory。对于尾块不足 8 元素的情况,搬入时通过 padding 补齐到对齐长度,写回时只写真实有效元素,避免越界和无效数据污染输出。

算子内部提供两条计算路径:当总元素数不超过 8192 时,使用有理多项式近似公式直接计算;当总元素数更大时,调用 AscendC 内置Erf向量接口计算。两条路径通过 tiling key 的模板参数在编译期选择,减少运行时分支开销。

2. 精度优化策略

小规模输入采用奇函数形式的有理多项式近似:先计算x^2,再用 Horner 方式分别求分子和分母多项式,最终计算x * P(x^2) / Q(x^2)。这种形式天然保持erf(-x) = -erf(x)的对称性,并且相比显式计算高次幂,可以减少中间乘法次数和舍入误差。

在多项式路径中,输入会先截断到[-3.92, 3.92]。由于erf(x)在该区间外已经非常接近-11,截断可以避免尾部大输入带来的近似误差放大,同时保持输出的饱和趋势。分母多项式使用正系数组合,降低除法时分母接近 0 的风险,提高计算稳定性。

对于大规模输入,算子直接调用 AscendC 官方Erf实现,以获得更稳定的数学精度和平台适配能力。尾块 padding 使用 0 作为补齐值,且最终只写回真实元素长度,因此补齐数据不会影响有效输出结果。

3. 性能优化策略

并行策略上,host 侧根据 AIV 核数和对齐 block 数动态设置blockDim,当数据量较小时只启用必要核数,避免空核调度;当数据量较大时尽量打满 AIV 核,并通过余数 block 前置分配使各核处理量接近一致。

访存策略上,kernel 将全局数据按tileSize=8192分块搬入 UB,再使用向量指令批量计算,减少 GM 访问次数。数据搬运按 8 元素对齐处理,尾块使用DataCopyPad解决非对齐问题,使主体路径保持连续、规则的高效搬运。

计算策略上,小张量使用多项式近似,避免直接调用通用Erf带来的额外开销;多项式采用 Horner 展开,减少乘法次数和临时张量占用。大张量路径使用 AscendC 内置Erf,并配置双缓冲输入/输出队列,配合 UB 临时缓冲提升搬运与计算流水效率。整个算子不申请额外 workspace,临时数据均在 UB 内完成,降低内存开销。

【免费下载链接】cann-ops-competitions本仓库用于 CANN 开源社区各类竞赛、开源课题、社区任务等课题发布、开发者作品提交和展示。项目地址: https://gitcode.com/cann/cann-ops-competitions

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

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询