首页 > 解决方案 > 是否所有线程在 CUDA 中使用相同数量的寄存器?

问题描述

if (threadIdx.x < 128) {
  float reg[32];
  // do something with reg...
} else {
  return;
}

假设每个块有 256 个线程,但只有一半的线程在使用寄存器,而另一半在做其他事情(在这种情况下什么都没有)。我的问题是,这个线程块将使用多少个寄存器(仅考虑reg)?32 * 256 还是 32 * 128 ?

标签: parallel-processingcudanvidia

解决方案


所有线程都使用相同数量的寄存器。

这是一个编译时决策,该决策与运行时行为无关,编译器确定网格中所有线程(即内核启动)的寄存器使用情况,而不是以任何方式决定每个线程。在运行时,必须为每个线程分配必要数量的寄存器,无论它们是否“使用”它们。见这里

您的问题的答案是,无论线程“做什么”,每个块的寄存器数等于每个线程的寄存器数(在编译时确定)乘以每个块的线程数。

所以在你的例子中,它可能是32*256,不是32*128


推荐阅读