硬件和已用内存上的最大 GPU 线程数

Maximum number of GPU Threads on Hardware and used memory

我已经阅读了几个关于 GPU 容量的线程,并且理解块和线程的概念必须与物理硬件分开。尽管每个块的最大线程数为 1024,但对可以使用的块数没有限制。然而,由于流处理器的数量是有限的,因此必须有一个物理限制。编写 GPU 程序后,我会对评估 GPU 的已用容量感兴趣。为此,我必须知道理论上一次可以在硬件上启动多少个线程。我的显卡是 Nvidia Geforce 1080Ti,所以我有 3584 个 CUDA 内核。据我了解,每个 Cuda 内核执行一个线程,因此理论上,我每个周期可以执行 3584 个线程。这是正确的吗?

另一个问题是关于内存的。我安装并使用了 nvprof 来深入了解所使用的内核。那里显示的是例如使用的寄存器的数量。我使用 cuda.to_device(在 Python Numba 中)将我的数组传输到 GPU,据我所知,这些数组然后驻留在全局内存中。我如何找出这个全局内存有多大?是否等于 DRAM 大小?

提前致谢

我将专注于问题的第一部分。第二个应该是它自己的独立问题。

CUDA 内核不会 1 对 1 映射到线程。它们更像是多标量 CPU 中的端口。多个线程可以在不同的时钟周期向同一个 CUDA 内核发出指令。有点像 CPU.

中的超线程

您可以在第 K Compute Capabilities compared to the table Table 3. Throughput of Native Arithmetic Instructions 章的文档中查看关系和数字。根据您的体系结构,例如您的卡(计算能力 6.1)每个 SM 可能有 2048 个线程,每个时钟周期有 128 个 32 位浮点运算。这意味着您有 128 个 CUDA 核心,最多由 2048 个线程共享。

在一代 GPU 中,线程和 CUDA 内核的绝对数量仅与多处理器 (SM) 的数量成比例。 TechPowerup's excellent GPU database 为您的卡记录 28 条 SM,除非我做错了什么,否则应该给您 28 * 2048 个线程。