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

OpenCL可以从.cl源代码和预构建的二进制内核一起构建程序吗?,opencl,Opencl,我的程序有几个内核。我想使用离线编译器将一个内核编译成二进制。那么,我如何使用其他内核和一个预构建的内核二进制文件来构建我的程序呢?AFAIK这是不可能的,或者是非常复杂的 内核应该是小的和模块化的。复合内核是一种糟糕的做法 您可以尝试将从源代码构建的内核与加载为二进制的内核一起排队(带/out CL\u QUEUE\u out\u OF ORDER\u EXEC\u MODE\u ENABLE f.e,带/out blocking或not标志)。这样,它们将并行运行 剩下的是内核间通信。您可以

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

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

内核应该是小的和模块化的。复合内核是一种糟糕的做法

您可以尝试将从源代码构建的内核与加载为二进制的内核一起排队(带/out CL\u QUEUE\u out\u OF ORDER\u EXEC\u MODE\u ENABLE f.e,带/out blocking或not标志)。这样,它们将并行运行

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

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

  • 复杂的方法:使用
    cleQueueMarkerWithWaitList、cleQueueBarrierWithWaitList、cleQueueMarker、cleQueueWaitList、clWaitForEvents、clCreateUserEventCleQueueBarrier

  • 管道
    。你可以用管子。我从来没有试过。(OpenCL2.0)


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