可以在同一个warp中执行两个块吗?

时间:2013-05-21 13:05:07

标签: cuda

来自CUDA C编程指南:

  

线程块的线程在一个线程上并发执行   多处理器,多个线程块可以同时执行   一个多处理器。当线程块终止时,新块就是   在腾空的多处理器上发布。

现在,假设我有很多(例如1000个)每个少数线程的块(例如4个),并且每个线程使用很少的寄存器,以便多个线程可以一起运行。

我想知道,如果经过例如32个线程,8个块实际上将一起运行以填充扭曲,或者如果这不会发生。

阅读上面的引文之后,我的猜测是,如果要执行的指令对于warp中的所有线程都是相同的,而不管线程所在的块是什么,那么可能会发生 例如,来自8个街区的32个线程恰好具有相同的程序计数器。)

但也许我完全错了。所以我想更好地了解如果块大小小于warp大小会发生什么。

2 个答案:

答案 0 :(得分:3)

不会发生。 warp中的线程总是来自同一个块。

从编程指南,threads into warps

的汇编
  

块被分割成warp的方式总是一样的;每个warp包含连续的,增加的线程ID的线程,第一个warp包含线程0.线程层次结构描述线程ID如何与块中的线程索引相关。

答案 1 :(得分:2)

每个warp都是某个threadblock所独有的,所以在你的例子中,如果你有一个8个线程的线程块,那么将分配整个warp(32个线程)的资源,并执行整个warp;唯一的区别是只允许前8个线程进行写操作,其余的线程将被屏蔽掉。 不可能在多个线程块之间共享warp。