我正在测试CUDA占用设备,我故意尝试了一个 block 有一个线程。电子表格给了我
Active Threads per Multiprocessor:32
Active Warps per Multiprocessor:1
我明白为什么warps
的数量是1,但期望每个SM
的事件线程
数量为1。这是否意味着,将生成扭曲,其中 31 个结果不会未提交。我怀疑情况确实如此,但想确认这一点。
干杯
最佳答案
当今 GPU 中调度的基本单位是warp,而不是线程。因此,无论您只指定一个线程还是全部指定 32 个线程,warp 都会以相同的方式用于调度目的。
在这种情况下,我想说“事件线程”是指与事件扭曲相关的所有线程。其中一些线程可能不执行任何操作,具体取决于您的 block 配置和/或实际线程代码,但尽管如此,这些线程仍参与计划的扭曲。
是的,如果您只想运行一个线程,它就需要整个扭曲。
这就是网格配置在任一位置都有 1 的原因之一:
my_kernel<<<N, 1>>>();
或
my_kernel<<<1,N>>>();
GPU 资源的使用效率将会很低。
关于cuda - 未满扭曲中的事件线程数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21995907/