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


105

据我了解,人们开始使用GPU进行通用计算,因为它们是计算能力的额外来源。尽管它们不能像CPU一样快速执行每个操作,但它们具有许多内核,因此比CPU更适合并行处理。如果您已经拥有一台恰好具有用于图形处理的GPU的计算机,但是您不需要图形,并且想要更多的计算能力,则这很有意义。但我也了解人们购买GPU 专门是为了增加计算能力,而无意使用它们来处理图形。在我看来,这类似于以下类推:

我需要割草,但割草机很w弱。因此,我从保持在卧室的箱式风扇上卸下了笼子,并弄平了刀片。我用胶带将其粘贴到割草机上,发现它工作得相当好。多年后,我是一家大型草坪护理企业的采购官。我有一笔可观的预算用于割草工具。我没有买割草机,而是买了一堆箱风扇。同样,它们工作正常,但我必须支付我最终不会使用的额外零件(例如笼子)。(出于这个比喻的目的,我们必须假设割草机和箱式风扇的价格大致相同)

那么,为什么没有具有GPU处理能力但没有图形处理能力的芯片或设备市场呢?我可以想到一些可能的解释。其中哪一个是正确的?

  • 当GPU已经是不错的选择时(如果不存在割草机,为什么不使用这种非常好的箱式风扇呢?),这种替代方案的开发成本太高。
  • “ G”代表图形这一事实仅表示预期用途,并不真正意味着要比其他任何类型的工作都使该芯片更好地适应图形处理(割草机和箱式风扇是同一件事,您完全可以理解;无需进行任何修改即可使一个功能与另一个功能相同)。
  • 现代GPU与古老的GPU有着相同的名称,但是如今,高端GPU的目的不是专门处理图形(现代箱式风扇的设计主要是充当割草机,即使不是老式的割草机也是如此)。
  • 将几乎所有问题转换为图形处理语言都非常容易(可以通过快速吹气来割草)。

编辑:

我的问题已经得到回答,但是基于一些评论和答案,我认为我应该澄清我的问题。我不是在问为什么每个人都不买自己的计算。显然,大多数时候这太昂贵了。

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


66
因为他们专门为这种类型的事情; 这基本上是相同类型的数学。nVidia已经建造并出售了仅GPU的主板,供人们进行这种大规模的并行数运算。
赫普特

7
请记住,我们确实在芯片上添加了专门的“单元”。我认为,AES是在CPU的硬件中完成的。AVX也以硬件实现。但是,您在哪里停下来?芯片制造商不知道您需要什么,并且大多数人没有能力(技术或财务能力)为特定任务设计自己的芯片。就像其他人所说,图形卡是一种特殊的体系结构,可以很好地完成某些任务。它们并不能满足所有要求,但是对于某些特定任务并因此而被使用。
DetlevCM

4
一个更准确的类比是用100米宽的农用联合收割机代替箱式风扇。
MooseBoys

6
我的PC已经可以使用GPU,设计和生产专用芯片会使我退缩几百万美元。
PlasmaHH

19
尝试另一个类比。假设我们有箱风扇,并且有直升机旋翼。在我们的假设世界中,框式风扇的应用需要越来越大的风扇以更高的速度运行,直到我们最终获得了2000万个碳纤维叶片式框式风扇,并且批量生产使它们变得便宜。然后有人意识到一个20m的盒式风扇实际上只是一个带有笼子的直升机旋翼。确实是如此。
格雷厄姆(Graham)

Answers:


109

这实际上是您所有解释的结合。便宜和容易的价格已经存在,设计已经从纯图形转向。


可以将现代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那样仅仅交换新处理器。

16
当计算从字面上收回成本时(加密挖矿),ASIC也很有意义
棘手的怪胎

4
实际上,FPGA通常比GPU差。问题在于FPGA非常灵活。他们可以执行许多各种操作。但是,计算通常是数学形式,实际上,批量只是两个操作:加法和乘法(减法和除法是上述方法的变体)。GPU在这两个方面非常擅长,远胜于FPGA。
MSalters

19
您需要澄清有关FPGA的更多信息。有一个“加紧”的想法有点误导。他们更侧重一步。
Yakk

6
作为最后一个例子,Google有自己的“张量处理单元”用于机器学习。对其进行定制的程度尚不清楚,但被描述为ASIC。
mbrig

4
@MSalters性能/瓦数是FPGA在GPU上的主要卖点之一,随着数据中心开始遭受重创(FPGA通常具有更高的能效),这一点就变得越来越重要。就数学而言,FPGA在定点和整数算术上可与GPU媲美,而在浮点数学上则滞后。
wilcroft

32

我最喜欢的类比:

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

您使用什么取决于成本敏感性,任务可并行化的程度以及其他因素。由于市场的竞争方式,GPU是大多数高度并行应用程序的最佳选择,而在功耗和单位成本是首要考虑因素的情况下,CPU是最佳选择。

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


7
评论无论如何都不是要回答的,这对我来说似乎是一个合理的答案。
RaimundKrämer18年

1
@BobtheMogicMoose但是,使用为基因组分析而设计的定制FPGA可能要比在GPU中具有等效代码快几个数量级。当您让科学家们坐下来等待结果时,更快的FPGA很快就会收回成本。
doneal24年

对普通开发人员而言,FPGA也变得越来越容易访问-例如,Microsoft拥有使用FPGA云AI解决方案(Project BrainWave)。AWS还提供了一些产品。任何人都可以租用一些定制的FPGA来完成专门的任务,而无需自己构建,这在几年前对于许多用例都是不可行的。
brichins

是的,我认为甚至还有一些FPGA业余套件,可与arduino树莓派媲美。我仍然认为,对FPGA进行编程要比开发更高级的体系结构昂贵得多。
BobtheMagicMoose

10

你的比喻很糟糕。打个比方,当您购买大型草坪护理业务的设备时,就假定有好的割草机可用。在计算世界中并非如此-GPU是现成的最佳工具。

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

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


9

当然,您可以使用专用芯片来提高能效或计算速度。让我告诉您比特币采矿的历史:

  • 比特币是新的,极客们使用他们的CPU。
  • 比特币是使用GPU的新型智能怪胎。
  • 比特币现在(有点)著名,人们购买了FPGA。
  • 比特币现在很出名(2013年),即使是新手,也要购买ASIC(“专用集成电路”)以有效地进行挖掘。
  • 块奖励下降(定期),即使旧的ASIC不再盈利。

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

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


1
“当然,您可以使用更多的专用芯片”-但是有一些专用于比特币(SHA-256),然后是litecoin(scrypt)的芯片,仅此而已。不存在用于其他问题的高性能计算硬件。(也就是说,性能要高于当前的高端GPU)
Agent_L '18

8

您在类比中描述的正是发生的事情。正如您抓住风扇并磨尖刀片以尝试将其用作割草机一样,一组研究意识到:“嘿,我们这里有一些非常漂亮的多核处理单元,让我们尝试将其用于通用计算! ”。

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

因为无论如何,我们期望计算机对计算量最苛刻的操作是图形。与几年前相比,足以看一下当今游戏外观的惊人进步。这意味着GPU的开发已经投入了大量的精力和金钱,而且它们还可以用于加速特定类别的通用计算(即,极并行)的事实,这增加了它们的流行度。

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

  • 当GPU已经是不错的选择时,开发这种替代方案将太昂贵。

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


5
我不得不不同意“最需要计算的操作”是图形,当然取决于“我们”到底是谁。对一般用户而言,是的,但是在科学与工程界,有很多事情比图形要求更高。毕竟,可以使用单个中端PC和GPU组合完成可接受的图形(如游戏)。重大问题通常会结合成百上千个这样的单元,以达到petaflop范围的性能-然后问题仍然可能需要数天或数周的计算时间。
jamesqf

技术上讲,我期望计算机上对计算要求最高的操作是图形,但是大多数人(或GPU设计人员)在听到“图形”一词时就不会想到从运动中进行结构计算。
马克

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的适应性就越差。


5

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

CPU如此普及的原因之一是它们具有灵活性。您可以对它们重新编程以完成无数种任务。如今,对于生产产品的公司来说,将小型CPU或微控制器插入某物并对其功能进行编程,比开发定制电路来完成相同任务更便宜,更快。

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

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

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

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

GPU对于某些类型的问题实际上是可怕的,因此许多人/公司正在使用其他类型的设备。但是GPU已经根深蒂固,它们的设备在经济上是否可行?我想我们会看到的。

编辑:现在我下车了,扩大了我的答案。

警示案例研究是英特尔Larrabee项目。它最初是作为可以在软件中进行图形处理的并行处理设备。它没有专门的图形硬件。我与从事该项目的人员交谈,他们说该项目失败并被取消(除了内部恐怖的内部政治原因)的主要原因是,他们只是无法让编译器为其生成良好的代码。当然,它产生了可工作的代码,但是如果您的产品的整个要点是最大的性能,则最好让编译器产生相当好的代码。这回想起了我之前的评论,即您的新设备在硬件和软件方面缺乏深厚的专业知识是一个大问题。

Larrabee设计的某些元素使其成为Xeon Phi / Intel MIC。该产品实际上已投放市场。它完全专注于并行化科学计算和其他HPC类型的计算。看来现在是商业失败。我在英特尔与之交谈的另一人暗示,它们与GPU相比在价格/性能方面没有竞争力。

人们试图将FPGA的逻辑综合集成到编译器中,以便您可以自动为FPGA加速器生成代码。他们做得不好。

云似乎是加速器或其他GPU替代品真正肥沃的土壤。这些大型公司(例如Google,Amazon和Microsoft)存在规模经济,因此值得投资替代计算方案。有人已经提到了Google的张量处理单元。微软在其Bing和Azure基础结构中均具有FPGA和其他功能。与亚马逊的故事相同。如果规模可以抵消您在时间,金钱和工程师眼泪上的投资,那绝对有道理。

总而言之,专业化与许多其他方面(经济性,平台的成熟度,工程专业知识等)不一致。专业化可以显着提高您的性能,但会缩小设备的适用范围。我的回答集中在很多负面因素上,但是专业化也有很多好处。绝对应该追求和研究它,正如我提到的,许多组织都在积极地追求它。

抱歉,再次编辑:我认为您的前提是错误的。我认为这不是寻找额外的计算能力来源的情况,而是人们认识到机会的情况。图形编程的线性代数非常繁琐,GPU旨在有效执行常见的运算,例如矩阵乘法,矢量运算等。这些运算在科学计算中也很常见。

人们开始意识到对Intel / HP EPIC项目的承诺被高估了(对90年代末2000年代初),人们开始对GPU产生了兴趣。编译器并行化没有通用的解决方案。因此,与其说“我们在哪里可以找到更多的处理能力,我们可以尝试GPU”,不如说是“我们有一些擅长并行计算的东西,我们可以使它更具通用性”。参与其中的很多人都在科学计算社区中,他们已经拥有可以在Cray或Tera机器上运行的并行Fortran代码(Tera MTA具有128个硬件线程)。也许双向都有运动,但是我只听说过从这个方向出发的GPGPU的起源。


“加速器”是指定制的硬件或低功耗计算节点的超级集群吗?您能否通过提供一些示例加速器硬件的参考来进行详细说明。
manav mn

抱歉,我认为我已经从上下文中阐明了这一点。加速器只是协处理器或卸载卡的总称。浮点最初是在协处理器中而不是在主CPU中,因此它被视为加速器。GPU,DSP,Xeon Phi,FPGA在PCIe卡上或类似的东西时,我提到的模拟微分方程式的东西,有有助于虚拟化的设备,还有对神经网络加速器的最新研究。这些都是加速器的例子。
NerdPirate

4

在此处输入图片说明

ASIC(定制硅片)非常快,但是设计和制造却非常昂贵。ASIC过去是专用的,而CPU是一种允许对计算机进行“编程”的方法,因此可以通过软件来执行计算任务。早期的CPU通过在现场对芯片进行编程,使人们能够利用ASIC的功能而无需花费大量成本。这种方法非常成功,它引起了您现在正在使用的(非常)快速的计算机。

那么为什么要使用GPU?

在90年代中期,3DFX意识到3D渲染任务是如此的具体,以至于定制ASIC的性能要比CPU好。他们创建了一个计算机协处理器,将3D渲染任务从CPU卸载到该协处理器,他们称之为“ GPU”。竞争和市场需求将这一领域的创新推向了一个新的高度,即GPU的计算速度比CPU快得多,因此出现了一个问题:“为什么我不能使用GPU来计算我的数字而不是CPU?” GPU制造商看到了需求和赚钱的方法,因此他们开始更改平台以允许开发人员使用其硬件。但是硬件的硬件是如此特定于目的,以至于您可以要求GPU进行操作的局限性仍然存在。我不会在这里详细说明为什么。

那么为什么没有更多的专用硅呢?为什么只是图形?

两个原因:1)价格。GPU的市场很好,可以证明它是合理的,但是即使在那时,这仍然是巨大的风险。没有人真正知道3DFX是否可以获利(结果是,他们实际上并没有,因此倒闭了)。即使到现在,由于GPU市场的规模,实际上只有3个竞争对手。2)CPU实际上满足了带有指令扩展的“定制芯片”的需求。回想一下MMX-实际上,这是英特尔在3DFX不断提高速度的情况下加速CPU图形的尝试。从那时起,使用所有这些自定义扩展的x86指令集已经变得非常庞大。这些扩展中的许多扩展在当时是有意义的(例如MMX),但现在在处理器中基本上只是重量级的。但是,您无法删除它们,因为那样会破坏现有软件。它' 实际上,ARM的卖点之一-ARM是精简的指令集。没有太多的指令扩展,但这使芯片更小,制造更便宜。

在我看来,如果可以减少定制硅片的成本,您可以赚很多钱。有人在做这个吗?

有一种称为FPGA的技术-现场可编程门阵列,该技术自计算之初就已经存在。从本质上讲,它是一个可以使用软件“现场”设计的微芯片。这是一项很酷的技术,但是使芯片可编程所需的所有结构都占用了大量硅,并使芯片以更低的时钟速度运行。如果芯片上有足够的硅并且可以有效地并行化任务,则FPGA的CAN可以比CPU的快。但是它们在您可以施加多少逻辑上受到限制。除了最昂贵的FPGA之外,所有其他工具都比早期比特币挖矿的GPU慢,但它们的ASIC同行有效地终止了GPU挖矿的盈利能力。其他加密货币使用了无法并行化的特定算法,因此FPGA和ASIC

FPGA的主要限制因素是芯片尺寸-芯片上可以容纳多少逻辑?第二个是时钟速度,因为很难在FPGA中优化诸如热点,泄漏和串扰之类的东西。较新的制造方法已将这些问题最小化,并且英特尔已与Altera合作提供了一种FPGA,工程师可以使用它来利用“定制硅”作为服务器中协处理器的优势。从某种意义上说,它来了。

FPGA会取代CPU和GPU吗?

大概不会很快。最新的CPU和GPU是MASSIVE的,并且对硅进行了高度调整以提高其热和电性能。您无法像自定义ASIC一样优化FPGA。除非有一些突破性的技术,否则CPU可能仍将是带有FPGA和GPU协处理器的计算机的核心。


1
这些扩展中的许多扩展在当时是有意义的(例如MMX),但现在在处理器中基本上只是重量级的。 3D渲染远非 SIMD的唯一​​用例。MMX的大部分“权重”是执行单位,可以与更广泛的向量(例如SSE2,AVX2和AVX512)共享。这些被大量用于CPU上的高质量视频编码以及许多其他任务,包括高性能计算。而且还有memchr,strlen和许多其他东西的库实现。例如,一次过滤一个数组超过1个元素
Peter Cordes

3

实际上,确实有专门用于高速计算的板卡,例如,Xilinx拥有使用其FPGA的178个PCI-e卡板列表,其中大约三分之一的板卡是“数字处理器”,带有一个或几个强大的FPGA芯片以及许多内置的板载DDR内存。也有针对高性能计算任务的高性能DSP板(示例)。

我猜GPU板的流行源于他们针对更广泛的客户群的目标。您无需投资专用硬件即可与Nvidia CUDA一起玩,因此当您完成需要特殊硬件的任务时,Nvidia GPU将具有竞争优势,因为您已经知道如何对其进行编程。


2

我认为您的问题的答案取决于如何定义高性能计算。

通常,高性能计算与计算时间有关。在那种情况下,我想分享高性能计算集群的链接。

该链接指定了使用GPU的原因;尽管精度不高,但使用图形卡(或更确切地说是其GPU)进行网格计算比使用CPU更为经济。


2
高端GPGPU具有64位double精度的良好吞吐量,而不仅仅是单精度32位float。(有些常规GPU在HW上跳过double)。主要供应商都支持IEEE FP数学(我认为即使存在异常)。因此,除非您以性能为代价来交换精度,否则就不会有精度损失,例如,使用16位半精度FP,它在某些硬件上的吞吐量甚至更高(当然是内存带宽的一半)。CPU上的高性能代码通常也使用32位float,以使每个SIMD向量获得两倍的元素,并获得一半的内存带宽。
彼得·科德斯

1
@PeterCordes我已经看到了一些近似计算方面的工作,甚至可以降到8位浮点,尽管我认为硬件中没有很多GPU支持这种工作。
JAB
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.