RTC是Ascend C运行时编译库,通过接口,在程序运行时,将中间代码动态编译成目标机器码,提升程序运行性能。
运行时编译库提供以下核心接口:
- aclrtcCreateProg:根据输入参数(字符串形式表达的Ascend C源代码等)创建aclrtcProg程序实例。
- aclrtcCompileProg:编译给定的程序,支持用户自定义编译选项,比如指定NPU架构版本号:--npu-arch=dav-2201。支持的编译选项可以参考。
- aclrtcGetBinDataSize:获取编译后的Device侧二进制数据的大小。
- aclrtcGetBinData:获取编译后的Device侧二进制数据。
- aclrtcDestroyProg:在编译和执行过程结束后,销毁给定的程序。
编译完成后需要调用如下接口完成(仅列出核心接口)Kernel加载与执行。完整流程和详细接口说明请参考中的“Kernel加载与执行”章节。
- 通过aclrtBinaryLoadFromData接口解析由aclrtcGetBinData接口获取的算子二进制数据。
- 获取核函数句柄并根据核函数句柄操作其参数列表,相关接口包括aclrtBinaryGetFunction(获取核函数句柄)、aclrtKernelArgsInit(初始化参数列表)、aclrtKernelArgsAppend(追加拷贝用户设置的参数值如xDevice, yDevice, zDevice)等。
- 调用aclrtLaunchKernelWithConfig接口,启动对应算子的计算任务。
如下是一个使用aclrtc接口编译并运行Add自定义算子的完整样例:
[object Object]
编译命令如下,编译时需要设置-I${ASCEND_HOME_PATH}/include,用于找到aclrtc相关头文件,并设置-L${ASCEND_HOME_PATH}/lib64链接alc_rtc动态库。
[object Object]