答案 0 :(得分:2)
没有办法加快这个过程。您需要按照列出的步骤进行操作。
但重要的是要知道为什么需要这些步骤,以了解链的灵活性。
clCreateProgramWithSource :允许从不同的源添加不同的字符串以生成程序。某些字符串可能是静态的,但有些字符串可能是从服务器下载的,或者是从磁盘加载的。它允许CL代码动态化并随时更新。
clBuildProgram :为给定设备构建程序。也许你有8个设备,所以你需要多次调用它。每个设备都会生成不同的二进制代码。
clCreateKernel :创建内核。但是内核是二进制文件的入口点。因此,您可以从程序中创建多个内核(针对不同的功能)。也可以多次创建相同的内核,因为它包含参数。这对于具有适当参数的准备启动实例非常有用。
clSetKernelArg :更改内核实例中的参数。 (它存储在那里,因此将来可以多次使用)。
clEnqueueNDRangeKernel :启动它,使用其他操作配置启动的大小和依赖链。
因此,即使您可以通过调用" getKernelFromString()",功能也将非常有限,而且不够灵活。
答案 1 :(得分:1)
答案 2 :(得分:1)
我建议你研究一下SYCL。构建步骤是脱机执行的,通过跳过clCreateProgramWithSource节省了执行时间。参数设置由运行时自动完成,从用户lambda中提取信息
答案 3 :(得分:1)