Cuda GPU中的网格、块和线程数

Cuda GPU中的网格、块和线程数,cuda,gpu,nvidia,Cuda,Gpu,Nvidia,我是CUDA和GPU架构的新手。 这是我做的 结果我只得到了网格的尺寸。我知道每个网格都有3个维度,有那么多的块。在每个块中都有xyz数量的线程。我的问题是一个GPU中有多少个网格(或者它是独立于GPU的),如果是这样,我如何找到它,以及如何处理需要的线程数超过这些数量的情况?CUDA中的网格就像一个工作空间。在查询代码中,您得到的维度,即块中维度0的维度,是指该块中的线程数。在现代GPU中,在大多数情况下为1024*1024*64。栅格尺寸显示x、y和z尺寸中的块数。网格就像一个工作区,您可以

我是CUDA和GPU架构的新手。 这是我做的


结果我只得到了网格的尺寸。我知道每个网格都有3个维度,有那么多的块。在每个块中都有xyz数量的线程。我的问题是一个GPU中有多少个网格(或者它是独立于GPU的),如果是这样,我如何找到它,以及如何处理需要的线程数超过这些数量的情况?

CUDA中的网格就像一个工作空间。在查询代码中,您得到的维度,即块中维度0的维度,是指该块中的线程数。在现代GPU中,在大多数情况下为1024*1024*64。栅格尺寸显示x、y和z尺寸中的块数。网格就像一个工作区,您可以在运行_; global _;函数时选择所需的块数和每个块的线程数

网格有效地表示一次内核启动,即它包含为一次特定内核启动运行的所有块(以及线程)。对于块和网格的尺寸有一些限制,这些限制主要是特定于体系结构的(一般来说,对于同一代的所有GPU模型,它们基本上是相同的)。您可以找到所有特定于设备的限制和功能的详细列表

如何选择块维度主要取决于获得良好的内存访问模式(以优化合并全局内存访问的方式分配工作)、哪些线程组可以通过共享内存进行通信以及实现所需占用之间的权衡

虽然最大块和网格大小(尽管后者几乎不应该成为问题)将因此影响您编写和运行CUDA内核的方式,但最大网格数通常仅在您使用CUDA内核时才会引起关注。如果您的内核没有完全占用GPU,那么驱动程序也可能会与内核执行重叠,但是,您实际上无法对其进行显式控制