3

有没有办法通过 OpenCL API 杀死正在运行的 OpenCL 内核?我在规范中没有找到任何东西。

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

4

1 回答 1

1

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

参考。对于 Windows:超时检测和通过 WDDM 恢复 GPU,对于 Linux+NVidia:使用 CUDA 和X。

标准中的任何内容都不能保证您的选项 1 会起作用。它几乎肯定不会。您的选项 2 将起作用,但随后您将不得不与其他进程进行通信。

正如评论中所建议的,将内核拆分成更小的内核可能是最好的选择。

于 2013-05-12T22:23:23.970 回答