NVIDIA 架构:CUDA 线程和线程块
Posted
技术标签:
【中文标题】NVIDIA 架构:CUDA 线程和线程块【英文标题】:NVIDIA Architecture: CUDA threads and thread blocks 【发布时间】:2020-08-29 01:19:55 【问题描述】:这主要来自《计算机体系结构:定量方法》一书。
这本书指出 32 个线程组在所谓的线程块中分组并一起执行,但显示了一个函数调用的示例,每个线程块有 256 个线程,并且 CUDA 的文档指出您最多可以有每个线程块 512 个线程。
函数调用如下所示:
int nblocks = (n+255)/256
daxpy<<<nblocks,256>>>(n,2.0,x,y)
谁能解释一下线程块的结构?
【问题讨论】:
docs.nvidia.com/cuda/cuda-c-programming-guide/… 您正在混合扭曲和黑色尺寸的概念。在上面链接的官方编程指南中阅读有关 CUDA 执行模型的信息,并查看this discussion 以及在互联网上很容易找到的许多其他讨论。此外,每个块最多可以有 1024 个线程。查看deviceQuery 打印输出的限制。 【参考方案1】:我认为这个问题有点不清楚。我将强调线程扭曲和线程块之间的区别,我认为这很重要,希望它有助于回答真正的问题。
每个 warp 的线程数由硬件定义。通常,线程扭曲是 32 个线程宽(NVIDIA),因为 GPU 上的 SIMD 单元正好有 32 个执行通道,每个通道都有自己的 ALU(据我所知,情况并非总是如此;有些架构只有 16 个通道即使螺纹经线是 32 宽)。
线程块的大小是用户定义的(尽管受硬件限制)。硬件仍将在 32 宽的线程扭曲中执行线程代码。某些 GPU 资源,例如共享内存和同步,不能在 GPU 上的任何两个线程之间任意共享。但是,如果线程属于同一个线程块,GPU 将允许线程共享更大的资源子集。这就是为什么使用线程块背后的主要思想。
【讨论】:
谢谢。我遇到的问题是了解线程块和扭曲之间的区别。以上是关于NVIDIA 架构:CUDA 线程和线程块的主要内容,如果未能解决你的问题,请参考以下文章
如何在 VS 2010 中使用 Nvidia NSight 查看 CUDA 线程值?