【发布时间】:2012-12-03 16:10:57
【问题描述】:
我想停止 Gpu 内核一段时间,但我发现的唯一函数是 assert()。
我想使用计时器或事件来控制 gpu 将要停止的时间量,但我不知道如何!
谢谢。
【问题讨论】:
-
assert()几乎可以肯定不会做你想做的事。对于几乎所有拥有它的语言和库,它 (1) 仅用于完整性检查,(2) 如果检查失败,则尝试终止进程,以及 (3) 出于性能原因经常被禁用。我不知道 Cuda,但如果assert()做了一些不同的事情,那么它的名字就非常非常愚蠢。 -
(作为旁注,通常如果您想停止“一段时间”,那么您做错了。这就是竞争条件发生的方式。您通常在等待某些事情发生(或完成);改为等待。查看
cudaStreamWaitEvent和cudaStreamSynchronize。两者看起来都有希望。) -
只是同意@cHao assert in kernel code will not do what you want 并使用它来停止然后恢复(任何事情)是一个奇怪的想法。如果要退出内核,所有线程都必须退出。我能提供的唯一建议是让您的内核退出/完成,然后在主机端等待多长时间,然后启动另一个内核。 cudaStream... 函数也不会停止或挂起正在运行的内核。为什么需要停止内核?