每个SM的核心数量和CUDA中每个块的线程数

时间:2015-05-26 16:04:20

标签: cuda

随着NVIDIA GPU逐渐发展每个SM变化的核心数量:在Fermi中我们有32个,但在Maxwell中,根据白皮书,这个数字是128。所以,我的问题如下:

  • 使用块创建网格是否更好,每个包含128个线程?这样的代码会运行得更快吗?
  • 术语" warp"保持不变,32个线程?
  • 在一个名为" CUDA概述"的演讲中。作者:Cliff Woolley我读到每个Fermi SM拥有2个warp调度程序,它们能够同时维护"最多1536个线程"。考虑到我们有32个核心,这怎么可能?他的意思是,每个可以在队列中等待48个块的32个线程以占用核心,所以它的32 * 48 = 1536?

1 个答案:

答案 0 :(得分:2)

  

使用块创建网格是否更好,每个包含128个线程?这样的代码会运行得更快吗?

最佳块大小取决于问题。您的块大小是经线大小的倍数的想法。其他因素包括占用率和共享内存使用情况。

  

术语" warp"保持不变,32个线程?

到目前为止,NVIDIA指定的每个体系结构的warp大小都为32个线程,但编程模型并未保证这一点。

  

在一个名为" CUDA概述"的演讲中作者:Cliff Woolley我读到每个Fermi SM拥有2个warp调度程序,它们能够同时维护"最多1536个线程"。考虑到我们有32个核心,这怎么可能?他的意思是,每个可以在队列中等待48个块的32个线程以占用核心,所以它的32 * 48 = 1536?

GPU通过超额认购工作。它们需要每个核心不止一个线程才能有效运行。 GPU可以在零开销之间切换线程,因此通过超额预订内核,您可以通过在下一个时钟周期从不同线程向同一内核发出指令来保持内核忙碌。