来自32块的32个线程是否会被安排为warp?

时间:2012-12-04 02:47:12

标签: cuda

据我所知,在CUDA中,同一块中的32个相邻线程将被安排为warp。但我经常发现一些教程CUDA代码有多个块,每个块有1个线程。在这个模型中,来自32块的32个线程是否会被安排为warp?如果没有,我可以说这个模型不如每个块组织成32个线程一样有效吗?谢谢!

2 个答案:

答案 0 :(得分:6)

不,来自不同块的线程无法在同一个warp中进行调度。如果仅使用单个线程创建线程块网格,则肯定无法从计算机获得完整性能。它的效率低于每块32个(或32的整数倍)线程。例如,Fermi SM具有可以使用的32个经线。如果您正在调度单个线程的块,那么在任何给定时间,这32个通道中只有一个可以使用。

线程有一个线程ID(threadIdx内置变量),它在一个块中定义(并且仅对其唯一)。

C编程指南的硬件多线程部分提供了a formula which defines the total number of warps in a single block

答案 1 :(得分:0)

还有一点需要补充。 CUDA中的计算始终通过warp发生,所以即使你为每个块分配少于32个线程(1,2..8,16),也会发生warp(32个线程)的计算,资源停止对于该块的32个线程。

如果要分配32个块,每个块有一个线程,则需要停止32X32线程的资源。如果可以,请避免这种情况。