Kernel 杀死OpenCL内核

Kernel 杀死OpenCL内核,kernel,opencl,infinite-loop,kill,Kernel,Opencl,Infinite Loop,Kill,有没有办法通过OpenCLAPI杀死正在运行的OpenCL内核?我在说明书中没有找到任何东西 我能想到的唯一解决方案是1)定期检查内核中的标志,主机希望内核停止时写入该标志,或者2)在单独的进程中运行内核并终止整个进程。我认为这两种解决方案都不是很好,我也不确定#1是否能可靠工作。不,OpenCL API不允许中断正在运行的内核。在某些系统上,运行超过几秒钟的内核将被驱动程序杀死 参考:适用于Windows:,适用于Linux+NVidia: 标准中的任何内容都不能保证选项1有效。几乎肯定不会。

有没有办法通过OpenCLAPI杀死正在运行的OpenCL内核?我在说明书中没有找到任何东西


我能想到的唯一解决方案是1)定期检查内核中的标志,主机希望内核停止时写入该标志,或者2)在单独的进程中运行内核并终止整个进程。我认为这两种解决方案都不是很好,我也不确定#1是否能可靠工作。

不,OpenCL API不允许中断正在运行的内核。在某些系统上,运行超过几秒钟的内核将被驱动程序杀死

参考:适用于Windows:,适用于Linux+NVidia:

标准中的任何内容都不能保证选项1有效。几乎肯定不会。 您的选项2将起作用,但随后您必须与另一个流程进行通信


按照评论中的建议,将内核拆分为更小的内核可能是最好的选择。

我也不确定第二个选项是否好。即使终止进程,内核仍然在GPU上运行。我试图在我的光线跟踪器中做类似的事情。我在不同的线程中检查了键盘,而不是内核。如果用户按下“ESCAPE”,我希望程序立即结束。上一次我看到它时,我正在得到一个核心转储程序结束。我完全同意,他们都是坏的选择。我希望有一个更好或更标准的选择。拔出插头,认真地说,你最好将内核划分为定义良好(且时间较短)的计算部分,并将控制决策权留给主机端。例如,如果内核在几秒钟内没有完成,并且您的gpu连接到显示器,nvidia驱动程序就会杀死内核