为什么人们使用 GPU 而不是更专业的芯片进行高性能计算?

Ale*_*x S 106 gpu gpgpu

据我了解,人们开始使用 GPU 进行通用计算,因为它们是计算能力的额外来源。尽管它们在每个操作中都没有 CPU 快,但它们有很多内核,因此它们比 CPU 更适合并行处理。如果您已经拥有一台恰好具有用于图形处理的 GPU 的计算机,但您不需要图形,并且想要更多的计算能力,那么这是有道理的。但我也明白,人们购买 GPU为了增加计算能力,无意用它们来处理图形。对我来说,这似乎类似于以下类比:

我需要割草,但我的割草机很虚弱。所以我从卧室里的箱式风扇上取下笼子并磨锐叶片。我用胶带把它粘在割草机上,我发现它运行得相当好。多年后,我成为一家大型草坪护理企业的采购官。我有一笔可观的预算可以花在割草工具上。我没有买割草机,而是买了一堆箱式风扇。同样,它们工作正常,但我必须为我最终不会使用的额外部件(如笼子)付费。(出于这个类比的目的,我们必须假设割草机和箱式风扇的成本大致相同)

那么为什么没有具有 GPU 处理能力但没有图形开销的芯片或设备的市场呢?我能想到几个可能的解释。如果有的话,哪一个是正确的?

  • 当 GPU 已经是一个不错的选择(割草机不存在,为什么不使用这种完美的箱式风扇?)时,这种替代方案的开发成本太高了。
  • “G”代表图形这一事实仅表示预期用途,并不意味着要努力使芯片比任何其他类型的工作更适合图形处理(割草机和箱式风扇在以下情况下是同一回事)您可以直接进行操作;无需进行任何修改即可使一个功能像另一个一样运行)。
  • 现代 GPU 与其古老的前辈具有相同的名称,但如今高端 GPU 并非专为处理图形而设计(现代盒式风扇主要用作割草机,即使较旧的不是)。
  • 将几乎任何问题转换为图形处理语言都很容易(可以通过非常快速地吹空气来割草)。

编辑:

我的问题已经得到解答,但是根据一些评论和答案,我觉得我应该澄清一下我的问题。我不是在问为什么每个人都不购买自己的计算。显然,在大多数情况下,这太贵了。

我只是观察到似乎需要可以快速执行并行计算的设备。我想知道为什么最佳的此类设备似乎是图形处理单元,而不是为此目的而设计的设备。

Bob*_*Bob 108

这真的是你所有解释的结合。更便宜、更容易,已经存在,而且设计已经从纯图形转移了。


现代 GPU 可以被视为主要是带有一些附加图形硬件(以及一些固定功能的加速器,例如用于编码和解码视频)的流处理器现在的 GPGPU编程使用专门为此目的设计的 API(OpenCL、Nvidia CUDA、AMD APP)。

在过去的一两年里,GPU 已经从一个固定功能的管道(几乎只有图形)发展到一个可编程的管道(着色器让你编写自定义指令),再到更现代的 API,如 OpenCL,提供对着色器核心的直接访问,而无需伴随的图形管道。

其余的图形位是次要的。它们只占卡成本的一小部分,因此将它们排除在外并不会便宜得多,并且您会承担额外设计的成本。因此,通常不会这样做——大多数 GPU 都没有面向计算的等价物——除了最高层,而且这些都非常昂贵。

普通的“游戏”GPU 非常常用,因为规模经济和相对简单使它们便宜且易于上手。从图形编程到使用 GPGPU 加速其他程序,这是一条相当简单的途径。与其他选项不同,随着更新更快的产品可用,升级硬件也很容易。


基本上,选择归结为:

  • 通用 CPU,非常适合分支和顺序代码
  • 普通的“游戏”GPU
  • 面向计算的 GPU,例如Nvidia TeslaRadeon Instinct 这些通常根本不支持图形输出,因此 GPU 有点用词不当。但是,它们确实使用与普通 GPU 相似的 GPU 内核,并且 OpenCL/CUDA/APP 代码或多或少可以直接移植。
  • FPGA 使用非常不同的编程模型并且往往非常昂贵。这是存在重大进入壁垒的地方。它们也不一定比 GPU 快,具体取决于工作负载。
  • ASIC,定制设计的电路(硬件)。这是非常昂贵的,只有在极端规模的情况下才值得(我们说的是至少数千个单位),并且您确定程序永远不需要更改。它们在现实世界中很少可行。每次技术进步时,您还必须重新设计和测试整个事物——您不能像更换 CPU 和 GPU 那样更换新处理器。

  • 您需要澄清有关 FPGA 的更多信息。有“加强”的想法有点误导。它们更像是侧身一步。 (19认同)
  • 当计算真正为自己买单时,ASIC 也有意义(加密挖掘) (16认同)
  • 作为最后一个的例子,谷歌有自己的机器学习“张量处理单元”。它们的定制程度尚不清楚,但被描述为 ASIC。 (6认同)
  • 实际上,FPGA 的性能往往比 GPU 差。问题是 FPGA 非常灵活。他们可以实现许多不同的操作。然而,计算通常是一种数学形式,实际上大部分只是两个运算:加法和乘法(减法和除法是上述的变体)。GPU 非常非常擅长这两种操作,比 FPGA 的要好得多。 (4认同)
  • @MSalters FPGA 优于 GPU 的主要卖点之一是性能/瓦特,随着数据中心开始触及电源墙(FPGA 通常更节能),这一点变得越来越重要。就数学而言,FPGA 在定点和整数运算方面可与 GPU 相媲美,仅在浮点运算方面落后。 (4认同)
  • @ratchetfreak 即使在加密挖掘的情况下,Bob 的一些观点仍然适用。它们对比特币是可行的,因为该程序不太可能改变(比特币社区致力于 SHA256)。并非所有货币都是如此——例如,以太坊计划在不久的将来改变,而门罗币社区最近表明,如果开发了 ASIC 矿工,他们将改变哈希值。 (2认同)

Bob*_*ose 31

我最喜欢的比喻:

  • CPU:博学天才。一次可以做一两件事,但这些事情可能非常复杂。
  • GPU:大量低技能工人。他们中的每一个都不能解决很大的问题,但总的来说,您可以完成很多工作。对于你的问题,是的,有一些图形开销,但我相信它是微不足道的。
  • ASIC/FPGA:一家公司。您可以雇用大量低技能工人或几个天才,或者低技能工人和天才的组合。

您使用什么取决于成本敏感性、任务可并行化的程度以及其他因素。由于市场的发展,GPU 是大多数高度并行应用程序的最佳选择,而当功耗和单位成本是主要问题时,CPU 是最佳选择。

直接回答您的问题:为什么 GPU 优于 ASIC/FPGA?一般费用。即使在今天的 GPU 价格飞涨的情况下,使用 GPU 仍然(通常)比设计 ASIC 来满足您的需求便宜。正如@user912264 指出的那样,有些特定任务对 ASIC/FPGA 很有用。如果您有一项独特的任务并且您将从规模中受益,那么设计 ASIC/FPGA 是值得的。事实上,您可以专门为此目的设计/购买/许可 FPGA 设计。例如,这样做是为了为高清电视中的像素供电。

  • 无论如何,评论不是为了回答,这对我来说似乎是一个合理的答案。 (7认同)

小智 10

你的比喻不好。打个比方,当您为大型草坪护理业务购买设备时,您假设有可用的优质割草机。在计算世界中情况并非如此——GPU 是现成的最佳工具。

专用芯片的研发成本和可能的性能提升可能太高,无法证明制造一个是合理的。

也就是说,我知道 Nvidia 推出了一些专门用于通用计算的 GPU - 它们没有视频输出 - 有点像销售已经拆除笼子的盒式风扇。


MCC*_*CCS 9

当然,您可以使用专门的芯片,无论是为了能效还是为了计算速度。让我告诉你比特币挖矿的历史:

  • 比特币是新的,极客们用他们的 CPU 挖矿。
  • 比特币有点新,聪明的极客们用他们的 GPU 挖矿。
  • 比特币现在(有点)有名,人们购买 FPGA。
  • 比特币现在很出名(2013 年),即使是新手也会购买 ASIC(“专用集成电路”)来高效挖掘。
  • 区块奖励下降(定期),即使是旧的 ASIC 也不再有利可图。

所以不,没有理由使用 GPU 而不是专门的“巨型计算器”。经济激励越大,硬件就越专业。但是,如果您不是一次生产数千个,它们很难设计并且无法制造。如果不是可行的,设计的芯片,你可以买一个那些距离最近的沃尔玛。

TL;DR当然你可以使用更专业的芯片。


小智 8

您在类比中所描述的正是发生的事情。就在你拿起风扇并磨尖刀片以尝试将其用作割草机时,一组研究人员意识到“嘿,我们这里有一些非常好的多核处理单元,让我们尝试将其用于通用计算! ”。

结果很好,球开始滚动。GPU 从仅支持图形的设备转变为支持通用计算以在最苛刻的情况下提供帮助。

因为无论如何,我们期望计算机对计算要求最高的操作是图形。看看今天的游戏与几年前的表现相比,它的惊人进步就足够了。这意味着大量的精力和金钱投入到 GPU 的开发中,而且它们还可用于加速某类通用计算(即极其并行)的事实增加了它们的受欢迎程度。

因此,总而言之,您提供的第一个解释是最准确的:

  • 当 GPU 已经是一个不错的选择时,这种替代方案的开发成本太高了。

GPU 已经存在,每个人都可以轻松使用它们并且它们可以工作。

  • 我不得不不同意“对计算要求最高的操作”是图形,这当然取决于“我们”究竟是谁。对于一般用户来说,是的,但在科学与工程界,有很多东西比图形要求更高。毕竟,可以使用单个中端 PC 和 GPU 组合来完成可接受的图形(如游戏)。重大问题通常需要将数百或数千个此类单元组合在一起才能获得千万亿次浮点运算范围内的性能——然后问题仍可能需要数天或数周的计算时间。 (5认同)

小智 5

具体来说,GPU 不是“任务并行”意义上的“核心”。大多数情况下,它采用“数据并行”的形式。SIMD 是“单指令多数据”。这意味着您不会这样做:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

这意味着您有 1024 个指令指针,它们都执行以不同速率进行的单独任务。SIMD 或“向量计算”将一次在整个数组中执行指令,更像这样:

c = a * b

“循环”在“*”和“=”指令中,而不是在指令之外。以上将同时对所有 1024 个元素执行此操作,在所有这些元素的 SAME 指令指针上。这就像有三个巨大的寄存器 a、b 和 c。SIMD 代码受到极大限制,仅适用于不太“分支”的问题。

在实际情况下,这些 SIMD 值没有 1024 个项目那么大。想象一个变量,它是一组绑定在一起的 int32。您可以将乘法和赋值视为真正的机器指令。

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

真正的 GPU 比 SIMD 更复杂,但这就是它们的本质。这就是为什么你不能只是将随机 CPU 算法扔到 GPU 上并期望加速。算法执行的指令分支越多,它就越不适合 GPU。


Ner*_*ate 5

这里的其他答案都很好。我也会投入我的 2 美分。

CPU 变得如此普遍的原因之一是它们非常灵活。您可以为无数种任务重新编程它们。如今,对于生产产品的公司来说,将小型 CPU 或微控制器嵌入某些东西并对其功能进行编程,比开发定制电路来完成相同的任务更便宜、更快捷。

通过使用与其他设备相同的设备,您可以利用已知的解决方案来解决使用相同设备(或类似设备)的问题。随着平台的成熟,您的解决方案会不断发展并变得非常成熟和优化。在这些设备上编码的人也获得了专业知识并变得非常擅长他们的手艺。

如果您要从头开始创建一种新的设备类型,作为 GPU 的替代品,即使是最早的采用者也需要数年时间才能真正掌握如何使用它。如果您将 ASIC 连接到您的 CPU,您如何优化该设备上的卸载计算?

计算机体系结构社区多年来一直对这个想法充满热情(显然它以前很流行,但最近又出现了复兴)。这些“加速器”(它们的术语)具有不同程度的可重编程性。问题是,您对加速器可以解决的问题范围的定义有多窄?我什至与一些正在使用带有运算放大器的模拟电路创建加速器来计算微分方程的人进行了交谈。好主意,但范围极其狭窄。

在你有了一个工作加速器之后,经济力量将决定你的命运。市场惯性是一种不可思议的力量。即使某些想法是个好主意,重构您的工作解决方案以使用这种新设备在经济上是否可行?也许,也许不是。

GPU 对于某些类型的问题实际上很糟糕,所以很多人/公司都在研究其他类型的设备。但是 GPU 已经如此根深蒂固,他们的设备是否会在经济上变得可行?我想我们会看到的。

编辑:现在我下车了,稍微扩展一下我的答案。

一个具有警示意义的案例研究是 Intel Larrabee 项目。它最初是一种并行处理设备,可以在软件中进行图形处理。它没有专门的图形硬件。我与从事该项目的人交谈过,他们说它失败并被取消的一个主要原因(除了可怕的内部政治)是他们无法让编译器为其生成好的代码。当然,它生成了可运行的代码,但如果您的产品的全部意义在于最大性能,那么您最好拥有一个生成非常优化代码的编译器。这回想起我之前的评论,即新设备在硬件和软件方面缺乏深厚的专业知识是一个大问题。

Larrabee 设计的一些元素使其融入至强融核/英特尔 MIC。该产品实际上已投放市场。它完全专注于并行化科学和其他 HPC 类型的计算。现在看来是商业失败了。我在英特尔采访过的另一个人暗示他们在价格/性能上与 GPU 没有竞争力。

人们已经尝试将 FPGA 的逻辑综合集成到编译器中,以便您可以为 FPGA 加速器自动生成代码。他们没有那么好用。

对于加速器或 GPU 的其他替代品来说,似乎真正肥沃的土壤是云。谷歌、亚马逊和微软等大公司存在的规模经济使得投资于替代计算方案是值得的。有人已经提到了谷歌的张量处理单元。微软在其 Bing 和 Azure 基础设施中都有 FPGA 和其他东西。亚马逊的故事也一样。如果秤可以抵消您在时间、金钱和工程师眼泪方面的投资,那绝对是有道理的。

总之,专业化与许多其他方面(经济学、平台的成熟度、工程专业知识等)不一致。专业化可以显着提高您的表现,但它会缩小您的设备的适用范围。我的回答集中在很多负面因素上,但专业化也有很多好处。绝对应该追求和调查它,正如我提到的,许多团体正在非常积极地追求它。

抱歉,再次编辑:我认为您最初的前提是错误的。我相信这与其说是寻找额外的计算能力来源,不如说是人们认识到机会的情况。图形编程需要大量的线性代数,GPU 旨在高效地执行常见运算,如矩阵乘法、向量运算等。这些运算在科学计算中也非常常见。

人们开始意识到英特尔/惠普 EPIC 项目的承诺被夸大了(2000 年代末 90 年代末)时,人们对 GPU 产生了兴趣。编译器并行化没有通用的解决方案。因此,与其说“我们在哪里可以找到更多的处理能力,哦,我们可以尝试 GPU”,我认为更多的是“我们有一些擅长并行计算的东西,我们可以让它更普遍地可编程吗”。许多参与其中的人都在科学计算社区,他们已经拥有可以在 Cray 或 Tera 机器上运行的并行 Fortran 代码(Tera MTA 有 128 个硬件线程)。也许有来自两个方向的运动,但我只听到从这个方向提到 GPGPU 的起源。