我已经使用CUDA几周了,但是我对块/线程/线程的分配有一些疑问。
首先,我想了解我是否明白这些事实:
GPU有一些可以并行工作的流处理器。
每个SM都有块,每个块都有自己的共享内存。
内部模块具有CUDA内核。
在每个SM中,我们还具有Warp调度程序。
每个经线包含32个线程。并在连续工作的方块中扭曲。 这意味着一个扭曲应该完成,然后下一个扭曲可以开始。
现在我的主要问题是:
假设我们有两种不同的情况:
首先,每个块有32个线程(1个扭曲),并且有16384个对象(或操作数)。
第二,每个块有64个线程(2个扭曲),对象数量相同。
为什么第一个要花更多时间运行程序?(其他条件相同,即使每个块有128个线程,它也比这两个要快)
预先感谢