17

我要向那些(几乎)不知道 GPU 工作原理的人做一个演示。我认为说 GPU 有 1000 个内核而 CPU 只有 4 到 8 个内核是无稽之谈。但我想给我的听众一个比较的元素。

在使用 NVidia 的 Kepler 和 AMD 的 GCN 架构几个月后,我很想将GPU“核心”CPU 的 SIMD ALU进行比较(我不知道他们在英特尔是否有这样的名字)。公平吗?毕竟,在查看汇编级别时,这些编程模型有很多共同点(至少对于 GCN,请查看ISA 手册p2-6)。

这篇文章指出,Haswell 处理器每个周期可以执行 32 次单精度操作,但我想有流水线或其他事情发生以实现该速率。用 NVidia 的话来说,这个处理器有多少个 Cuda 内核对于 32 位操作,我会说每个 CPU 内核 8 个,但这只是基于 SIMD 宽度的猜测。

当然,在比较 CPU 和 GPU 硬件时还有很多其他的事情需要考虑,但这不是我想要做的。我只需要解释这件事是如何工作的。

PS:非常感谢所有指向CPU硬件文档或 CPU/GPU 演示文稿的指针!

编辑: 感谢您的回答,遗憾的是我只能选择其中一个。我标记了Igor 的答案,因为它最符合我最初的问题,并给了我足够的信息来证明为什么这种比较不应该走得太远,但是CaptainObvious 提供了非常好的文章

4

4 回答 4

12

在进行这种比较时,我会非常谨慎。毕竟,即使在 GPU 世界中,“核心”一词也因上下文而异:新的 AMD GCN 与旧的 VLIW4 完全不同,而旧的 VLIW4 本身与 CUDA 核心完全不同。
除此之外,如果你和 CPU 做一个小小的比较,你会给你的听众带来更多的困惑而不是理解,仅此而已。如果我是你,我仍然会进行更详细(仍然可以快速)的比较。
例如,习惯于 CPU 并且对 GPU 了解甚少的人可能想知道 GPU 为何如此昂贵(在 CPU 世界中)却可以拥有如此多的寄存器。这篇文章的末尾给出了对该问题的解释,以及更多 GPU 与 CPU 的比较。

一篇文章通过解释 GPU 的工作原理以及它们如何演变并展示与 CPU 的差异,对这两种处理单元进行了很好的比较。它涉及数据流、内存层次结构等主题,还涉及 GPU 对哪些应用程序有用。毕竟,GPU 可以开发的所有功能只能(有效地)用于某些类型的问题。
就个人而言,如果我不得不做一个关于 GPU 的演讲并且有可能只提到 CPU的话,那就是:展示 GPU 可以有效解决的问题与 CPU 可以更好地处理的问题。
作为奖励,即使它与您的演示文稿没有直接关系,这里有一篇文章这将 GPGPU 放在了正确的角度,表明某些人声称的某些加速被高估了(这与我的最后一点有关 :))

于 2013-07-02T14:33:00.330 回答
11

很笼统地说,说一个 Haswell 内核有大约 16 个 CUDA 内核并不是完全没有道理的,但你绝对不想把这个比较过分。您可能希望谨慎地在演示文稿中直接发表该声明,但我发现将 CUDA 核心视为与标量 FP 单元有些相关是很有用的。

如果我解释一下为什么 Haswell 可以在每个周期执行 32 个单精度运算,这可能会有所帮助。

  • 每个 AVX/AVX2 指令中执行 8 个单精度运算。在编写将在 Haswell CPU 上运行的代码时,您可以使用在 256 位向量上运行的 AVX 和 AVX2 指令。这些 256 位向量可以表示 8 个单精度 FP 数、8 个整数(32 位)或 4 个双精度 FP 数。

  • 每个周期每个内核可以执行 2 条 AVX/AVX2 指令,尽管对可以配对的指令有一些限制。

  • 融合乘加 (FMA) 指令在技术上执行 2 个单精度运算。FMA 指令执行“融合”操作,例如 A = A * B + C,因此可以说每个标量操作数有两个操作:乘法和加法。

这篇文章更详细地解释了以上几点:http ://www.realworldtech.com/haswell-cpu/4/

在总记账中,一个 Haswell 内核每个周期可以执行 8 * 2 * 2 次单精度运算。由于 CUDA 内核也支持 FMA 操作,因此在将 CUDA 内核与 Haswell 内核进行比较时,您不能计算 2 的因子。

开普勒 CUDA 内核有一个单精度浮点单元,因此每个周期可以执行一个浮点运算:http ://www.nvidia.com/content/PDF/kepler/NVIDIA-Kepler-GK110-Architecture-白皮书.pdfhttp://www.realworldtech.com/kepler-brief/

如果我把幻灯片放在一起,我会用一节解释 Haswell 每个周期可以执行多少次 FP 操作:上面的三点,再加上你有多个内核和可能的多个处理器。而且,我将有另一部分解释 Kepler GPU 每个周期可以执行多少次 FP 操作:每个 SMX 192,并且您在 GPU 上有多个 SMX 单元。

PS.:我可能会说显而易见的,但只是为了避免混淆:Haswell 架构还包括一个集成 GPU,它具有与 Haswell CPU 完全不同的架构。

于 2013-07-02T17:49:41.640 回答
3

我完全同意 CaptainObvious 的观点,尤其是提出 GPU 可以有效解决的问题与 CPU 可以更好地处理的问题将是一个好主意。

我喜欢比较 CPU 和 GPU 的一种方法是通过它们可以执行的操作/秒数。但当然不要将一个 cpu 核心与多核 gpu 进行比较。

一个 SandyBridge 内核可以执行 2 个 AVX 操作/周期,即处理 8 个双精度数字/周期。因此,具有 16 个 Sandy-Bridge 内核、时钟频率为 2.6 GHz 的计算机的峰值功率为 333 Gflops。

一个K20计算模块GK110的峰值为1170 Gflops,即3.5倍以上。在我看来这是一个公平的比较,应该强调的是,在 CPU 上(某些应用程序达到峰值的 80%-90%)比在 GPU 上更容易达到峰值性能(我知道的最好的情况是不到 50%峰值)。

因此,总结一下,我不会深入讨论架构细节,而是陈述一些切变数,认为 GPU 上的峰值通常遥不可及。

于 2013-07-02T17:33:54.113 回答
1

将 GPU 与矢量化 CPU 单元进行比较更为公平,但是如果您的听众对GPU的工作原理一无所知,那么假设他们对矢量化 SSE 指令具有相似的知识似乎是公平的。

对于像这样的观众来说,指出高层次的差异很重要,比如 gpu 上的“核心”块如何共享调度程序和寄存器文件。

我会参考GTC Kepler 架构概述,以更好地了解 Kepler 架构的外观。 如果您想坚持“gpu core”的想法,这也是两者之间可以合理掌握的比较。

于 2013-07-02T18:52:34.907 回答