GPU能否替代CPU?

13

您认为像CUDA这样的CPU倡议对GPU的未来有何影响?您认为它们将成为主流并成为该行业中下一个被采纳的潮流吗?苹果正在构建一种使用GPU执行CPU任务的新框架,Nvidia的CUDA项目在科学领域取得了很多成功。您会建议学生在这个领域投入时间吗?

8个回答

18

如果您对科学和并行计算感兴趣,就要注意提交时间。不要认为CUDA可以使GPU像CPU一样运行。它只是比早期的通用GPU编程技术更直接地编程GPU的一种方法。

通用CPU通过分支预测、流水线、超标量等所有工作,从而能够在各种任务上表现良好。这使它们能够在各种工作负载中获得良好的性能,但在高吞吐量的内存密集型浮点运算方面表现不佳。

GPU最初设计来做一件事,并且非常擅长做这件事。图形操作本质上是并行的。您可以同时计算屏幕上所有像素的颜色,因为结果之间没有数据依赖关系。此外,所需算法不必处理分支,因为几乎需要的任何分支都可以通过将系数设置为零或一来实现。硬件因此可以非常简单。无需担心分支预测,而不是使处理器超标量,您只需添加尽可能多的ALU即可。

随着可编程纹理和顶点着色器的出现,GPU获得了通用可编程路径,但仍受到硬件的限制,该硬件仍旧设计用于高吞吐量的浮点运算。可能会添加一些额外的电路以启用更通用的计算,但仅限于某个程度。任何损害GPU处理图形能力的事物都不会被采纳。毕竟,GPU公司仍然从事图形业务,目标市场仍然是玩家和需要高端可视化的人。

GPGPU市场仍然只是小巫见大巫,并且在某种程度上将保持不变。毕竟,“看起来漂亮”比“每次100%保证和可重现的结果”标准低得多。

因此,简而言之,GPU永远不会成为CPU的替代品。它们只是为不同类型的工作负载而设计。我预计GPU将获得功能,使其能够快速解决更广泛的问题,但它们始终首先是“图形处理单元。

始终将你所面临的问题与最合适的工具相匹配,这一点始终非常重要。


“毕竟,‘看起来不错’比‘每次都能保证100%的可靠结果’要低得多。”说得太好了! - Blindy
+1“将问题与解决它的最合适工具相匹配始终是非常重要的。” - Adam
我认为加密货币矿工和量化应用程序员会对最后几段有不同的看法,但非常感谢您指出CPU的相对优势! - user1382306

6

长远来看,随着通用处理器的进化,GPU 将不复存在。Intel 的 Larrabee 是第一步。历史已经证明,押注反对 x86 是一个坏主意。

对于大规模并行架构和向量处理的研究仍然有用。


谢谢您的答案,让我对这个主题有了不同的思考。 - Liran Orevi

5

GPU永远无法取代CPU。CPU执行一组连续的指令,而GPU在并行计算中执行非常特定类型的计算。这些GPU在数值计算和图形方面非常有用; 然而,大多数程序无法利用这种计算。

您很快将看到来自Intel和AMD的新处理器,其中包括类似GPU的浮点向量计算以及标准CPU计算。


谢谢!我是否正确地理解了CPU的专长是串行指令,而GPU的专长是并行?你能给一个现实世界的例子吗?非常感谢您的帮助! - user1382306

5

首先,我认为这个问题并不适合放在SO上。

在我看来,GPU是一种非常有趣的替代方案,特别是在进行基于向量的浮点数学时。然而,这意味着:它不会成为主流。大多数主流(桌面)应用程序几乎不进行浮点数计算。

它已经在游戏(物理引擎)和科学计算中获得了广泛应用。如果您认为这两者都是“主流”,那么GPU将成为主流。

我不认为这两者是主流,因此我认为GPU将成为主流行业中下一个被采纳的风尚。

如果您作为学生对基于物理的科学计算非常感兴趣,那么您应该花些时间研究它(GPU是非常有趣的硬件部件)。


1
考虑到超级计算机是为科学计算而建造的,而视频游戏则引领了图形、人工智能和物理密集型应用程序的发展(尤其是同时进行),我不知道你怎么能认为它们不是主流。但我同意,GPU永远无法取代CPU。 GPU缺乏灵活性。 - Narcolapser
从几年后的角度来看这个问题确实很有趣。我认为GPU在这一点上肯定已经变得更加主流,尽管替换CPU是不太可能的。他们仍然不断地添加更多的核心=)而且,是的,这可能比SO更适合在程序员上讨论。 - That Realty Programmer Guy
@Narcolapser,您能否详细说明一下您在答案中所说的“灵活性”,并提及我?非常感谢您! - user1382306

2

这是一种你可能只看到了1或2个应用程序的东西,但很快就会有人想出一种“杀手级应用程序”,以超快的速度更广泛地运用它。

像素着色器可应用于大量浮点值的例程,也许我们会看到一些GIS覆盖应用程序或其他应用。如果你没有比我更多的时间投入其中,那么你将和我一样了解得很少!

我有一种感觉它可能会成为一件很大的事情,英特尔和S3也这样认为,也许只需要在硬件上添加一个小小的调整,或者有人脑海中突然灵光一闪。


2

我认为这是正确的做法。

考虑到GPU已经被用来创建便宜的超级计算机,这似乎是事物自然演化的结果。有如此强大的计算能力和研发工作已经为您完成,为什么不利用现有技术呢?

所以,请放心去做吧。这将为一些很酷的研究提供支持,同时也是购买高端显卡并在完整的图形细节下玩Crysis和Assassin's Creed的正当理由;)


1

有了如此强大的未开发潜力,我无法想象它会闲置很长时间。问题是,如何利用GPU。目前来看,CUDA似乎是一个不错的选择,但其他技术正在崛起,这可能使它更适合普通开发人员使用。

最近,苹果公司推出了OpenCL,他们声称这不仅比CUDA更好,而且相当简单。我不确定如何评价它,但Khronos小组(OpenGL标准的负责人)正在制定OpenCL标准,并试图使其与OpenGL高度互操作。这可能会导致一种更适合普通软件开发的技术。

这是一个有趣的主题,顺便说一下,我即将开始我的硕士论文,研究如何最好地使GPU的能力对普通开发人员(如果可能的话)可用,以CUDA为重点。


你看过GPU++吗?它来自一个类似于你即将开始的论文。或许可以帮助你快速入门。 - gbjbaanb

1
很久以前,进行浮点运算非常困难(像80386这样性能可怜的CPU每条指令需要数千/数百万个仿真周期)。需要浮点性能的人可以获得FPU(例如80387)。旧的FPU与CPU的操作相当紧密集成,但它们是外部的。后来它们变得集成化,80486内置了一个FPU。
旧时代的FPU类似于GPU计算。我们已经可以通过AMD的APU获得它。APU是带有GPU的CPU。
因此,我认为你问题的实际答案是,GPU不会成为CPU,而是CPU将内置GPU。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接