为什么我们仍然使用 CPU 而不是 GPU?

为什么我们仍然使用 CPU 而不是 GPU?

在我看来,如今很多计算都是在 GPU 上完成的。图形处理显然是在 GPU 上完成的,但使用 CUDA 等技术、AI、哈希算法(比如比特币)和其他算法也是在 GPU 上完成的。为什么我们不能摆脱 CPU,单独使用 GPU?是什么让 GPU 比 CPU 快这么多?

答案1

TL;DR 答案:GPU 拥有比 CPU 多得多的处理器核心,但由于每个 GPU 核心的运行速度都比 CPU 核心慢得多,并且不具备现代操作系统所需的功能,因此它们不适合执行日常计算中的大多数处理。它们最适合执行视频处理和物理模拟等计算密集型操作。


通用图形处理器仍然是一个相对较新的概念。GPU 最初仅用于渲染图形;随着技术的进步,GPU 相对于 CPU 拥有大量内核,因此人们开发了 GPU 的计算能力,以便它们可以同时处理许多并行数据流,无论这些数据是什么。虽然 GPU 可以拥有数百甚至数千个流处理器,但它们的运行速度比 CPU 内核慢,功能也更少(即使它们是图灵完备并且可以编程来运行 CPU 可以运行的任何程序)。GPU 所缺少的功能包括中断和虚拟内存,而这两者都是实现现代操作系统所必需的。

换句话说,CPU 和 GPU 的架构截然不同,这使得它们更适合不同的任务。GPU 可以处理许多流中的大量数据,对它们执行相对简单的操作,但不适合对单个或几个数据流进行繁重或复杂的处理。CPU 在每个核心上的速度要快得多(以每秒指令数计算),并且可以更轻松地对单个或几个数据流执行复杂的操作,但无法同时高效地处理许多流。

因此,GPU 不适合处理无法显著受益于并行化或无法并行化的任务,包括许多常见的消费应用程序,如文字处理器。此外,GPU 使用完全不同的架构;必须专门为 GPU 编写应用程序才能使其工作,并且对 GPU 进行编程需要截然不同的技术。这些不同的技术包括新的编程语言、对现有语言的修改以及更适合将计算表示为由许多流处理器执行的并行操作的新编程范式。有关对 GPU 进行编程所需技术的更多信息,请参阅 Wikipedia 文章流处理并行计算

现代 GPU 能够执行矢量运算和浮点运算,最新的 GPU 卡能够处理双精度浮点数。CUDA 和 OpenCL 等框架支持为 GPU 编写程序,而 GPU 的性质使其最适合高度可并行化的操作,例如在科学计算中,一系列专用的 GPU 计算卡可以替代小型计算集群,例如NVIDIA Tesla 个人超级计算机拥有现代 GPU 且熟悉 Folding@home 的消费者可以使用它们来做出贡献GPU 客户端,它可以以非常高的速度进行蛋白质折叠模拟,并为项目贡献更多工作(请务必阅读常见问题解答首先,特别是与 GPU 相关的任务)。GPU 还可以使用 PhysX 在视频游戏中实现更好的物理模拟,加速视频编码和解码,并执行其他计算密集型任务。GPU 最适合执行这些类型的任务。

AMD 率先设计出一种处理器,称为加速处理单元 (APU)它将传统的 x86 CPU 内核与 GPU 结合在一起。这种方法使图形性能大大优于主板集成显卡解决方案(尽管无法与更昂贵的独立 GPU 相提并论),并允许紧凑、低成本的系统具有良好的多媒体性能,而无需单独的 GPU。最新的英特尔处理器还提供片上集成显卡,尽管竞争性集成 GPU 性能目前仅限于少数带有英特尔 Iris Pro Graphics 的芯片。随着技术的不断进步,我们将看到这些曾经分开的部分越来越程度的融合。AMD 设想未来 CPU 和 GPU 合二为一,能够无缝协作完成同一项任务

尽管如此,PC 操作系统和应用程序执行的许多任务仍然更适合 CPU,而使用 GPU 加速程序则需要做大量工作。由于许多现有软件使用 x86 架构,并且 GPU 需要不同的编程技术,并且缺少操作系统所需的几个重要功能,因此日常计算从 CPU 到 GPU 的普遍过渡非常困难。

答案2

是什么使得 GPU 比 CPU 快得多?

GPU 是不是比 CPU 更快。CPU 和 GPU 的设计目标不同,权衡利弊,因此它们不同的性能特征。某些任务在 CPU 中执行速度更快,而其他任务在 GPU 中计算速度更快。CPU 擅长对小数据集进行复杂操作,而 GPU 擅长对大数据集进行简单操作。

GPU 是一种专用 CPU,其设计使得一条指令可以处理大量数据(SIMD/单指令多数据),所有数据都应用相同的操作。以数据块为单位工作肯定比一次处理单个单元更有效率,因为解码指令的开销大大减少,但是以大块为单位工作意味着有更多的并行工作单元,因此它使用更多的晶体管来实现单个 GPU 指令(导致物理尺寸限制、消耗更多能量并产生更多热量)。

CPU 的设计目标是尽可能快地对单个数据执行单个指令。由于它只需要处理单个数据,因此执行单个指令所需的晶体管数量要少得多,因此 CPU 可以拥有更大的指令集、更复杂的 ALU、更好的分支预测、更好的虚拟化架构以及更复杂的缓存/流水线方案。它的指令周期也更快。

我们仍在使用 CPU 的原因是不是因为 x86 是 CPU 架构之王,而 Windows 是为 x86 编写的,我们仍在使用 CPU 的原因是因为操作系统需要执行的任务(即做出决策)在 CPU 架构上运行效率更高。操作系统需要查看数百种不同类型的数据并做出各种相互依赖的决策;这种工作不容易并行化,至少不能并行到 SIMD 架构中。

未来,我们将看到 CPU 和 GPU 架构之间的融合,因为 CPU 获得了处理数据块的能力,例如 SSE。此外,随着制造技术的进步和芯片尺寸的减小,GPU 可以执行更复杂的指令。

答案3

GPU 缺乏:

  1. 虚拟内存 (!!!)
  2. 寻址除内存以外的设备的方法(例如键盘、打印机、辅助存储器等)
  3. 中断

您需要这些才能实现任何类似现代操作系统的东西。

它们在双精度算术方面也(相对)较慢(与单精度算术性能相比)*,并且更大(就硅片尺寸而言)。较旧的 GPU 架构不支持大多数通用编程所需的间接调用(通过函数指针),而较新的架构支持这种调用,但速度较慢。最后,(正如其他答案所指出的),对于无法并行化的任务,在相同工作负载下,GPU 比 CPU 更差。

编辑:请注意,此回复写于 2011 年——GPU 技术是一个不断变化的领域。根据您阅读此回复的时间,情况可能会有很大不同 :P

* 某些 GPU 在双精度运算时并不慢,例如 NVidia 的 Quadro 或 Tesla 系列(Fermi 一代或更新),或 AMD 的 FirePro 系列(GCN 一代或更新)。但大多数消费者的机器中并不配备这些 GPU。

答案4

因为 GPU 的设计目的是同时处理很多小事情,而 CPU 的设计目的是每次只处理一件事。如果你的进程可以大规模并行,比如哈希,那么 GPU 的速度就会快几个数量级,否则就不会快。

您的 CPU 计算哈希的速度比 GPU 快得多 - 但您的 CPU 计算哈希所花的时间,相当于 GPU 计算数百个哈希的时间。GPU 被设计为同时执行多项任务,而 CPU 被设计为一次只执行一项任务,但速度非常快。

问题在于,CPU 和 GPU 是针对不同问题的不同解决方案,它们之间有一点重叠,但通常它们所擅长的领域仍是它们所擅长的。我们不能用 GPU 取代 CPU,因为 CPU 的工作效率比 GPU 高得多,这仅仅是因为 GPU 不是为完成这项工作而设计的,而 CPU 才是。

不过,有一点需要注意,如果可以废弃 CPU 而只使用 GPU,你不觉得我们会重命名它吗?:)

相关内容