0

来自 CUDA C 编程指南:

一个线程块的线程在一个多处理器上并发执行,多个线程块可以在一个多处理器上并发执行。当线程块终止时,新的块在空出的多处理器上启动。

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

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

在阅读了上面的引用之后,我的猜测是,如果要执行的指令对于 warp 中的所有线程都相同,而不管线程所在的块(在这种情况下,8 个块中的 32 个线程恰好具有相同的程序计数器)。

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

4

2 回答 2

4

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

从编程指南中,关于将线程组装成经纱

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

于 2013-05-21T13:23:38.693 回答
2

每个 warp 都专属于某个线程块,因此,在您的示例中,如果您有一个具有 8 个线程的线程块,则将分配整个 warp(32 个线程)的资源并执行整个 warp;唯一的区别是只允许前 8 个线程进行写入,其余线程将被屏蔽。在多个线程块之间共享一个扭曲是不可能的。

于 2013-05-21T13:23:03.760 回答