有没有办法简化OpenCl内核的使用?

时间:2017-06-07 14:58:25

标签: opencl

要使用OpenCL内核,需要以下内容:      将内核代码放在一个字符串中   调用clCreateProgramWithSource   调用clBuildProgram   调用clCreateKernel   调用clSetKernelArg(x个参数)   调用clEnqueueNDRangeKernel    这需要为每个内核完成。有没有办法为每个内核重复更少的代码?

4 个答案:

答案 0 :(得分:2)

没有办法加快这个过程。您需要按照列出的步骤进行操作。

但重要的是要知道为什么需要这些步骤,以了解链的灵活性。

  • clCreateProgramWithSource :允许从不同的源添加不同的字符串以生成程序。某些字符串可能是静态的,但有些字符串可能是从服务器下载的,或者是从磁盘加载的。它允许CL代码动态化并随时更新。

  • clBuildProgram :为给定设备构建程序。也许你有8个设备,所以你需要多次调用它。每个设备都会生成不同的二进制代码。

  • clCreateKernel :创建内核。但是内核是二进制文件的入口点。因此,您可以从程序中创建多个内核(针对不同的功能)。也可以多次创建相同的内核,因为它包含参数。这对于具有适当参数的准备启动实例非常有用。

  • clSetKernelArg :更改内核实例中的参数。 (它存储在那里,因此将来可以多次使用)。

  • clEnqueueNDRangeKernel :启动它,使用其他操作配置启动的大小和依赖链。

因此,即使您可以通过调用" getKernelFromString()",功能也将非常有限,而且不够灵活。

答案 1 :(得分:1)

答案 2 :(得分:1)

我建议你研究一下SYCL。构建步骤是脱机执行的,通过跳过clCreateProgramWithSource节省了执行时间。参数设置由运行时自动完成,从用户lambda中提取信息

答案 3 :(得分:1)

还有CLU:https://github.com/Computing-Language-Utility/CLU - 有关详细信息,请参阅https://www.khronos.org/assets/uploads/developers/library/2012-siggraph-opencl-bof/OpenCL-CLU-and-Intel-SIGGRAPH_Aug12.pdf。这是一个非常简单的工具,但应该让生活更轻松。