开发者
下载
[object Object]

RTC是Ascend C运行时编译库,通过接口,在程序运行时,将中间代码动态编译成目标机器码,提升程序运行性能。

运行时编译库提供以下核心接口:

  • aclrtcCreateProg:根据输入参数(字符串形式表达的Ascend C源代码等)创建aclrtcProg程序实例。
  • aclrtcCompileProg:编译给定的程序,支持用户自定义编译选项,比如指定NPU架构版本号:--npu-arch=dav-2201。支持的编译选项可以参考
  • aclrtcGetBinDataSize:获取编译后的Device侧二进制数据的大小。
  • aclrtcGetBinData:获取编译后的Device侧二进制数据。
  • aclrtcDestroyProg:在编译和执行过程结束后,销毁给定的程序。

编译完成后需要调用如下接口完成(仅列出核心接口)Kernel加载与执行。完整流程和详细接口说明请参考中的“Kernel加载与执行”章节。

  1. 通过aclrtBinaryLoadFromData接口解析由aclrtcGetBinData接口获取的算子二进制数据。
  2. 获取核函数句柄并根据核函数句柄操作其参数列表,相关接口包括aclrtBinaryGetFunction(获取核函数句柄)、aclrtKernelArgsInit(初始化参数列表)、aclrtKernelArgsAppend(追加拷贝用户设置的参数值如xDevice, yDevice, zDevice)等。
  3. 调用aclrtLaunchKernelWithConfig接口,启动对应算子的计算任务。

如下是一个使用aclrtc接口编译并运行Add自定义算子的完整样例:

[object Object]

编译命令如下,编译时需要设置-I${ASCEND_HOME_PATH}/include,用于找到aclrtc相关头文件,并设置-L${ASCEND_HOME_PATH}/lib64链接alc_rtc动态库。

[object Object]