CUDA核心与线程数

3Da*_*ave 8 architecture hardware cuda

我对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.

我错过了什么?

Mic*_*ael 11

我想你应该深入研究cuda中的内核调度.

有两个重要的大小:每个块的线程

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

每个每个具有一定数量的线程.线程被划分为warp,warp可以以任意顺序运行,仅由warp-scheduler和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个线程.