本文分享自华为云社区《一文教你如何调用Ascend C算子》,作者: 昇腾CANN。
Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C++标准规范,兼具开发效率和运行性能。基于Ascend C编写的算子程序,通过编译器编译和运行时调度,运行在昇腾AI处理器上。使用Ascend C,开发者可以基于昇腾AI硬件高效实现自定义的创新算法。
本文重点介绍基于Ascend C算子编程语言完成自定义算子的开发和部署后,如何调用自定义算子验证算子功能。
目前,Ascend C算子有三种常见的调用方式:
当然,除了可以调用自定义算子进行功能验证外,开发者也可以通过单算子调用方式直接调用昇腾算子库中预制的算子,使用昇腾算力。
通过单算子API执行方式调用算子,是算子交付阶段最重要的一种调用方式,也是Ascend C算子开发人员必须掌握的算子调用手段,下面做重点讲解。开发者若想了解其他方式,可以移至文末查阅“Ascend C一站式学习资源”[1]。
Ascend C算子开发并编译部署完成后,会在算子包安装目录下的op_api目录下会自动生成单算子API,以默认安装场景为例,单算子调用的头文件.h和动态库libcust_opapi.so所在的目录结构为:
aclnn_xx.h中的算子API形式一般定义为“两段式接口”,形如:
单算子API可以直接在应用程序中调用,大致过程为:
完整调用流程如下:
下面提供单算子调用的关键代码示例,供开发者参考:
昇腾的gitee仓中提供了完整的样例工程LINK,工程目录结构如下:
步骤1 增加头文件引用。
安装部署完成后,会在算子包安装目录下的op_api目录生成单算子调用的头文件aclnn_xx.h和动态库libcust_opapi.so,编写单算子的调用代码时,要包含自动生成的单算子API执行接口头文件:
步骤2 修改CMakeLists文件。
编译算子调用程序时,需要在头文件的搜索路径include_directories中增加算子包安装目录下的op_api/include目录,便于找到该头文件;同时需要链接cust_opapi动态库。
步骤3 生成测试数据。
在样例工程目录下,执行如下命令:
会在工程目录下input目录中生成两个shape为(8,2048),数据类型为float16的数据文件input_0.bin与input_1.bin,用于进行AddCustom算子的验证。代码样例如下:
步骤4 程序编译与运行。
1. 开发环境上,设置环境变量,配置AscendCL单算子验证程序编译依赖的头文件与库文件路径,如下为设置环境变量的示例。${INSTALL_DIR}表示CANN软件安装目录,例如,$HOME/Ascend/ascend-toolkit/latest。{arch-os}为运行环境的架构和操作系统,arch表示操作系统架构,os表示操作系统,例如x86_64-linux。
2. 编译样例工程,生成单算子验证可执行文件。
a. 切换到样例工程根目录,然后在样例工程根目录下执行如下命令创建目录用于存放编译文件,例如,创建的目录为“build”。
b. 进入build目录,执行cmake编译命令,生成编译文件,命令示例如下所示:
c. 执行如下命令,生成可执行文件。
会在工程目录的output目录下生成可执行文件execute_add_op。
3. 执行单算子。
a. 以运行用户(例如HwHiAiUser)拷贝开发环境中样例工程output目录下的execute_add_op到运行环境任一目录。
说明: 若您的开发环境即为运行环境,此拷贝操作可跳过。
b. 在运行环境中,执行execute_add_op:
会有如下屏显信息:
如果有Run op success,表明执行成功,会在output目录下生成输出文件output_z.bin。
4. 比较真值文件。
切换到样例工程根目录,然后执行如下命令:
会有如下屏显信息:
可见,AddCustom算子验证结果正确。
[1]Ascend C一站式学习资源: https://www.hiascend.com/ascend-c
点击关注,第一时间了解华为云新鲜技术~