【问题标题】:Is it possible to kill a running CUDA kernel?是否可以杀死正在运行的 CUDA 内核?
【发布时间】:2013-09-29 02:28:09
【问题描述】:

假设我有许多可以让 GPU 执行的 CUDA 内核。无论如何我都不想修改内核代码(例如包含一个陷阱)。

有没有办法杀死这样一个正在运行的内核?

我打算自动生成内核(遗传编程)。这些内核可能具有可能需要很长时间才能完成的行为。如果我可以在内核运行时终止它,我可以维护一个计时器并在需要时终止。

【问题讨论】:

  • 您是否必须检查内核的输出以确定它们是否应该被杀死?然后,使用常规模型更有意义,您可以在其中创建短期运行的内核并检查其输出以确定是否应该重新启动它们。
  • 在我的用例中,输出不能被解释为采取行动。我需要一种机制来抢占运行内核。
  • 我认为您的设计几乎肯定走错了轨道。如果您设法想出一种方法来杀死正在运行的内核,那将是一种黑客行为——这不是 CUDA 的设计初衷。您应该考虑如何修改您的设计,使其在常规 CUDA 范式中工作。

标签: cuda gpgpu nvidia


【解决方案1】:

cudaDeviceReset() 将杀死所有正在运行的内核。

它还会清除设备上完成的所有分配,因此如果您打算再次使用它们,则需要重新分配任何数据区域。

请注意,cudaDeviceReset() 本身不足以将 GPU 恢复到正确的功能行为。为了实现这一点,“拥有”过程也必须终止。见here

【讨论】:

    猜你喜欢
    • 2011-05-19
    • 2012-12-21
    • 1970-01-01
    • 2017-07-14
    • 2011-02-26
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多