多个主机线程启动单个CUDA内核

多个主机线程启动单个CUDA内核,cuda,cuda-streams,Cuda,Cuda Streams,对于我的CUDA开发,我使用的是一台16核的机器,以及一个GTX 580 GPU和16条短信。对于我正在做的工作,我计划启动16个主机线程(每个内核上1个),每个线程启动1个内核,每个线程有1个块和1024个线程。我的目标是在16条短信上并行运行16个内核。这可能/可行吗 我试着尽可能多地阅读有关独立上下文的内容,但似乎没有太多可用的信息。据我所知,每个主机线程都可以有自己的GPU上下文。但是,如果我使用独立的上下文,我不确定内核是否会并行运行 我可以将所有16个主机线程的所有数据读取到一个巨大

对于我的CUDA开发,我使用的是一台16核的机器,以及一个GTX 580 GPU和16条短信。对于我正在做的工作,我计划启动16个主机线程(每个内核上1个),每个线程启动1个内核,每个线程有1个块和1024个线程。我的目标是在16条短信上并行运行16个内核。这可能/可行吗

我试着尽可能多地阅读有关独立上下文的内容,但似乎没有太多可用的信息。据我所知,每个主机线程都可以有自己的GPU上下文。但是,如果我使用独立的上下文,我不确定内核是否会并行运行


我可以将所有16个主机线程的所有数据读取到一个巨大的结构中,并将其传递给GPU以启动一个内核。但是,复制太多,会减慢应用程序的速度。

一次只能在GPU上有一个上下文。实现所需并行性的一种方法是使用CUDA流。您可以在上下文中创建16个流,并按名称将memcopies和内核启动到流中。您可以在以下网站上的关于使用流的快速网络研讨会中阅读更多内容:。完整的API参考在CUDA工具包手册中。CUDA 4.2手册可从以下网址获得:

虽然多线程应用程序可以在同一GPU上同时保存多个CUDA上下文,但这些上下文不能同时执行操作。激活时,每个上下文都只能使用GPU,并且必须在另一个上下文(可能包括使用渲染API或显示管理器的操作)可以访问GPU之前让步


因此,一句话,不,这个策略不能与任何当前的CUDA版本或硬件一起使用。

多个上下文不能同时使用单个GPU,所以不,这不起作用。谢谢。你能不能把上面的回答作为我可以接受的答案?@gmemon,关于在CUDA 5.5中创建和执行多个上下文,请参阅我下面的评论。您是否在16SMs中成功执行了16个内核?你最终的解决方案是什么?我正在使用CUDA 5.5。它是否支持在单个GPU上并发执行多个CUDA上下文?我正在主机上创建两个单独的线程,并使用驱动程序API创建CUDA上下文。这些上下文在CUDA 5.5中同时执行。