可以在GPU上编辑OpenCL内核吗?

可以在GPU上编辑OpenCL内核吗?,opencl,gpgpu,hpc,Opencl,Gpgpu,Hpc,我希望在GPU上从正在执行的内核编辑(或生成新的)OpenCL内核 现在,我所能看到的唯一方法是在设备上创建一个装满表示代码的数字的缓冲区,将该缓冲区发送到主机上的一个数组,在主机上生成/编译一个新内核,并将新内核重新排入设备队列 有没有办法避免往返到主机,只需在设备上编辑内核 内核能以任何方式访问寄存器吗?我没有时间写一个长答案,但简短的回答是:不能。你不能在GPU上编辑内核,你不能安排内核从GPU上运行,你不能在内核运行时修改内核的代码。GPU的体系结构与CPU完全不同,没有任何形式的操作系

我希望在GPU上从正在执行的内核编辑(或生成新的)OpenCL内核

现在,我所能看到的唯一方法是在设备上创建一个装满表示代码的数字的缓冲区,将该缓冲区发送到主机上的一个数组,在主机上生成/编译一个新内核,并将新内核重新排入设备队列

有没有办法避免往返到主机,只需在设备上编辑内核


内核能以任何方式访问寄存器吗?

我没有时间写一个长答案,但简短的回答是:不能。你不能在GPU上编辑内核,你不能安排内核从GPU上运行,你不能在内核运行时修改内核的代码。GPU的体系结构与CPU完全不同,没有任何形式的操作系统,完全由主机驱动程序控制。您所要求的无法实现,而您需要它的事实表明您的项目中可能存在设计缺陷。你想干什么?也许了解更多有助于人们指出可供选择的方法。谢谢,这很有帮助!您可以说,大多数寻找此功能的程序可能存在设计缺陷,但此程序不同。设备>主机>设备往返就足够了。我只是要确定没有别的办法。谢谢往返将是花费时间最少的一次;大部分时间都在编译器中。我很好奇你在解决什么样的问题,这听起来很有趣。我想你可能想知道,我刚刚看了即将发布的OpenCL 2.0规范,显然(令我惊讶的是)在没有主机交互的情况下,在设备端排队内核的能力有限。查看OpenCL2.0c规范,第6.13.17节(内核排队),网址为。不过,我认为这只是语法上的,仍然只是让内核主机端排队编译(如果需要)然后执行,而不是立即调度设备端,但我没有尝试过。无论如何,值得一看(这里有一个简短的片段)。@benshope更多信息,结果证明它不仅仅是语法上的糖分:来自:“设备内核可以在没有主机交互的情况下将内核排队到同一设备,从而实现灵活的工作调度模式,避免在设备和主机之间传输执行控制和数据的需要,通常会大大减轻主机处理器的瓶颈。“因此,一旦2.0实现可用,您应该能够优雅地实现您的目标。