昇腾微认证>Ascend C算子开发能力认证考试(中级)

已通过!

一、考试介绍

1       考试类型:编程题

2       考试时长:不限(下方考试时间仅2小时,请做好题目合成文件包后,再进考试上传!)

3       考试环境搭建要求:环境上要有昇腾NPU,且CANN版本为8.0.RC2.alpha003。请开发者自行准备。

典型场景举例:

4       考试题目:

实现Ascend C算子Sinh,算子命名为SinhCustom,编写其kernel侧代码、host侧代码,并完成aclnn算子调用测试。
相关算法:sinh(x) = (exp(x) - exp(-x)) / 2.0

要求:

4.1      完成Sinh算子kernel侧核函数相关代码补齐。

4.2      完成Sinh算子host侧Tiling结构体成员变量创建,以及Tiling实现函数的补齐。

4.3      要支持Float16类型输入输出。

4.4      不要使用Sinh高阶API,使用高阶API不得分

6       考试说明:

6.1      提供的考题代码工程中,SinhCustom目录为算子工程目录,依次打开下图红框所示的三个源码文件,并根据注释提示补全相关代码,可参考示例

二、 考题分析

2.1 op_host侧

2.1.1 sinh_custom.cpp

#include "kernel_operator.h"
using namespace AscendC;

constexpr int32_t BUFFER_NUM = 2;  // 定义缓冲区的数量为2

// 定义自定义的 KernelSinh 类,用于实现 sinh 运算的自定义内核
class KernelSinh {
public:
    // 内核类的构造函数,使用 `__aicore__` 关键词表示这是在 AI Core 上执行的代码
    __aicore__ inline KernelSinh() {}

    /**
    * @brief Init 函数负责初始化全局内存、局部缓存以及块和Tile的长度。
    *
    * @param x 输入数据的全局内存地址
    * @param y 输出数据的全局内存地址
    * @param totalLength 输入数据的总长度
    * @param tileNum 每个块内的数据将被进一步划分为多少个Tile
    */
    __aicore__ inline void Init(GM_ADDR x, GM_ADDR y, uint32_t totalLength, uint32_t tileNum)
    {
        // 确保块的数量不为0,否则输出错误信息
        ASSERT(GetBlockNum() != 0 && "block dim can not be zero!");

        // 计算每个块需要处理的数据长度
        this->blockLength = totalLength / GetBlockNum();
        this->tileNum = tileNum;

        // 确保tile的数量不为0,否则输出错误信息
        ASSERT(
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值