繁体   English   中英

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

[英]Can two blocks be executed in the same warp?

从CUDA C编程指南中:

线程块的线程在一个多处理器上同时执行,而多个线程块可以在一个多处理器上同时执行 随着线程块的终止,新的块将在腾出的多处理器上启动。

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

我想了解一下,如果给定一个例如32个线程的扭曲,则实际上是否会同时运行8个块以填充该扭曲,或者是否不会发生这种情况。

阅读上述报价之后,我的猜测是,如果将被执行的指令是用于在经纱的所有线程,而与该线程(在这种情况下,块,从8个块32周的螺纹碰巧相同,这可能发生具有相同的程序计数器)。

但是也许我是完全错误的。 因此,我想更好地了解如果块大小小于扭曲大小会发生什么。

这不会发生。 经纱中的线程始终来自同一块。

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

块划分为扭曲的方式始终相同; 每个warp包含连续的,递增的线程ID的线程,而第一个warp包含线程0。ThreadHierarchy描述了线程ID与块中线程索引的关系。

每个warp都是某个线程块所独有的,因此,在您的示例中,如果您有一个带有8个线程的线程块,则将分配整个warp(32个线程)的资源,并执行整个warp。 唯一的区别是只允许前8个线程进行写操作,其余线程将被屏蔽。 无法在多个线程块之间共享扭曲。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM