对 nvidia GPU 上的计算单元和预期内核的混淆

Posted

技术标签:

【中文标题】对 nvidia GPU 上的计算单元和预期内核的混淆【英文标题】:Confusion over compute units and expected cores on nvidia GPU 【发布时间】:2015-09-09 15:34:13 【问题描述】:

我有一个nvidia GTX 750 Ti card,它被宣传为具有 640 个 CUDA 内核。实际上,nvidia 设置应用程序也报告了这一点。

我正在尝试使用这张卡在 Linux 上进行 OpenCL 开发。现在,我从 OpenCL 环境中报告(通过 PyOpenCL,如果有区别的话)计算单元的数量是 5。我的理解是 nvidia 设备上的一个计算单元映射到一个多处理器,我理解为 32 SIMD单位(我假设是 CUDA 核心)。

显然,5 * 32 不是 640(而是预期值的四分之一)。

关于 nvidia 上工作单元的含义,我是否遗漏了什么?该卡还驱动图形输出,这将使用一些计算能力 - 是否有一部分处理能力保留给图形使用? (如果是这样,我可以改变这个吗?)。

【问题讨论】:

【参考方案1】:

NVIDIA 有一个whitepaper for the NVIDIA GeForce GTX 750 Ti,值得一读。

OpenCL 计算单元转换为 NVIDIA GPU 术语中的流式多处理器。 GPU 中的每个 Maxwell SMM 包含 128 个处理元素(“CUDA 核心”) - 和 128*5 = 640。设备的 SIMD 宽度仍然是 32,但每个计算单元 (SMM) 可以同时向四个不同的 warp 发出指令。

【讨论】:

很有用啊!所以我从那时的理解是,在具有这种架构的工人池周围可以更好地共享资源——该图显示了所有四个多处理器共有的 L1 缓存等。这是否意味着更大的工作组映射到所有四个多处理器,或者多个工作组可以在同一个 SMM 上同时运行(访问相同的资源)?很难看出如何使用 OpenCL 进行编程,所以我想是前者。 两者兼而有之——这种情况已经存在很长时间了(即使在每个 SM 只有 32 个 CUDA 核心的旧 Fermi SM 上也是如此)。在同一个 SM 上调度多个工作组是保持处理元素忙碌而其他工作项正在等待数据到达的关键技术。 是的,但是是否可以编写一对工作组,以便两者都可以访问相同的缓存?也就是说,工作组是紧密耦合的。 不,这种资源共享需要在工作组内进行。 @Henry Does this mean larger work groups are mapped across all four multiprocessors。我怀疑您的意思是“所有四个处理块”,在这种情况下是的,正如@jprice 指出的那样。如果您确实是指 SM,那么不,工作组属于单个 SM,并且只会存在于该 SM 上。

以上是关于对 nvidia GPU 上的计算单元和预期内核的混淆的主要内容,如果未能解决你的问题,请参考以下文章

[GPU硬件架构]NVIDIA Ampere 架构:第三代 Tensor Core

尝试在 AWS EMR 中获得 GPU 支持时出现错误“一个 NVIDIA 内核模块 'nvidia' 似乎已加载到您的内核中”

如何使用 python 和 numba 在 RTX GPU 中对 NVIDIA 的张量核心进行编程?

7.数据分析 --在MATLAB中通过Nvidia GeForce GPU加速深度学习计算

CUDA基础:操作流程与kernel概念

为啥在使用 cudaMallocManaged 时 NVIDIA Pascal GPU 运行 CUDA 内核速度很慢