9

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

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

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

4

2 回答 2

6

GPU 上一次只能有一个上下文。实现所需并行性的一种方法是使用 CUDA 流。您可以在上下文中创建 16 个流,并按名称将 memcopies 和内核启动到流中。您可以在以下网址阅读有关使用流的快速网络研讨会的更多信息: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 获得

于 2012-09-06T18:45:32.583 回答
4

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

所以总而言之,这个策略不适用于任何当前的 CUDA 版本或硬件。

于 2012-09-06T20:18:53.943 回答