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

有没有办法简化OpenCl内核的使用?,opencl,Opencl,要使用OpenCL内核,需要以下内容: 将内核代码放入字符串中 调用clCreateProgramWithSource 调用clBuildProgram 调用clCreateKernel 调用clSetKernelArg(x个参数) 调用clEnqueueNDRangeKernel 这需要为每个内核完成。有没有办法做到这一点,为每个内核重复更少的代码?没有办法加快进程。你需要按照你列出的步骤一步一步走 但重要的是要知道为什么需要这些步骤,了解链条的灵活性 clCreateProgramWith

要使用OpenCL内核,需要以下内容:

  • 将内核代码放入字符串中
  • 调用clCreateProgramWithSource
  • 调用clBuildProgram
  • 调用clCreateKernel
  • 调用clSetKernelArg(x个参数)
  • 调用clEnqueueNDRangeKernel

  • 这需要为每个内核完成。有没有办法做到这一点,为每个内核重复更少的代码?

    没有办法加快进程。你需要按照你列出的步骤一步一步走

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

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

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

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

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

    • clEnqueueNDRangeKernel:启动它,配置启动的大小以及与其他操作的依赖链


    因此,即使您有办法只调用“getKernelFromString()”,功能也会非常有限,而且不太灵活。

    没有办法加快这个过程。你需要按照你列出的步骤一步一步走

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

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

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

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

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

    • clEnqueueNDRangeKernel:启动它,配置启动的大小以及与其他操作的依赖链


    因此,即使您有办法只调用“getKernelFromString()”,功能也将非常有限,而且不太灵活。

    您可以查看包装器库

    您可以查看包装器库
    我建议你调查一下。构建步骤离线执行,通过跳过clCreateProgramWithSource节省执行时间。参数设置由运行时自动完成,从用户lambda提取信息,我建议您仔细研究。构建步骤离线执行,通过跳过clCreateProgramWithSource节省执行时间。参数设置由运行时自动完成,从用户lambda提取信息。还有CLU:-请参阅以获取更多信息。这是一个非常简单的工具,但应该会让生活更轻松。

    还有CLU:-请参阅以获取更多信息。这是一个非常简单的工具,但应该会让生活变得更轻松。

    有OpenCL实用工具工具包吗?-类似于编写OpenGL程序的GLUT。是否有用于OpenCL的实用工具工具包类似于编写OpenGL程序的GLUT。是否有用于OpenCL的实用工具工具包与编写OpenGL程序的GLUT类似,您可能可以使用SYCLIs,这是一个OpenCL的实用工具工具包与编写OpenGL程序的GLUT类似,您可以使用SYCL