不同的多处理器上的不同线程

时间:2010-09-06 05:15:48

标签: cuda

是否可以在不同的多处理器上运行不同的线程?类似于CPU核心?

假设我有2个大数组a,b,我想计算总和和差异。假设我的设备上有2个多处理器。是否可以在2个不同的多处理器上同时运行两个内核函数(计算总和和差异)?

2 个答案:

答案 0 :(得分:2)

使用计算总和和差异的例子,如果同时计算两者(即在同一个内核中),可能会实现最佳性能。

假设由于某种原因这是不可能的,那么如果您的阵列非常大,那么最佳性能可能是使用整个GPU(即多个多处理器)来计算结果,在这种情况下它并不重要你一个接一个地做。

对于上述两种情况,我强烈建议您查看SDK中的 reduction 示例,它会引导您完成一个简单的实现,并提供一个包含良好文档的非常快速的版本。

说完了所有这些,如果工作量足够,你不会完全利用整个GPU进行一次计算,那么有两种方法可以在不同的计算上运行不同的计算多处理机:

  1. 使用“Concurrent Kernels”,其中多个内核同时在同一GPU上运行。有关更多信息,请参阅CUDA编程指南并查看SDK中的 concurrentKernels 示例,实质上,您手动告诉调度程序两者之间没有依赖关系(通过使用CUDA流),这允许使用thenm同时执行。
  2. 切换blockIdx以选择要执行的代码。
  3. 如果你的硬件支持它,那么第一个更为可取(你需要Compute Capability 2.0或更高版本),因为它更易于阅读和维护。

答案 1 :(得分:0)

是的,使用费米设备和多个流。