Ascend C sqrt算子实战
💡
原文中文,约6200字,阅读约需15分钟。
📝
内容提要
本文介绍了如何编写Ascend C的sqrt算子,并通过内核调用方式在CPU和NPU模式下进行验证。文章介绍了矢量算子开发流程,包括算子分析、算子类的实现和算子验证。最后使用numpy的allclose()函数比较算子计算与基准数据的结果,CPU模式下结果完全一致。
🎯
关键要点
- 本文介绍了如何编写Ascend C的sqrt算子,并在CPU和NPU模式下进行验证。
- 矢量算子开发流程包括算子分析、算子类实现和算子验证。
- 算子分析阶段确定输入输出、数学表达式和底层实现接口。
- 算子类实现包括内存初始化和三个流水任务的实现。
- 算子验证通过核函数调用和numpy计算结果进行比对,误差在一定范围内即可。
- 核函数定义和算子类实现与add例程类似,主要差异在于compute函数中调用sqrt API。
- 在CPU模式下通过ICPU_RUN_KF调用核函数,在NPU模式下通过<<<>>>调用。
- 基准数据生成使用numpy生成input_x和基准结果golden。
- 计算结果比较使用numpy的allclose()函数,CPU模式下结果完全一致。
- CPU模式下编译运行顺利,NPU模式下编译报错,需进一步研究。
➡️