分享

为什么 CPU 的浮点运算能力比 GPU 差,为什么不提高 CPU 的浮点运算能力?

 pgl147258 2014-09-11

冯东的回答(64票)】:

@Clones 的答案是一个常见的说法,但是没有触及到本质。

首先,「速度区别主要是来自于架构上的区别」是一个表面化的解释。对,架构是不同。但是这种不同是目前各个厂家选择的现状,还是由于本质的原因决定的?CPU 能不能增加核?GPU 那张图为什么不需要 cache?

首先,CPU 能不能像 GPU 那样去掉 cache?不行。GPU 能去掉 cache 关键在于两个因素:数据的特殊性(高度对齐,pipeline 处理,不符合局部化假设,很少回写数据)、高速度的总线。对于后一个问题,CPU 受制于落后的数据总线标准,理论上这是可以改观的。对于前一个问题,从理论上就很难解决。因为 CPU 要提供通用性,就不能限制处理数据的种类。这也是 GPGPU 永远无法取代 CPU 的原因。

其次,CPU 能不能增加很多核?不行。首先 cache 占掉了面积。其次,CPU 为了维护 cache 的一致性,要增加每个核的复杂度。还有,为了更好的利用 cache 和处理非对齐以及需要大量回写的数据,CPU 需要复杂的优化(分支预测、out-of-order 执行、以及部分模拟 GPU 的 vectorization 指令和长流水线)。所以一个 CPU 核的复杂度要比 GPU 高的多,进而成本就更高(并不是说蚀刻的成本高,而是复杂度降低了成片率,所以最终成本会高)。所以 CPU 不能像 GPU 那样增加核。

至于控制能力,GPU 的现状是差于 CPU,但是并不是本质问题。而像递归这样的控制,并不适合高度对齐和 pipeline 处理的数据,本质上还是数据问题。

【Clones的回答(9票)】:

速度区别主要是来自于架构上的区别。架构的不同则是因为硬件的设计目的不一样。

英伟达的CUDA文档里给了这样一幅图:

其中ALU就是“算术逻辑单元(Arithmetic logic unit)”。

CPU和GPU进行计算的部分都是ALU,而如图所示,GPU绝大部分的芯片面积都是ALU,而且是超大阵列排布的ALU。这些ALU都是可以并行运行的,所以浮点计算速度就特别高了。

相比起来,CPU大多数面积都需要给控制单元和Cache,因为CPU要承担整个计算机的控制工作,没有GPU那么单纯。

所以GPU的程序控制能力相比CPU来说不强,稍早时候的CUDA程序像是递归都是不能用的(较新的设备上可以了)。

我觉得也不是CPU不能提高浮点计算速度,而是因为没什么特别的必要了。咱们通常的桌面应用根本没有什么特别的浮点计算能力要求。而同时GPU这样的设备已经出现了,那么需要浮点计算的场合利用上就行了

【石磊的回答(0票)】:

外行看热闹。

其实这是跟人类的需求相负荷的,最早出来的时候人们对多媒体并没有这么大的需求,也就是对浮点的需求并不强烈,那自然就先解决重要的整数了,就这样一直发展着,直到后来GPU后来才有了较大发展。

至于说为什么现在不提高cpu,只能说不需要不划算,cpu是通用型的设备,它要提供多种复杂的服务,而Gpu则相对来说比较单一,这样实现相同功能gpu最划算,就像常见的家用游戏机的效果比电脑好一样,实际上我们可以看到电脑的配置并不必家用机差,这就是专用和通用体现出来的一些区别,当然这些是基于现在的情况。

【王磊的回答(0票)】:

GPU的出现就是为了大量的浮点运算(图形图像处理),除图形图像外的其他任务很少用到浮点运算,所以CPU不是不能提高浮点运算能力,而是没必要。也许未来的哪一天GPU再次和CPU整合,不再作为单独的部件存在了。

这世界嘛,合久必分分久必合。

【伊恩别的回答(0票)】:

首先想纠正一下可能有的误解:CPU不是"不能"拥有那么高的浮点运算能力,而是不能在固定的成本下,在满足其它通用计算的性能的前提下,还拥有那么高的浮点运算能力。图中标出的都是对应年份发布的商品的性能,而不是技术能达到极限能力。另外,CPU的最主要用途是来做通用计算,而不是浮点运算,所以浮点运算的能力只要够用就好。

【劳钧浩的回答(0票)】:

XBOX是最佳解决方案,请百度

原文地址:知乎

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多