OpenCL 可以从 .cl 源代码和预构建的二进制内核一起构建程序吗?



我的程序有几个内核。我想使用离线编译器将一个内核编译为二进制。那么如何使用其他内核和预构建的内核二进制文件来构建我的程序呢?

您应该能够使用clCreateProgramWithSourceclCompileProgram编译其他内核,并使用clCreateProgramWithBinary加载预构建的内核。然后,您可以使用clLinkProgram链接这些程序,将这两个程序链接到一个包含所有内核的新程序中。

AFAIK这是不可能的或非常复杂的。

内核应该是小而模块化的。复合内核是一种不好的做法。

您可以尝试从源代码构建的排队内核以及作为二进制加载的内核(带/出CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE f.e,带/出阻塞或不标志(。这样它们将并行运行。

剩下的是内核间通信。您可以尝试以下操作:

  1. 简单方法:从主机内核 B 完成启动后阻止内核 A 的运行。

  2. 复杂的方法:使用clEnqueueMarkerWithWaitList, clEnqueueBarrierWithWaitList, clEnqueueMarker, clEnqueueWaitLIst, clWaitForEvents, clCreateUserEventclEnqueueBarrier

  3. Pipes.您可以使用管道。clCreatePipe 我从未尝试过。(OpenCL 2.0(

最新更新