parallel-processing - 是否所有线程在 CUDA 中使用相同数量的寄存器?
问题描述
if (threadIdx.x < 128) {
float reg[32];
// do something with reg...
} else {
return;
}
假设每个块有 256 个线程,但只有一半的线程在使用寄存器,而另一半在做其他事情(在这种情况下什么都没有)。我的问题是,这个线程块将使用多少个寄存器(仅考虑reg)?32 * 256 还是 32 * 128 ?
解决方案
所有线程都使用相同数量的寄存器。
这是一个编译时决策,该决策与运行时行为无关,编译器确定网格中所有线程(即内核启动)的寄存器使用情况,而不是以任何方式决定每个线程。在运行时,必须为每个线程分配必要数量的寄存器,无论它们是否“使用”它们。见这里。
您的问题的答案是,无论线程“做什么”,每个块的寄存器数等于每个线程的寄存器数(在编译时确定)乘以每个块的线程数。
所以在你的例子中,它可能是32*256
,不是32*128
。
推荐阅读
- gdb - 为什么 GDB 没有制表符完成 mmx 寄存器名称(mm0-mm7)
- awk - awk 函数来计算数组的中位数?
- windows - 使用 Get-ADOrganizationalUnit 创建新组织单位时出现“NullReference Exception”错误]
- ios - 如何使用 swiftui 在导航栏中放置圆形进度视图?
- python - 在python的RDD中使用转换将word转换为(word,1)的键/值对
- python - 已收到 在 Python 中找不到合适的 TLS CA 证书包
- python - Python - 矩阵单位乘法
- bash - 我应该在 docker 环境中将输入文件放在哪里?
- vba - 为什么在 VBA 中运行以下公式时出现“类型不匹配”错误?
- image-processing - 如何使用 AI 在另一个图像中查找图像