Kernel Launch调用方式

核函数章节,介绍了核函数的定义规则和通过内核调用符进行核函数调用的方式。ACLRT_LAUNCH_KERNEL调用方式对内核调用符方式进行了功能加强,按照核函数定义章节介绍的规则进行定义的核函数均可以通过ACLRT_LAUNCH_KERNEL调用。

ACLRT_LAUNCH_KERNEL调用接口的使用方法如下:

ACLRT_LAUNCH_KERNEL(kernel_name)(blockDim, stream, argument list);

考虑名为add_custom的核函数调用的例子,该函数实现两个矢量的相加:

// blockDim设置为8表示在8个核上调用了add_custom核函数,每个核都会独立且并行地执行该核函数,该核函数的参数列表为x,y,z。
ACLRT_LAUNCH_KERNEL(add_custom)(8, stream, x, y, z)

核函数的调用是异步的,核函数的调用结束后,控制权立刻返回给主机端,可以调用以下函数来强制主机端程序等待所有核函数执行完毕。

aclError aclrtSynchronizeStream(aclrtStream stream);

aclrtSynchronizeStream的具体用法参考AscendCL应用开发指南(C&C++)“AscendCL API参考” - 同步等待 - aclrtSynchronizeStream章节。