热词世界杯

也谈CPU和GPU之间的关系:融合、取代还是共存?(下)

2008-05-07 10:23 出处:pconline 作者:PConline产业资讯 责任编辑:zhengzhihui

  编者按:本文是英特尔中国区先进技术支持与服务部资深架构经理赵军在博客@英特尔中国上最新发表的文章《也谈CPU和GPU之间的关系:融合、取代还是共存?》的下篇(上篇请参考这里),提供此文的目的是为网友提供更多信息和参考,其观点不代表本站立场,敬请留意。

  三.CPU和GPU在今天计算机中的作用和位置

  CPU的作用:

  CPU 作为一台计算机的核心,它的作用被证明是无法替代的,过去是这样,今天依然是这样,将来应该还是这样,只不过可能被增加和赋予了更多更复杂的功能。

  为什么CPU可以胜任为计算机的核心,能够控制一个复杂而精密的电脑系统?为什么CPU可以当之无愧地被称为电脑之“脑”而不是其他部件?因为CPU主要是面向执行操作系统、系统软件、调度和运行各式各样应用程序以及协调和控制整个计算机系统而设计的。具有通用性的特点,也就是“全才”或者“通才”,什么都要会,当然这并不表示CPU每项任务都具有顶尖水平。

  集成了百万计,千万计,甚至数亿计晶体管的CPU芯片,除了具有计算能力的电路和结构,还拥有控制和指挥其他硬件电路相配合的中央控制器,现代CPU还拥有更多具有“思维”能力的电路和结构,如逻辑判断,推测执行,预测执行等等。只有具有了这些特质,CPU才可能胜任电脑之“脑”的工作。

  那么CPU靠什么来“思维、指挥和控制”呢?答案是指令集。指令集是CPU能够处理的全部指令的集合,没有指令集的芯片不可能被称为是CPU,指令集可是说是CPU的思维语言,是CPU的“智能属性”,也是它有别于其他芯片的根本属性。类似于人脑,任何人的思维过程都有语言的参与,中国人用中文思考,美国人用英文思考,如果习惯于讲方言,人们甚至用方言思考,人们在本能或者下意识状况下都是用自己最熟悉的语言思考。所以指令集就是电脑之脑CPU的语言,CPU就是用指令集“思考”。

  大家所熟悉的x86指令集就是我们今天大多数人使用的CPU的语言,x86指令集是由英特尔公司发明,开发并不断增强和完善的。任何英特尔架构的CPU和兼容CPU都采用x86指令集。任何程序不管采用什么高级程序设计语言编写的,都需要通过高级语言编译程序或者解释程序先翻译成 x86指令才可以被CPU执行。

  如C语言,C++语言,Pascal语言等等高级程序语言都是供编成人员使用的,人们可以把自己“思维和指令”通过高级程序设计语言表达出来,通过编译程序或者解释程序变成CPU可以明白的指令,CPU就可以遵照人们的“思维和指令”一丝不苟、不折不扣地执行。

  有了指令系统,CPU就可以通过它来控制、指挥、协调和调度整个计算机系统的各个子系统,让它们相互配合、有条不紊的完成各种各样的任务。

  GPU的作用:

  除了CPU——中央处理单元,中央处理器,计算机系统中还有众多的PU——处理单元,统称xPU。由于它们不具有CPU的通用性,而具有专用性,习惯上它们都叫控制器或芯片。如内存控制器,中断控制器,以太网网卡芯片,USB控制器等等,虽然不常见,但是我们当然可以把它们也叫成:

  Memory PU —— 内存处理单元

  Interrupt PU —— 中断处理单元

  Ethernet PU —— 以太网处理单元

  USB-PU —— USB 处理单元

  所以现在图形计算能力比较强的图形芯片被称为GPU——图形处理单元就不足为奇了。GPU具有专用性的特点,擅长图形计算和处理。

  GPU的前身就是显示卡的主芯片。显示卡和显示器等等组成计算机系统中的图形子系统。最早的显示卡功能比较简单,所以也叫显示器适配卡(简称显卡),它是连接主机与显示器的接口卡。现在的显卡都是3D图形加速卡,主芯片也被冠以GPU的新名字了。

  今天显卡的主要作用并没有发生根本的变化,其作用还是将CPU的输出信息和指令转换成字符、图形和颜色等信息,传送到显示器上显示。不过,今天的显卡在执行CPU发出的图形指令时具有更强的执行能力。下面我就来给大家解释一下。

  早期显卡的图形处理能力非常弱,基本上只是起到传递的作用,CPU如果想在图形方式下画个简单的图形,如正方形,园等线条图形,都需要把组成图形的每个点需要显示的位置、点的大小、颜色都一一告诉显卡,显卡按部就班在显示器上画出来。

  随着操作系统和应用程序对复杂且高质量的图形要求越来越高,CPU专职来做这些图形处理工作就力不从心了,也得不偿失,而且也会造成CPU的效率低下。因为CPU的设计是用来处理系统任务和程序调度的,不是为图形处理优化的。

  于是图形加速功能就被赋予到新的显卡(主芯片可以叫GPU了)当中,支持2D图形加速的显卡出现了,它大大缓解了CPU的图形处理压力。有了2D图形加速功能的显卡,CPU如果想画二维图形,现在只需要发个指令给显卡,如“在坐标位置(x, y) 画个长和宽为a * b大小的长方形”,显卡的图形加速器(GPU)就可以迅速在显示器上指定位置画出大小相符的图形,画完后GPU就通知CPU,“我画完了”,然后等待CPU发出下一条图形指令。

  现在的GPU除了具有2D 图形加速功能,更多的是在不断加强3D图形加速的能力。 同样的道理,GPU也把繁复的3D图形处理的工作从CPU接管过来,CPU现在只要发个指令,如“画个圆球”,给GPU就可以了。

  有了图形加速器,CPU就从这类图形处理的任务中解放出来,可以执行其他更多的系统任务,这样就提高计算机的整体性能。

  不过,并不是所有和3D图形处理相关的运算一下子都被GPU接管过去,“任务”的交接也是逐步进行的,对于GPU不能实现或者尚未实现的计算还是“有劳”CPU来完成。例如,图形的几何坐标变化和光照模型的计算(T&L)在主流的GPU都实现了,以前都是由CPU来完成的。对于当前一些集成在芯片组中的GPU,如果没有T&L的加速,仍然用“软件”方式实现T&L计算——就是CPU来完成。另外,3D图形的着色计算也逐渐转移从CPU转移到GPU中,如顶点着色和像素着色 (Vertex Shader & Pixel Shader)。

  从上面的简单介绍我们可以看出,CPU和GPU工作的重点不一样,CPU担当的责任要大的多,面对的是整个系统,要照顾到方方面面,除了要保证整个系统高速运行,还要确保系统稳定运行。任何错误都可能会是致命的,所以CPU很难做到“专心致志”。它会经常被打断,停下手头的工作,去处理正常的或者非正常的紧急任务, 否则系统就会崩溃。相比CPU而言,GPU的责任就要轻的多,图形计算如果出了错,并不会影响程序本身的运行,最多是屏幕上显示的图形错位了或者是颜色乱了等等。

  没有GPU加速2D和3D的年代,CPU包揽了和图形计算与加速相关的所有活,“活”的不轻松,今天这些工作中的很多都由GPU来代劳了,CPU被解放出来把宝贵的CPU运算和控制资源更多的用于执行系统层面的核心任务。GPU相当于CPU的一位具有图形计算和处理专长的高级助理。

  对于非图形方面的任务,CPU需要的是其他专长的高级助理。GPU今天在计算机系统中的贡献主要是高端3D游戏的3D图形方面的,对于其他更广泛的应用,它是无能为力的。如系统安全方面的加密解密,多媒体数字内容的加工和处理,系统的虚拟化,游戏中的人工智能等等举不胜举。

  将来有机会,我会具体介绍一些“CPU和GPU擅长和不擅长的各个方面”。

分享到: QQ空间 新浪微博 腾讯微博 更多