我的程序有几个内核。我想使用离线编译器将一个内核编译为二进制。那么如何使用其他内核和一个预构建的内核二进制文件来构建程序?
答案 0 :(得分:2)
您应该能够使用clCreateProgramWithSource
和clCompileProgram
来编译其他内核,并使用clCreateProgramWithBinary
来加载预先构建的内核。然后,您可以使用clLinkProgram
链接这些程序,以将两个程序链接到一个包含所有内核的新程序中。
答案 1 :(得分:1)
不可能,或者非常复杂。
内核应该是小型且模块化的。复合内核是不好的做法。
您可以尝试的方法是使从源代码构建的内核与以二进制形式加载的内核(带有/不带CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE f,带有/不阻塞或不带有标志)一起入队。这样,它们将并行运行。
什么是剩余的内核间通信。您可以尝试以下操作:
简单方法:从主机内核B启动完成后,阻止内核A运行。
复杂的方式:使用clEnqueueMarkerWithWaitList, clEnqueueBarrierWithWaitList, clEnqueueMarker, clEnqueueWaitLIst, clWaitForEvents, clCreateUserEventclEnqueueBarrier
Pipes
。您可以使用管道。 clCreatePipe我从未尝试过。 (OpenCL 2.0)