来自CUDA C编程指南:
线程块的线程在一个线程上并发执行 多处理器,多个线程块可以同时执行 一个多处理器。当线程块终止时,新块就是 在腾空的多处理器上发布。
现在,假设我有很多(例如1000个)每个少数线程的块(例如4个),并且每个线程使用很少的寄存器,以便多个线程可以一起运行。
我想知道,如果经过例如32个线程,8个块实际上将一起运行以填充扭曲,或者如果这不会发生。
阅读上面的引文之后,我的猜测是,如果要执行的指令对于warp中的所有线程都是相同的,而不管线程所在的块是什么,那么可能会发生 例如,来自8个街区的32个线程恰好具有相同的程序计数器。)
但也许我完全错了。所以我想更好地了解如果块大小小于warp大小会发生什么。
答案 0 :(得分:3)
不会发生。 warp中的线程总是来自同一个块。
从编程指南,threads into warps:
的汇编块被分割成warp的方式总是一样的;每个warp包含连续的,增加的线程ID的线程,第一个warp包含线程0.线程层次结构描述线程ID如何与块中的线程索引相关。
答案 1 :(得分:2)
每个warp都是某个threadblock所独有的,所以在你的例子中,如果你有一个8个线程的线程块,那么将分配整个warp(32个线程)的资源,并执行整个warp;唯一的区别是只允许前8个线程进行写操作,其余的线程将被屏蔽掉。 不可能在多个线程块之间共享warp。