Subscribe to RSS Add to Technorati Faves Digg This Page Send to Stumble Upon Bookmark on Delicious

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

赵军 (Jun Zhao), 2008年5月26日

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擅长和不擅长的各个方面”。


评论 (38)
del.icio.us StumbleUpon Digg It
其他归属标签: , , , ,

评论

2008年5月26日  |  Magic.Peng :

写的清除明白.不过赵老师近期博客反复提到GPU,不知是否暗示Intel开始对GPU市场有些想法了?

2008年5月26日  |  赵军 :

Magic:

你好!

Intel在最近几次的IDF(英特尔信息峰会)上已经介绍了独立显卡GPU方案的计划, GPU的开发代码叫Larrabee。 另外,英特尔的集成GPU方案的产品发展蓝图还会继续。

2008年5月27日  |  moonbright :

把CPU解放出来,让GPU忙它该忙的事情吧!

2008年5月27日  |  AIR FORCE :

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

尽管目前GPU还不能进行更多的应用,但是随着GPGPU的发展,凭借着GPU超越CPU几十倍的指令处理能力,很多事情在未来由GPU处理会比CPU更快,比如一些多媒体处理,杀毒软件的扫描等等。

这点赵老师怎么看呢?

当未来Intel的Larrbee出现之后,一个崭新的基于X86架构的显示核心时代到来,那时候GPU和CPU的比重是否会发生变化呢?

2008年5月27日  |  赵军 :

GPGPU可能还只是个概念的东西,GPU快只是快在大量平行数据的并行运算上,快的原因是它的大量适合这类运算的并行管线设计。

对于程序执行的复杂逻辑和判断运算,需要对指令操作优化的架构,这类设计是GPU没有的,也没有必要有,有的话就是CPU了。所以GPU不是具有几十倍的指令处理能力,只是大量平行数据累计运算效果的倍数。

GPU的专长还是图形处理需要的运算,和一些与图形运算类似的计算类的应用。

2008年5月27日  |  acwell :

Larrabee是否支持X86指令集?

2008年5月27日  |  赵军 :

Larrabee就是支持x86指令集的,只是把和图形运算关系不大的指令都裁减了,可是说是x86指令集的子集。

2008年5月27日  |  Edison :

寄存器不足、非固定的指令长度这些x86的天生缺陷,这个邪恶的ISA只有设计它的人才喜欢它。

2008年5月28日  |  lislee :

赵老师怎么看NV的CUDA?

2008年5月28日  |  赵军 :

Edison,

早期学院派的人都喜欢RISC(精简指令集计算机),因为简洁,符合数学的“简洁就是美”。我在大学上学时教授都是这么教的,当时学术派都倾向RISC会取代CISC(复杂指令集计算机)。

x86的指令集起源是基于CISC设计思想而设计的,不过事实是RISC和CISC两个流派,谁也没有取代谁,而是融合了。现在英特尔架构的处理器采用CISC指令集,架构的设计中却引用和创新了很多RISC的优秀设计,例如指令流水线的设计。所以现在英特尔架构是RISC和CISC的融合设计。

如果只是从指令的多寡去批评x86指令集,不免太片面了。就是在RISC在学术派流行的时代,大家一样清晰地剖析了RISC和CISC各自的优点和缺点。

“邪恶”是妖魔化的语言,如果是讨论技术没有必要。学术本来就是百花齐放,百家争鸣,只要能够自圆其说,就可以独树一派。

我这里就列举一个方面,RISC的缺点有可能就是CISC优点,RISC的优点也可能是CISC的缺点。没有100%完美的设计。

RISC的指令少而且精炼,所以架构设计没有太大束缚,核心架构比较简洁高效,可以有更多晶体管用于寄存器和Cache等等的设计,指令流水线的设计也非常直接了当,指令的执行效率也比较高。但是编译程序的设计就有相当的难度,因为直接可用的指令很少,复杂的运算需要编译器把它们转换成RISC少数的10几条指令来执行,如果RISC太多了,超过了50条,呵呵!就违背了RISC设计的宗旨。因此,RISC一般没有直接可以使用的浮点运算指令——加、减、乘、除。CISC就不一样,甚至还拥有支持更复杂运算的指令。

2008年5月28日  |  赵军 :

关于CUDA, 按照Nvidia的说法这项技术处在起步阶段,CUDA(Compute Unified Device Architecture)是运用GPU空闲计算能力的一项技术,可以使用GPU建立起一种效率更高的密集数据计算解决方案。

实现高性能计算的途径很多,如协处理器,加速处理器等等。CUDA也是其中的解决方案之一。

2008年5月28日  |  Travis :

赵老师能否评价一下SMT、多核心CPU和GPU的并行性和实际应用中这种并行性的可用程度? 多核CPU和SMT依赖于线程级并行而GPU依赖于线程乃至数据的并行来提高效率,这些有多大的发展空间呢? 另外开启SMT在功耗上会有多大上升?

2008年5月28日  |  Edison :

对x86的批评显然不只是在CISC和RISC的对立上,事实上在CISC、RISC激辩之前,x86已经是倍受争议的。

例如x86支持分段,而同期的其他ISA都选择了paging;整数数据采用extended accumulator machine而不是纯GPR machine;在浮点处理上采用同期所有其他厂商都已经抛弃了的堆栈。

现在的x86处理器采用的post-RISC本身当然也会造成不少问题,例如:虽说只要MROM只要有空间,增加新指令就会是近似免费的,但是未来设计新的处理器时,这些旧的微指令所对应的微代码执行次序也必须被打包到新的处理器中尽管它们的使用频率并不高。

x86只有8个寄存器,在实现流水线化和并行化的时候,和其他寄存器更多的ISA相比,遭遇data hazard的机会要高出不少,特别是Larrabee这类产品的时候,如果其指令集不作重大的修订,其并行化/流水线化的效率用噩梦来形容并不为过。

“RISC一般没有直接可以使用的浮点运算指令——加、减、乘、除”这句话的基点不知道是什么(早期的ARM?),IBM的Power、SUN的SPARC等哪一个没有直接可用的浮点运算指令?人家很早就实现了3操作数的FMAC/FMADD指令,x86基本上需要到SSE5才能实现。

x86的另一个问题就是缺乏标准,IBM的Power、SUN的SPARC都有严格的定义,例如Power ISA 2.03、SPARC V9。

x86是啥?谁能说得清楚?

x86的古怪特性使其在实现流水线化/ILP上的复杂度足以让让Intel的对手难以生产出能与之兼容、更快、更可靠且成本更低的x86处理器,让x86厂商一旦失去独立自主的先进工艺和产能的话就无法在市场上立足悲惨局面。

2008年5月28日  |  赵军 :

RISC设计的精髓是尽量采用精而少的指令。理论上,2~3条基本的指令就足以组合出任何复杂的指令。你可以说现在Power, SPAPC指令集还是严格的RISC指令吗?FMAX/FMADD 是精简指令吗?

x86 指令集并不古怪,它的设计之初是为PC机,就是个人计算机设计的,而不是为服务器和科学计算设计的。而且,最初只是8位机,那个时候要求x86指令采用paging, 是不是不切实际?

后人对前人做各种批评是很容易的,因为不用考虑历史的背景以及当时应用、经济和技术水平的限制。例如,个人计算机(PC)在当时听起来就像天方夜谭。

正是经济实用和开放的这些特点,才使计算机(PC)从科学家的实验室走向千家万户。PC机的诞生和发展是计算机史上的革命,x86指令集的贡献无法磨灭。

因为PC的应用人群急剧扩大,所使用软件累计的资产极其庞大,为了保持旧的软件和操作系统都可以在新一代的处理器上运行。支持原来的指令集是x86 CPU产商不得不担负的沉重的包袱,否则就要求用户摒弃当前使用的软件,购买新的软件。这个是CPU产商说了算的吗?用户愿意出这个钱吗?一句化,市场原则的结果。

作为生产支持x86 指令集的CPU厂商之一,英特尔也想重起炉灶开发并推广新指令集的CPU。如在386 CPU之后,Intel 基于RISC技术的860和960的CPU,但是市场并不接受,只接受386的后续者486,原因很简单——支持x86指令集的软件随处可见。如果你知道这段历史,你也许就不会用上述的观点了。

“继续支持x86指令集是针对竞争对手”,这个观点更没有任何依据,相比你所说的Power, SPARC 等等的CPU, 历史上以及现在生产和设计x86 指令集兼容CPU的厂商要远远多于前者。

x86 指令集没有标准?那么世界上为数最多的在x86 CPU平台上程序员是怎么编程序的。CPU兼容厂商怎样生产兼容x86 CPU的。不要说通过高级程序语言,那么编译程序,解释程序,大量的开发工具包呢?

如果像你说的,为了保持竞争的目的,英特尔在不断丰富增加x86指令的时候还有必要及时发布更新x86 指令集的白皮书吗?需要公布SSE 每一代的指令集及其技术规格吗?

2008年5月28日  |  INLOVE :

说了这么多,我只关心INTEL的四核CPU 什么时候能降到600元? 这取决于AMD的新产品 还是INTEL自己的产品线增长? 还有INTEL 的独立显卡什么时候能面世?

2008年5月28日  |  Edison :

RISC与指令的复杂度本身并无直接关系,它的基点是所谓的8:2定律,在CPU内把最常使用的指令实现为1个周期执行,RISC的Reduce并不是针对指令的功能,而是指令的格式。

对图形或者多媒体操作来说,FMAC或者说FMAD是比较经常使用的指令,而RISC处理器因为其实作的微架构都拥有较多的寄存器,实现FMAC这类三操作数的指令较x86更加容易。

Intel或者AMD的优化指南和开发者手册都是完全针对自己的CPU,而且各代处理器隐藏的指令一大堆,以最新的SSE4.1来说就有一堆暗藏未公开给MS的指令,Intel有没有想过把这些undocumented instructions能公开给大家呢?一旦有软件使用到这些指令,日后会造成的后果将难以预计。当然这不仅仅是Intel的问题,其他x86厂商或多或少都有这样的问题(http://grafi.ii.pw.edu.pl/gbm/x86/)。

与之相比,IBM等厂商都有相当严谨的版本定义,能很好地约束软件开发人员以及CPU厂商的开发不至于产生一些难以预计的后遗症。

如果x86足够好,Intel根本没必要作其他完全不同于x86的ISA的开发,IA64就是对x86设计思路的大彻大悟。

i860推出的时候已经差不多踏入是90年代,x86经过10年的积累,即使是Intel自己都难以挽转,微软的Dazzle也都停摆了。

2008年5月29日  |  acwell :

其实GPGPU和CUDA是两回事……

2008年5月29日  |  Karri :

Edison弟弟说话过于情绪化了,这讨论技术不必先扣上道德的大帽子,邪恶不邪恶的先不去谈,没有X86也许PC更完美,但是有了X86 PC也不会没有完美的可能,这本身并不矛盾。

2008年5月29日  |  赵军 :

Edison,

非常感谢和欣赏你的观点和技术分享。

这个话题和我这篇博客的话题有点远了,以后有机会,我会写一个关于指令集,或者是RISC和CISC的话题。

你讲的RISC指令复杂程度问题和8:2原则,已经不是最初的RISC的设计宗旨。已经是RISC和CISC的混合设计(Hybrid)了,早就不是纯RISC。

多个浮点加和乘等等操作,不是在SSE5才实现,相信你是笔误了,目前才到SSE 4.1。这些运算在SSE早期就实现了,只是到酷睿架构才在1个时钟周期里可以执行128bit的SSE指令。

安腾的IA64根本就不是x86指令集,它的指令集是全新设计的,适合后端大型运算应用的并行指令,所以没有x86指令的历史包袱。

“难以预计的后遗症”,我还是第一次听到。我没有发言权,只有对x86和其他指令集都有丰富系统编程经验的人才可能做出中肯的评论。

不过,我有过这样的体会,以前在UNIX环境下编程都觉得比Windows 环境下受到的约束更多。这个很自然,PC机的环境要开放的多,PC机顾名思义,就是个人计算机,系统最开始的设计就是把所有资源都是开放给使用者,包括软件和硬件。严格的规范和更宽松自由度大的设计环境本来就是一对矛盾。

90年代就是486,Pentium 的时代呀。i860就在那个时期想和486共存。

2008年6月04日  |  木纹 :

从纯技术上来看,以上解释是合情合理的,CPU,GPU在很大成都上有分工的不同,但作为一个需要推向市场的产品,是否应该多考虑一下消费市场的需求,再来看CPU,GPU的走向。 您的解释非常的清楚“CPU现在只要发个指令,如“画个圆球”,给GPU就可以了,GPU完成三维图形的绘制,然后通知CPU完成的情况,等待下一条指令”,但现在市场细分的情况如何呢?大量的个人用户,网吧多数的时间是在做大型的游戏运算和影片播放,假设这部分用户和普通的办公用户各占50%的比例,那么这50%的游戏视频客户的机器配置,是否应该以显卡为重呢,至少从价格上来看。这个时候CPU起到的作用是否应该描述为门卫或秘书,负责开门关门,传达基本的消息,将外界的诉求告知真正的解决者GPU。这种情况下CPU,GPU的孰重孰轻是显而易见的。(实际上网吧都是使用的性能较高的独立显卡)。GPU的扬眉吐气,完全可以在对硬件要求低的操作系统的搭配及各软件WEB化的时代到来。

所以CPU,GPU的发展趋势不能以各自的技术特点做结论,个人感觉CPU,GPU以及CPU,GPU芯片级的整合都应该有不同的发展方向,其发展趋势完全有各自的市场容量决定。

2008年6月04日  |  Feng :

能否解释一下CPU构架关系到哪些数字

2008年6月04日  |  赵军 :

木纹:你好!

你的观点可能受到外面过度强调GPU重要性的宣传。实际情况是,只有高端的3D游戏需要高端的独立显卡,注意是高端的显卡。而目前,在网吧里玩的游戏有几个是DirectX 10的呢?

GPU只是执行图形运算和显示,但是没有程序执行需要的大量逻辑运算能力,就是GPU没有执行操作系统和程序的能力。把CPU比喻成门卫或者秘书是故意矮化CPU的重要性,相信你也被误导了。

门卫可以做出公司的决策吗?CPU执行的是操作系统,系统软件等等,包括游戏程序,所以要比喻的话,CPU更像公司的总经理,而执行图形运算和显示的GPU没有程序逻辑判断能力,功能比较专注单一,更像公司的一个比较重要的部门,如市场部,更多的是执行公司一个方面的任务而不是为整个公司做出决策和为整体执行负责。

GPU解决不了游戏中智能的问题——人工智能,还有许多其他问题。如果游戏没有智能,光有好的色彩,好玩吗?

另外影片播放和视频转码以及其他多媒体应用,是CPU的强项,不是GPU。关键是不要配备太低的CPU。低于500元的CPU是不行的。稍好的独立显卡都要700元以上,而且主要目的是游戏一项。面对操作系统,为CPU投资这么少,是不是太厚此薄彼了,不符合均衡计算的配置原则。

如果你完整的看过我的两篇CPU和GPU关系的博客,就可以找到答案的。

2008年6月04日  |  赵军 :

Feng,

不好意思,不懂你的这个问题。 “能否解释一下CPU构架关系到哪些数字”

2008年6月05日  |  Tao :

就现在一般CPU对于一般游戏逻辑程序处理能力的负担量恐怕也是微乎其微。除非你说的顶尖的3D游戏。

2008年6月05日  |  botaizi :

深入浅出,通俗易懂,看了获益良多! 呵呵,非常喜欢您的行文风格,赵老师。 “以后有机会,我会写一个关于指令集,或者是RISC和CISC的话题。” 对您的文章很是期待啊!

2008年6月05日  |  赵军 :

Tao, 你讲的是对的。同样,对于一般的游戏,主流的3D游戏,现在集成显卡也足够了。所以一味强调只要是游戏就需要高端显卡,是不是有点过了? 毕竟就算是游戏也只是电脑的一个主流应用之一,十之一二而已。

用户打交道最多的还是操作系统,以及其他更多的主流应用。

2008年6月05日  |  FLOATINGGATE :

NVIDIA用ARM CORE加GPU来和ATOM竞争,INTEL有何评价?

2008年6月05日  |  李子孚 :

请问赵老师Larrabee是否支持光线追踪? 驱动设计会很复杂么?

2008年6月06日  |  赵军 :

Floatinggate, 市场最终会决定它们结果,也就是最终用户说了算。

但是,我们有信心赢得用户,因为英特尔公司的优势不光是CPU的设计能力,一流的CPU制造技术和不断创新的精神,还有把符合用户需要的使用模式变成现实的丰富经验。例如,迅驰平台的创新造就了今天笔记本电脑普及的现实。

ATOM 技术会带来MID——移动互联网设备的迅速发展壮大,继续“数字化你的生活”。

2008年6月06日  |  赵军 :

李子孚,你好!

我还不清楚Larrabee是否支持光线追踪,产品的研发部门还没有计划公布Larrabee 更多的技术细节。

就具体应用而言,目前市场上的显卡还只能支持光栅渲染技术,因为游戏实时性的要求,显卡的计算能力还不能做到实时光线追踪的计算要求。因此,目前数字动画电影使用的光线追踪是靠多台计算机/工作站非实时的运算出来了,连续几天,几个星期的连续运算,主要是让众多CPU协作完成的。

如果多核CPU和GPU普及了,真正光线追踪技术运用到实时游戏中蔡可能变成现实。

2008年6月07日  |  李子孚 :

赵老师好 呵呵 我想问问larrabee驱动设计的问题 如果它是基于X86指令集的 那么驱动会不会很容易做?是不是要针对X86指令集的显示部分做优化?我完全是菜鸟 希望您能给予讲解一下其原理

2008年6月07日  |  李子孚 :

还有我记得intel前几个月演示过一个1280×720的光线追踪视频 用的是双4核心penrey好像 那个是实时的吗?

2008年6月10日  |  赵军 :

子孚,你好!

很好很专业的问题,Larrabee是属于x86指令集的,如果驱动部分只是让显卡工作,就比较容易做,但是要充分发挥Larrabee的最佳性能,驱动程序就不是一件简单的事情。

如何让x86指令实现高效的2D,3D加速效果就是驱动程序的关键所在。

关于第2个问题,那个演示过的1280×720的光线追踪视频是实时的,可是系统需要2个四核的CPU,一共8个内核,所以现在还不可能变成主流应用。如果8核时代来临,实时的光线追踪就可以实现到游戏中。

2008年6月12日  |  李子孚 :

赵老师好: 多谢您的讲解 看如上回复估计四核心八线程的nehalem出了估计就可以支持光线追踪了吧? 俺是无比的激动啊 另外就是我是学微电子的 可是只有本科毕业 现在想了解这方面相关的知识 可惜没人会 您能加我个联系方式吗? qq491330740 msn:zifuxyx@163.com 如果能得到您的指导 万分荣幸

2008年6月16日  |  不才 :

CISC和RISC的争斗是利益使然,而且那时CISC尚未成熟。现在CPU已经成熟,上升空间已经不大,GPU很可能是未来。 大机时代或也曾嘲笑过小PC,但由集中到分散的趋势已无法逆转。 关于实时光线追踪,Navida刚收购了一个公司做这个,集成到GPU中指日可待。http://www.pcper.com/comments.php?nid=5674。我是INTEL忠实的fans,但是正视现实,试着预测未来是客观的态度。未来是那样就是那样,未来从来不是我们想的那样。

2008年7月07日  |  elvis :

其实很期待Larrabee,在nv与ATI(现在该叫AMD了)之间显卡的你争我夺,架构的审美疲劳后,终于显卡业的一次创新来了,显卡核心基于x86确实是个很大的优势,给了编程人员很大的自由度,难度也不大,但同时也是劣势,因为要编一个很好的驱动,能完全发挥Larrabee性能的驱动将会是一个很大的考验。现在的cpu也才4核,很多程序现在都不能很好的利用到4核并行计算,更何况是Larrabee的24-32核,但必定创新是好的,我也相信intel的实力。至于时时光线追踪,不光只能用在游戏里,普通的视频,到专业级的渲染都可以用得到,但现在谈这些还尚早,关键是看intel对Larrabee的光线追踪的定位,较快能用到这个技术的应该会是视频方面吧,即使是8核的Nehalem估计实时光线追踪也很吃力,如果每次到用到光线追踪的地方,cpu都是100%的话,只能说明这个技术离普及尚早,所以对于光线追踪还是再等几年比较好。

不要把视线多盯在Larrabee的光线追踪上,还有很多特性是值得我们关注的,比如intel收购的物理引擎公司Havok,那在以后的产品中Nehalem和Larrabee中是会都集成Havok物理引擎还是只有cpu集成,Larrabee会集成nv收购的Ageia物理引擎吗(Havok物理引擎和Ageia物理引擎现在都是免费的),如果Larrabee集成了Ageia物理引擎,cpu用Havok物理引擎,那如何协调呢,完全是靠程序中调用的代码来控制吗,我相信这2种引擎各有优点,如果程序中某些特效用到了Havok,有些用到了Ageia,那在协调的时候是否会出现问题,针对游戏这一块,以后会不会出现包装上写有为什么什么物理引擎优化的字样,但有2种标准可能会有混乱的感觉,我认为既然现在2家物理引擎都免费,intel应该发挥带头大哥的作用,集2家之所长是物理渲染技术标准化,就像DX和OpenGL一样,是之有一个统一的标准这样才能使其快速发展,也有利于自家发展。

2009年9月04日  |  自学困惑着 :

赵老师:看了你的文章很受启发。 我现在是在自学计算机,但有一些原理性的东西不是很清楚。 比如:在学汇编的过程中,结合看过的计算机组成原理类的书籍,我大概认识到,用代码将图形的信息写到对应的内存单元(显存所处的地址空间,不同地址对应不同位置的像素),则可以在屏幕上显示出需要显示的图形。 但是,这个过程就看不到端口的作用。而显卡也被我简单理解为只是把显存的数据转换为模拟信号供显示器显示。

但现在我们都知道显卡的主要作用在3D图形加速。而且也知道了GPU。所以,具体的程序控制流程又有点迷惑了。

看了赵老师的解释,大概明白,总体显示过程还是显存数据到显示器转换的过程。

但是,是不是您举的例子指的是:cpu将一个控制信号,写入(汇编是in 指令吗)到显卡端口。然后,GPU读取该指令,并计算后,将结果写入显存。然后就是显存通过显卡的转换变为模拟信号供显示器输出。 是这样的过程吗??

还有,intel的mmx多媒体指令集。我看到的一个说明是指的在cpu中进行处理,思路也基本上是采用多位寄存器实现数组数据并行处理以提高处理速度。

所以,不清楚mmx与GPU之间有什么区别? 是处理类型的分工不同吗?

现在也是cpu可以直接写显存而显示图形吧?就是显示器的显示仍然是 显存中的数据 按一定频率被显卡转换后在显示器上显示。

只不过现在 显存中的数据的来源多了一种是吗? 一种仍然是cpu直接运算后写入的,一种是cpu通过给gpu发控制信号经gpu运算后由gpu写入显存的,是这样理解吗?

2009年9月15日  |  赵军 (Jun Zhao) :

你问的问题很专业,我试着回答这些问题:

  1. 现在一般应用层面的程序员都基于应用程序编程接口(API)来编写2D和3D图形,如通过调用DirectX 2D/3D 或者OpenGL中的图形函数,这些API再调用显卡的驱动程序实现具体的图形绘制和显示。除非你要编写显卡的驱动程序。

  2. 现在大部分LCD 液晶显示器都直接可以接收数字信号,内部LVDS, 外部DVI, HDMI等等,不需要将显存的图形数据转成模拟信号。除非用的图形接口还是老式的VGA端口。

  3. MMX指令集现在叫SSE 指令集,Streaming SIMD Extension,即流线化单指令多数据扩展指令集。SSE 指令是由CPU内部为多媒体指令优化的执行单元来并行执行和处理的,和GPU没有任何关系,GPU没有办法执行任何目前x86指令,当然包括SSE指令。

  4. 现在CPU还是可以直接写显存,不过GPU可以自己完成这些简单的操作。GPU以前的角色没有大的变化,只是将来GPU可以帮助CPU做非逻辑性的并行数值运算。CPU可以参与图形运算,可以把结果写入显存,但是没有必要,GPU可以完成这些操作。CPU应该去做更加复杂的逻辑运算和程序运行上的并行调度与执行等等。

发表您的评论






评论准则:欢迎您发表评论,不过所有评论必须适度。带有攻击性、偏离主题或带有欺骗性的评论将会被删除(不显示)。在向英特尔的博客提交评论之前,您必须同意我们的法律信息隐私条款中的规定,并且如果您大于或等于 13 岁,就必须在您的评论中附上自己的姓名。您的姓名和个人信息不会被用作其他用途,并且您的电子邮件地址也不会被公开。

免责声明:此处以及所有相关评论中表述的观点均为原作者个人的观点,并非必须反映英特尔的看法。所有英特尔名称和商标属英特尔公司或其子公司在美国和其他国家或地区的财产。其他名称和品牌可能归其他公司所有。