【发布时间】:2013-04-24 21:23:30
【问题描述】:
有没有办法通过 OpenCL API 杀死正在运行的 OpenCL 内核?我在规范中没有找到任何东西。
我能想出的唯一解决方案是 1) 定期检查内核中主机在希望内核停止时写入的标志,或 2) 在单独的进程中运行内核并终止整个进程。我认为这两种解决方案都不是非常优雅的解决方案,而且我不确定 #1 是否能可靠地工作。
【问题讨论】:
-
我也不确定第二个选项是否很好。即使您终止进程,内核仍会在 GPU 上运行。我试图在我的光线追踪器中做类似的事情。我在与内核不同的线程中检查了键盘。如果用户按下“ESCAPE”,我希望程序立即结束。最后我看了一下,当程序结束时,我得到了一个核心转储。
-
我完全同意,它们都是不好的选择。我希望那里有更好或更标准的选择。
-
拔掉插头,说真的,你最好将内核分成定义明确(且时间短)的计算部分,并将控制决策留给主机端。例如,如果 nvidia 驱动程序在几秒钟内没有完成并且您的 gpu 连接到显示器,则会杀死您的内核
标签: kernel opencl infinite-loop kill