unfull warp中活动线程的数量?

时间:2014-02-24 18:25:32

标签: cuda nvidia

我正在测试CUDA占用设备,故意我尝试了一个拥有一个线程的块。电子表格给了我

Active Threads per Multiprocessor:32
Active Warps per Multiprocessor:1

我理解为什么warps的数量为1,但预计每threads的有效SM数为1。这是否意味着,将生成一个warp,其中31个结果将不会被提交。我怀疑是这样,但想确认一下。

干杯

2 个答案:

答案 0 :(得分:2)

今天GPU的基本调度单位是 warp ,而不是线程。因此,无论您是仅指定一个线程还是全部32个线程,都会以相同的方式将warp用于调度目的。

在这种情况下,我会说“Active Threads”指的是与Active Warps相关联的所有线程。其中一些线程可能无法执行任何操作,具体取决于您的块配置和/或实际线程代码,但是这些线程仍然涉及计划的warp。

是的,如果你想只运行一个线程,它需要一个完整的warp。

这就是为什么网格配置在任一位置都有1的原因之一:

my_kernel<<<N, 1>>>();

my_kernel<<<1,N>>>(); 

在使用GPU资源方面效率低下。

答案 1 :(得分:0)

我创建了一个简单的测试程序,其中我声明了32个字长的数组。内核代码很简单d_a [tid] = 2 * [d_tid];我只在线程上启动内核。在显示结果时,我得到d_a [0]只能正确缩放...访问我的数组的其他元素显示错误。这告诉我确实安排了一个warp但它只有一个线程活动而不是32因此我的问题和我的困惑