Cuda 有什么建议可以避免在长内核时出现延迟显示吗?

Cuda 有什么建议可以避免在长内核时出现延迟显示吗?,cuda,lag,Cuda,Lag,亲爱的CUDA用户,我正在转发nvidia董事会的一个问题: 我目前正在GPU上进行图像处理,我有一个内核,在运行大图像时大约需要500到700毫秒。它过去可以完美地处理较小的图像,但现在的问题是整个显示,甚至鼠标光标都变得滞后了(OS=win7) 我的想法是将我的内核分为4到8次内核启动,希望驱动程序能够更频繁地刷新(在每次内核启动之间)。 不幸的是,它根本没有帮助,所以我还可以尝试什么来避免这种冻结显示效果?有人建议我在每个内核之间添加一个cudaStreamQuery(0)调用,以避免驱动

亲爱的CUDA用户,我正在转发nvidia董事会的一个问题: 我目前正在GPU上进行图像处理,我有一个内核,在运行大图像时大约需要500到700毫秒。它过去可以完美地处理较小的图像,但现在的问题是整个显示,甚至鼠标光标都变得滞后了(OS=win7)

我的想法是将我的内核分为4到8次内核启动,希望驱动程序能够更频繁地刷新(在每次内核启动之间)。 不幸的是,它根本没有帮助,所以我还可以尝试什么来避免这种冻结显示效果?有人建议我在每个内核之间添加一个
cudaStreamQuery(0)
调用,以避免驱动程序打包

注:我准备用表演换取流畅

GPU(尚未)设计为在内核启动之间进行上下文切换,这就是为什么长期运行的内核会导致显示滞后。将内核拆分为多个版本可能会在WindowsVista/Windows7以外的平台上有所帮助。在这些平台上,每当CUDA驱动程序想要向GPU提交工作时,Windows显示驱动程序模型需要昂贵的用户->内核转换(“内核thunk”)

为了分摊内核thunk的成本,CUDA驱动程序将GPU命令排队并成批提交。驱动程序使用一种启发式方法来权衡内核thunk对性能的影响和不立即提交工作所增加的延迟。多内核解决方案的情况是,驱动程序同时向GPU提交内核或一系列内核


您是否尝试过cudaStreamQuery(0)建议?可能有帮助的原因是,它强制CUDA驱动程序向GPU提交工作,即使只有很少的工作等待完成。

我最终以更智能的方式将内核分为16次启动,并在每次调用之间添加所需的
cudaStreamQuery(0)
。正如预期的那样,总处理时间增加了,但现在显示已正确刷新。