2012-09-06 75 views
8

对于我的CUDA开发,我使用的是16核的机器和1个带16个SM的GTX 580 GPU。对于我所做的工作,我计划启动16个主机线程(每个核心1个),每个线程启动1个内核,每个线程有1个块和1024个线程。我的目标是在16个SM上并行运行16个内核。这可能/可行吗?多个主机线程启动各个CUDA内核

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

我可以将所有16个主机线程的所有数据读入一个巨型结构,并将其传递给GPU以启动一个内核。但是,它将会太多复制,并且会降低应用程序的速度。

+0

多个上下文不能同时使用一个GPU,所以不行,这是行不通的。 – talonmies

+0

谢谢。你能把上面的答案作为答案,以便我能接受吗? – gmemon

+0

@gmemon,请参阅我的评论以在CUDA 5.5中创建和执行多个上下文。你在16SM中成功执行了16个内核吗?最后你的解决方案是什么? – Tariq

回答

4

尽管多线程应用程序可以在同一GPU上同时保存多个CUDA上下文,但这些上下文无法并发执行操作。当处于活动状态时,每个上下文都有唯一的GPU使用,并且必须在另一个上下文(可能包括使用渲染API或显示管理器的操作)才能访问GPU之前屈服。

所以总之,没有这种策略不能适用于任何当前的CUDA版本或硬件。

+0

我正在使用CUDA 5.5。它是否支持在单个GPU上同时执行多个CUDA上下文? – Tariq

+0

我在主机上创建两个独立的线程,并使用驱动程序API创建CUDA上下文。这些上下文在CUDA 5.5中同时执行。 – Tariq

6

一次只能在GPU上有一个上下文。实现所需的并行性的一种方法是使用CUDA流。您可以在上下文中创建16个流,并按名称启动memcopies和kernel到流中。您可以在以下网址快速使用流媒体会议阅读更多内容:http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf。完整的API参考资料位于CUDA工具包手册中。 CUDA 4.2手册可在http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf获得。