对于我的CUDA开发,我使用的是具有16个内核的机器,以及1个带有16个SM的GTX 580 GPU.对于我正在做的工作,我计划启动16个主机线程(每个核心1个),每个线程启动1个内核,每个线程包含1个块和1024个线程.我的目标是在16个SM上并行运行16个内核.这可能/可行吗?
我试图尽可能多地阅读关于独立上下文的内容,但似乎没有太多可用的信息.据我了解,每个主机线程都可以拥有自己的GPU上下文.但是,如果我使用独立的上下文,我不确定内核是否会并行运行.
我可以将所有16个主机线程中的所有数据读入一个巨型结构,并将其传递给GPU以启动一个内核.但是,复制太多会降低应用程序的速度.
小智 6
一次只能在GPU上有一个上下文.实现所需的并行性的一种方法是使用CUDA流.您可以在上下文中创建16个流,并按名称将内存和内核启动到流中.您可以在以下网站的快速网络研讨会中阅读更多内容:http://developer.download.nvidia.com/CUDA/training/StreamsAndConcurrencyWebinar.pdf.完整的API参考在CUDA工具包手册中.可以在http://developer.download.nvidia.com/compute/DevZone/docs/html/C/doc/CUDA_Toolkit_Reference_Manual.pdf上找到CUDA 4.2手册.
虽然多线程应用程序可以在同一 GPU 上同时保存多个 CUDA 上下文,但这些上下文无法同时执行操作。当活动时,每个上下文都只能使用 GPU,并且必须在另一个上下文(可能包括使用渲染 API 或显示管理器的操作)访问 GPU 之前让出。
总之,这个策略不能与任何当前的 CUDA 版本或硬件一起使用。
| 归档时间: |
|
| 查看次数: |
3240 次 |
| 最近记录: |