繁体   English   中英

如何从多个CPU线程管理相同的CUDA内核调用?

[英]How to manage same CUDA kernel call from multiple CPU threads?

我有一个cuda内核,当从单个CPU线程调用时,它可以正常工作。 但是,当从多个CPU线程(〜100)调用同一内核时,大多数内核似乎根本不执行,因为结果全为零。有人可以指导我如何解决此问题吗?

在当前版本的内核中,我在内核调用结束时使用cudadevicesynchronize() 在这种情况下,在cudaMalloc()和内核调用之前添加sync命令会有帮助吗?

还有另一件事需要澄清。 即,如果两个CPU线程执行相同的cudaMalloc()命令,则后者会覆盖GPU内存中的前者还是会创建自己的内存?

在此先感谢您的帮助

通常,一个CPU线程可用于调用CUDA内核。 但是,从CUDA 4.0开始,多个CPU线程可以共享上下文。 您可以使用cuCtxSetCurrent将内核的上下文绑定到当前线程。 有关此API函数的更多信息,请参见此处

另一个解决方法是创建一个保存上下文的GPU工作线程,并将任何CUDA请求传递给该线程。

关于您的其他问题,我没有设置适当线程的上下文,我记得cudaMalloc甚至不会执行(我使用JCuda,因此行为可能有所不同)。 但是,如果当前将上下文设置为调用内核,则不会覆盖内存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM