今天讨论的论题是CPU和GPU“擅长和不擅长”的各个方面,而不是谁取代谁的问题。我试着从它们执行运算的速度与效率的方面来探讨这个论题。
CPU和GPU都是具有运算能力的芯片,CPU更像“通才”——指令运算(执行)为重+ 数值运算,GPU更像“专才”——图形类数值计算为核心。在不同类型的运算方面的速度也就决定了它们的能力——“擅长和不擅长”。芯片的速度主要取决于三个方面:微架构,主频和IPC(每个时钟周期执行的指令数)。
1.微架构
从微架构上看,CPU和GPU看起来完全不是按照相同的设计思路设计的,当代CPU的微架构是按照兼顾“指令并行执行”和“数据并行运算”的思路而设计,就是要兼顾程序执行和数据运算的并行性、通用性以及它们的平衡性。CPU的微架构偏重于程序执行的效率,不会一味追求某种运算极致速度而牺牲程序执行的效率。
CPU微架构的设计是面向指令执行高效率而设计的,因而CPU是计算机中设计最复杂的芯片。和GPU相比,CPU核心的重复设计部分不多,这种复杂性不能仅以晶体管的多寡来衡量,这种复杂性来自于实现:如程序分支预测,推测执行,多重嵌套分支执行,并行执行时候的指令相关性和数据相关性,多核协同处理时候的数据一致性等等复杂逻辑。
GPU其实是由硬件实现的一组图形函数的集合,这些函数主要用于绘制各种图形所需要的运算。这些和像素,光影处理,3D 坐标变换等相关的运算由GPU硬件加速来实现。图形运算的特点是大量同类型数据的密集运算——如图形数据的矩阵运算,GPU的微架构就是面向适合于矩阵类型的数值计算而设计的,大量重复设计的计算单元,这类计算可以分成众多独立的数值计算——大量数值运算的线程,而且数据之间没有像程序执行的那种逻辑关联性。
GPU微架构复杂度不高,尽管晶体管的数量不少。从应用的角度看,如何运用好GPU的并行计算能力主要的工作是开发好它的驱动程序。GPU驱动程序的优劣很大程度左右了GPU实际性能的发挥。
因此从微架构上看,CPU擅长的是像操作系统、系统软件和通用应用程序这类拥有复杂指令调度、循环、分支、逻辑判断以及执行等的程序任务。它的并行优势是程序执行层面的,程序逻辑的复杂度也限定了程序执行的指令并行性,上百个并行程序执行的线程基本看不到。GPU擅长的是图形类的或者是非图形类的高度并行数值计算,GPU可以容纳上千个没有逻辑关系的数值计算线程,它的优势是无逻辑关系数据的并行计算。
2.主频
另外,GPU执行每个数值计算的速度并没有比CPU快,从目前主流CPU和GPU的主频就可以看出了,CPU的主频都超过了1GHz,2GHz,甚至3GHz,而GPU的主频最高还不到1GHz,主流的也就500~600MHz。要知道1GHz = 1000MHz。所以GPU在执行少量线程的数值计算时并不能超过CPU。
目前GPU数值计算的优势主要是浮点运算,它执行浮点运算快是靠大量并行,但是这种数值运算的并行性在面对程序的逻辑执行时毫无用处。
3.IPC(每个时钟周期执行的指令数)
这个方面,CPU和GPU无法比较,因为GPU大多数指令都是面向数值计算的,少量的控制指令也无法被操作系统和软件直接使用。如果比较数据指令的IPC,GPU显然要高过CPU,因为并行的原因。但是,如果比较控制指令的IPC,自然是CPU的要高的多。原因很简单,CPU着重的是指令执行的并行性。
另外,目前有些GPU也能够支持比较复杂的控制指令,比如条件转移、分支、循环和子程序调用等,但是GPU程序控制这方面的增加,和支持操作系统所需要的能力CPU相比还是天壤之别,而且指令执行的效率也无法和CPU相提并论。
最后总结一下:
CPU擅长的:操作系统,系统软件,应用程序,通用计算,系统控制等等;游戏中人工智能,物理模拟等等;3D建模-光线追踪渲染;虚拟化技术——抽象硬件,同时运行多个操作系统或者一个操作系统的多个副本等等。
GPU擅长的:图形类矩阵运算,非图形类并行数值计算,高端3D游戏。
综上所述,在一台均衡计算的计算机系统中,CPU和GPU还是各司其职,除了图形运算,GPU将来可能主要集中在高效率低成本的高性能并行数值计算,帮助CPU分担这种类型的计算,提高系统这方面的性能。而当前的典型应用还是高端3D游戏,一个高效的GPU配合一个高效的CPU,3D游戏的整体效率才能得到保证。“高端3D游戏只需要高端显卡”或者“高端3D游戏只需要CPU”都是无稽之谈。



呵呵 赵老师好啊 我又来了
好文章
我想问几个问题
1 gpu的主频为什么不能提高到ghz级别?是否是台积电的工艺水平太差?
2 gpu的核心和流处理器分频是怎么回事?为什么amd的 rv770仍然未能实现分频?
3 core微架构的ipc好像是4吧,是怎么提高的?提高ipc是不是很难? amd的k10怎么还是3?
GPU和CPU互不替代,但又相互联系,各司其职。
请教赵老师,能像对x86一样对GPU进行编程吗?
我是从别的报纸上看到了赵经理的文章, 才搜到了这个网站。问个问题, 在超级计算机上, CPU和GPU是不是也有同样的问题, 或者超级计算机只需要CPU来做海量运算呢
李子孚,你好!
其他几个问题我回答不了也不便于回答,呵呵!
关于Core 微架构IPC的问题,不能简单的把具有几条并行的指令流水线就理解成IPC等于几。因为IPC是个平均的量。
就英特尔Core 微架构的指令流水线有并行的4条,和英特尔自己的前一代架构以及业界x86兼容芯片3条指令流水线相比,多了一条。怎么理解能?就类似于以前只有3条车道,现在增加了一条车道,指令执行的通行率提高了33%。
Botaizi, 你好!
可以的,没有问题。这也是将来英特尔 Larrabee的优势,它是基于多个x86 内核的GPU。
高飞,你好!
在现在的超级计算机上没有专门叫做GPU这样的部件,用于显示的部分被称为显示子系统,这部分系统不参与核心计算。而且为了加强某些方面的计算能力,业界通用的方案是增加特定能力的Accelerator(加速器)。
GPU在某些运算方面的能力比较强,高端GPU在PC系统中成本比例又较高,如果不找到附加的应用,就浪费了对GPU的投资。所以开发GPU来辅助CPU 加强整个系统的计算能力,当然是个不错的想法。
不过,在PC机上挖掘GPU的能力进行高性能计算是一种相对低层次的高性能计算,不可能替代中高端的高性能计算——网格多节点模式下的海量计算。
我想问一下Nehalem 低端版本整合的GPU核心是不是G45的GPU核心
ATOM配套的Poulsbo集成了PowerVR SGX图形芯片,Intel是居于什么原因采用第三方的集成GPU核心?为什么不集成自己的图形芯片
Floatinggate,
Nehalem 集成GPU的版本是目前G45集成GPU之后更新一代的核心,不是Larrabee.
目的是不一样的。Gpu主要解决的问题是逻辑无关的并行计算,如何把并行的计算能力组合成逻辑功能是我们真正所探求的……哲学上是不可能的
哈哈 商业机密来了
不过真是想知道core2 怎么加宽的ipc
找老师能不能定期在blog上讲解一下设计理论上的知识?
就算科普啦
intel上套了,GPU因此而被普通人认识。
希望Intel能建立笔记本统一工业标准,开启笔记本的DIY时代。
http://blog.zol.com.cn/723/article_722903.html
我用过的第一个独显就是i740,IDF上英特尔将要年内推出独立显卡芯片了,而且还个x86处理器,很让人感兴趣。
有个小小问题想问一下:IDF上公开的Larrabee计划,是一款基于x86处理器的独立显卡产品,图形加速还可以支持超宽向量(vector)–512比特的SIMD新指令–等效于16个单精度浮点计算或8个双精度浮点计算。
天啊? 是真的吗? 为什么要做这么宽啊? 大大增加设计复杂度。 而主频、热耗等等都很有挑战性。
我感觉分为2个256比特,就已经很好了。分为2个256比特–我是指,一条vector指令就处理256比特数据,用两条vector指令来代替。或低端Larrabee可以减为256比特?
呵呵,又重复一遍惊讶感觉,勿要见怪:感觉一条vector指令处理512比特数据,也太宽了, 比256比特的AVX指令还要宽一倍,Larrabee的vevctor指令让人惊讶!!天啊? 是真的吗? 为什么要做这么宽啊?
还有个问题,我也很奇怪传统显卡Nvidia的G90的图形指令好像都是标量才32比特的宽度。 呵呵,两个极端–G90指令是最窄的才32比特, 而Larrabee是最宽的。 G90是靠SP核心数量爆多与多线程来轰炸,而Larrabee竟然仅有24到32个核心,而SIMD的vector指令极宽达到512比特。 相对传统显卡,Larrabee与图形加速应用方面/显卡性能,是否具有效能的优势? 是何原因?
请问个CPU-GPU的问题: 我相信1280*1024/no-AA或低AA条件下,Larrabee可以得到惊人的3Dmarks分数。 相对于传统显卡,Larrabee处理器同样硬件集成了纹理采样处理单元, 而”后端”处理上,Larrabee具有实现”后端”软件编程的特殊优势,例如使用光线追踪特效,可编程这点很好,也很可能是将来的趋势。 但是如果运行近年的游戏软件,其后端处理几乎都还是基于光栅化原理,如果Larrabee以软件实现光栅化,以及抗锯齿AA,尤其是开启高AA时,开销是否太大?效能低于传统的硬件光栅化。 我说的”后端”处理–是泛指–显卡把已经计算渲染好的三维数据->二维显示平面的处理过程。 IDF上对Larrabee的介绍还特别指出传统显卡硬件化只能按光栅化原理来实现,而Larrabee具备可编程性,可以更灵活多样的实现。 我的问题是, 如果Larrabee以软件来实现光栅化、或以软件来实现抗锯齿AA问题, 例如AA 16X16环境下,Larrabee如何把可编程优势转化为性能优势?
Unigs, 你好!
具体的Larrabee设计细节还需要等到以后才便于公布,因为在设计中会有变动。
多核并行计算的效率是硬件具备的,要充分发挥这么多核心的能力,主要靠算法以及API,只有优秀的支持并行运算的算法和便于程序员使用的开发工具/编程接口才能把Larrabee的可编程优势转化为性能优势。
目前PC机的能力还不足以实现实时的光线追踪,主要是计算能力还不够强悍。如果Larrabee出来,就值得期待了。
谢谢!
原来已经出现在ppt上的设计细节,还可能有变化。 我是根据以下已经公开的信息:
(1) 16 SIMD 超宽Vector数据
http://publish.it168.com/2007/0607/20070607034502.shtml
http://publish.it168.com/2007/0607/images/469195.jpg
http://publish.it168.com/2008/0319/images/932791.jpg
(2)硬件集成纹理单元
http://hardware.cfan.com.cn/mainboard/news/h004/h08/img200706190924031.png
原来更多具体的Larrabee设计细节还需要等到以后。
我希望Larrabee能够很好的与DX11配合,据说DX11开始支持光线追踪了。 更希望Larrabee能很好的实现传统显卡性能, 图形加速性能效能优于传统显卡。
有的信息是被不恰当的披露出来了,呵呵!
产品最终的特性保守的说要等到产品定型后。
赵军:
请问,那么CELL的8个SPE单元能够做到逻辑相关性的工作吗?
此外,为何一些游戏开发商说,他们的游戏很难完全利用掉8个SPE核心,最多只是3,4个而已?他们的这话是基于甚么的原因呢?
最后,为甚么CELL的频率难以提升和良率低呢?难道听人说仅仅是因为CELL的设计复杂及核心数量多吗?
建议Intel修改ATX电源标准。http://blog.zol.com.cn/744/article_743136.html
又读到赵老师的文章了,很受启发,谢谢赵老师!
期待赵老师更多的真知灼见!
嗯,讲得很好。CPU和GPU各有所长,又互相协调互补不足。
我非常期待Intel的Larrabee ,我相信它是图形处理上的一次革命,即便是一些高负荷通用计算的任务,也可以通过它来得到加速,应用面因该比目前的GPU更加广泛,设计思路是很正确的。
另外,期待光线追踪时代的到来,我会支持Intel.
赵老师:
你好,我想问一下,如果编程作数值计算(不做图形,主要作数学计算)GPU会比CPU快吗?
如果做GPU适合的类似坐标变换,并行渲染方面的数值运算,GPU是比CPU要快。这也是英特尔将来的众核GPU——Larrabee的主要目标,作为显卡只是它的应用之一。