有没有办法通过OpenCL API杀死正在运行的OpenCL内核?我没有在规范中找到任何东西。
我能想出的唯一解决方案是:1)定期检查内核在内核停止时写入的标志,或者2)在单独的进程中运行内核并终止整个进程。我不认为其中任何一个都是非常优雅的解决方案,我不确定#1是否能够可靠地工作。
答案 0 :(得分:1)
不,OpenCL API不允许中断正在运行的内核。在某些系统上,运行超过几秒钟的内核将被驱动程序杀死。
参考。对于Windows:Timeout Detection and Recovery of GPUs through WDDM,对于Linux + NVidia:Using CUDA and X。
标准中没有任何内容可以保证您的选项1能够正常运行。几乎肯定不会。 您的选项2将起作用,但您必须与其他过程进行通信。
如评论中所建议的那样,在较小的内核中拆分内核可能是最好的选择。