NVIDIA体系结构:CUDA线程和线程块

NVIDIA体系结构:CUDA线程和线程块,cuda,Cuda,这主要来自《计算机体系结构:定量方法》一书 这本书指出,32个线程组成的组在所谓的线程块中被分组并一起执行,但展示了一个示例,其中的函数调用每个线程块有256个线程,CUDA的文档说明每个线程块最多可以有512个线程 函数调用如下所示: int nblocks = (n+255)/256 daxpy<<<nblocks,256>>>(n,2.0,x,y) int nblocks=(n+255)/256 daxpy(n,2.0,x,y) 有人能解释一下线程块

这主要来自《计算机体系结构:定量方法》一书

这本书指出,32个线程组成的组在所谓的线程块中被分组并一起执行,但展示了一个示例,其中的函数调用每个线程块有256个线程,CUDA的文档说明每个线程块最多可以有512个线程

函数调用如下所示:

int nblocks = (n+255)/256
daxpy<<<nblocks,256>>>(n,2.0,x,y)
int nblocks=(n+255)/256
daxpy(n,2.0,x,y)

有人能解释一下线程块是如何构造的吗?

我认为这个问题有点不清楚。我将强调线程扭曲和线程块之间的区别,我认为这很重要,希望它有助于回答任何真正的问题

每个扭曲的线程数由硬件定义。通常,线程扭曲是32个线程宽(NVIDIA),因为GPU上的SIMD单元正好有32个执行平面,每个平面都有自己的ALU(据我所知,情况并非总是这样;有些架构只有16个平面,即使线程扭曲是32个宽)


线程块的大小由用户定义(尽管受硬件限制)。硬件仍将以32宽的线程扭曲执行线程代码。某些GPU资源,如共享内存和同步,不能在GPU上的任何两个线程之间任意共享。但是,如果线程属于同一线程块,GPU将允许它们共享更大的资源子集。这就是为什么要使用螺纹块的主要原因。

您混合了翘曲和黑色尺寸的概念。阅读上面链接的官方编程指南中有关CUDA执行模型的内容,并在互联网上轻松找到see和许多其他讨论。此外,每个块最多可以有1024个线程。请参阅打印输出的限制。谢谢。我遇到的问题是理解螺纹块和翘曲之间的区别。