CPU的作用: 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来执行的。
有了指令系统,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就可以了,GPU完成三维图形的绘制,然后通知CPU完成的情况,等待下一条指令。
有了图形加速器,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不会为图形程序运行的结果负责。
没有GPU加速2D和3D的年代,CPU包揽了和图形计算与加速相关的所有活,“活”的不轻松,今天这些工作中的很多都由GPU来代劳了,CPU被解放出来把宝贵的CPU运算和控制资源更多的用于执行系统层面的核心任务以及其他非GPU类的应用上来。GPU相当于CPU的一位具有图形计算和处理专长的高级助理。
对于非图形方面的任务,CPU需要的是其他专长的高级助理。GPU今天在计算机系统中的贡献主要是高端3D游戏的三维图形方面的,对于其他更广泛的应用,它是无能为力的。如系统安全方面的加密解密,多媒体数字内容的加工和处理,系统的虚拟化,游戏中的人工智能等等举不胜举。
将来有机会,我会具体介绍一些“CPU和GPU擅长和不擅长的各个方面”。
IT168的观后感:从Intel与NVIDIA激励的争论到今天越来越多的文章来明晰CPU与GPU的作用,CPU与GPU的争论新格局其实已经形成。Intel与NVIDIA谁都不否认现有GPU在其专长的图形运算以及类似的高并行运算上极为出色的浮点运算能力;两家也明确了谁都不会替代谁的根本观点。但我们认为,Intel目前的姿态,仍然是不正面回应NVIDIA现有产品的表现,不正面回应OPC,和不对NVIDIA GPU在高性能运算未来前景正面发表自己看法也是可以理解的。其实,新的格局已经从最初双方误读的“取代与颠覆”,变成了现在讨论“重要性”。我们希望看到Intel对现有产品端CPU与显卡的地位发表他们的看法。而至于GPU的未来更广阔的应用,显然Intel也十分看好的。