Cuda 未完全扭曲中的活动线程数?

Cuda 未完全扭曲中的活动线程数?,cuda,nvidia,Cuda,Nvidia,我当时正在测试CUDA占用设备,故意尝试一个块有一个线程。电子表格给了我 Active Threads per Multiprocessor:32 Active Warps per Multiprocessor:1 我理解为什么扭曲的数量为1,但预期每个SM的活动线程数为1。这是否意味着,将生成一个扭曲,其中31个结果不会被取消提交。我对此表示怀疑,但我想证实这一点 干杯在今天的GPU中,调度的基本单位是扭曲,而不是线程。因此,无论您是只指定一个线程,还是全部指定32个线程,都会以相同的方式为

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

Active Threads per Multiprocessor:32
Active Warps per Multiprocessor:1
我理解为什么
扭曲的数量为1,但预期每个
SM的活动
线程数为1。这是否意味着,将生成一个扭曲,其中31个结果不会被取消提交。我对此表示怀疑,但我想证实这一点


干杯

在今天的GPU中,调度的基本单位是扭曲,而不是线程。因此,无论您是只指定一个线程,还是全部指定32个线程,都会以相同的方式为调度目的使用扭曲

在本例中,我想说“活动线程”是指与活动扭曲关联的所有线程。根据您的块配置和/或实际线程代码,其中一些线程可能什么也不做,但这些线程仍与计划的扭曲有关

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

这是网格配置在两个位置都有1的原因之一:

my_kernel<<<N, 1>>>();
myu内核();

myu内核();

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

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

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