【问题标题】:using assert() in a CUDA kernel to delay execution在 CUDA 内核中使用 assert() 来延迟执行
【发布时间】:2012-12-03 16:10:57
【问题描述】:

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

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

谢谢。

【问题讨论】:

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

标签: cuda sleep assert


【解决方案1】:

您可以使用clock()clock64() 来生成繁忙的循环,请在此处查看答案:Equivalent of usleep() in CUDA kernel?

【讨论】:

  • clock()、clock64() 或 PTX 特殊寄存器 %clock、%clock64、%globaltimer 可用于实现轮询等待。这与空闲或停止 GPU 不同。
  • 从 OP 看来,他是想要忙碌的等待还是完全停止并不完全清楚,所以我会让他来判断。
  • 是的,实际上在 cuda 中使用了 assert,但是使用时钟可以帮助我控制我想要的时间量。谢谢大家;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-27
  • 2021-05-15
  • 2015-09-28
  • 1970-01-01
  • 2011-09-25
  • 2013-08-08
  • 1970-01-01
相关资源
最近更新 更多