在CUDA内核中使用assert()延迟执行

在CUDA内核中使用assert()延迟执行,cuda,sleep,assert,Cuda,Sleep,Assert,我想停止Gpu内核一段时间,但我找到的唯一函数是assert() 我想使用计时器或事件来控制gpu将要停止的时间量,但我不知道如何停止 谢谢。您可以使用clock()或clock64()生成繁忙周期,请参见此处的答案:assert()几乎肯定不会执行您想要的操作。对于几乎所有拥有它的语言和库,它(1)仅用于健全性检查,(2)在检查失败时尝试终止进程,以及(3)由于性能原因经常被禁用。我不知道Cuda,但是如果assert()那里做了一些不同的事情,那么它的名字就非常非常愚蠢。(顺便说一句,一般来

我想停止Gpu内核一段时间,但我找到的唯一函数是
assert()

我想使用计时器或事件来控制gpu将要停止的时间量,但我不知道如何停止


谢谢。

您可以使用
clock()
clock64()
生成繁忙周期,请参见此处的答案:

assert()
几乎肯定不会执行您想要的操作。对于几乎所有拥有它的语言和库,它(1)仅用于健全性检查,(2)在检查失败时尝试终止进程,以及(3)由于性能原因经常被禁用。我不知道Cuda,但是如果
assert()
那里做了一些不同的事情,那么它的名字就非常非常愚蠢。(顺便说一句,一般来说,如果你想停下来“一段时间”,你就做错了。这就是比赛条件发生的原因。你通常在等待事情发生(或完成);等等。查看
cudaStreamWaitEvent
cudaStreamSynchronize
。两者看起来都很有希望。)仅仅同意@cHao并使用它停止然后恢复(任何事情)是一个奇怪的想法。如果要退出内核,则必须退出所有线程。我能提供的唯一建议是让您的内核退出/完成,然后在主机端等待您想要的时间,然后启动另一个内核。cudaStream。。。函数也不会停止或挂起正在运行的内核。为什么需要停止内核?clock()、clock64()或PTX特殊寄存器%clock、%clock64、%globaltimer可用于实现轮询等待。这与闲置或停止GPU不同。从OP上看,不完全清楚他是想要忙碌的等待还是完全停止,所以我让他来判断。是的,实际上assert在cuda中使用,但使用时钟可以帮助我控制我想要的时间量。谢谢大家;)