CUDA核心与线程数

时间:2013-06-07 14:39:04

标签: architecture cuda hardware

我对NVidia GPU中核心数量,SMP数量和最大线程数量之间的关系感到困惑。笔记本电脑GT650m的设备属性显示384个内核,2个SMP,每个SMP有1024个线程。

这些数字如何相互关联和扭曲?我假设(可能不正确)每个SMP有192个核心,但这不是1024的因素。如果每个核心运行32个线程的warp,我预计每个SMP会有32 * 192个线程,或者2 ^ 5 *(2 ^ 7 + 2 ^ 6),或4096 + 2048 = 6142.

我错过了什么?

1 个答案:

答案 0 :(得分:11)

我认为您应该深入了解cuda中的内核安排。

有两个重要的尺寸:每个块的线程

每个都安排在一个SM上,然后切成warp。 因此块具有共享内存,只能在块内访问, 因为它位于SM内存上。每个SM的的数量取决于设备限制和占用率计算。 CC 1.0-2.x每SM的最大块数为8,CC 3.x为16。

每个每个块都有一定数量的线程。线程是分开的 经线和经线可以以任意顺序运行,仅由经线决定 - 调度程序是SM。

现在,您的卡在2个SM上总共有384个核心,每个核心有192个核心。 CUDA核心计数表示每个周期可以执行的单精度浮点或整数线程指令的总数。在任何计算中都不要考虑CUDA核心。

最大线程数因计算能力而异。在给定足够的寄存器和warp插槽的情况下,CC2.0-3.x支持每个块最多1024个线程。 Warp静态分配给warp调度程序。每个SM的warp调度程序的数量对于CC 1.x为1,对于CC 2.x为2,对于CC 3.x为4。

如果您的应用程序没有执行并发内核,那么要使用每个SM,gridDim应该具有> = SM块数。

要让GTX650m充分利用您的计算能力,您应至少拥有两个模块(否则只有一个模块) 阻止你只能使用一个SM)。另一方面,如果你想安排10240个线程,你可以轻松地安排10个块,每个1024个线程。