论文部分内容阅读
进入数字世界
某周五晚上游戏至深夜,趁着一个重要存档的间隙闭上眼睛想休息一会,哪知竟然睡着了。迷迷糊糊中,感觉自己钻进了电脑显示器,进入了一个崭新的世界。周围全是是闪闪发光的电子,来来往往、忙忙碌碌。我着急着回去,于是走近一栋最高的建筑想问问路,哪知被一个等候在门口的电子给一把拉住,“Neo先生,恭候多时了,大家都进场了,就等您了!”
这下想脱身都不大可能了,既然来了就索性进去看看去吧。刚进入会场,就看到偌大的横幅上写着“现代企业管理的历史和创新”……主席台上一个电子清了清嗓子,开始演讲了!
大家好,我是CPU总公司宣传部的比特,英文名叫bit,性别1。和许许多多bit兄弟姐妹们一样,我们都属于信息世界中的生命,大家平时都住在各台电脑的硬盘当中,每天先去各自的CPU单位上班,得到当天的工作任务后就马上开始工作。比如我,有时候去内存做统计工作,有时候又去显卡、声卡等部门参与宣传工作。当然现在讲究社会化分工,我常常要去其它电脑出差,好在现在高速公路发达,顺利的话几秒钟就能回来,效率很高;不过听爷爷辈的人说,他们原来出差的机会很少,而且一趟要好几分钟,唉,谁叫他们那时候只有走56kb/s的山路呢?估计再过几年无线技术发达了高速公路也不用走了,出门直接坐飞机(台下掌声雷动)……
当然,今天我在这儿的主要任务是介绍。下CPU总公司这些年来在公司内部管理以及业务处理能力上的长足进步和经验。在正式开始之前,请容我对CPU总公司和我们日常的工作内容做一个简单的介绍,这将帮助大家对CPU有一个更详细的了解。
CPU总公司早期背景介绍
1971年,是我们CPU,总公司成立的日子,到现在已经36年了。从首任CEO(Intel)4004开始,在总公司不断发展的同时,我们也在逐步完善和加强公司的管理机制;三十多年后的今天,我们已经更名为“CPU,总公司”,麾下两家大型分公司——Intel和AMD,适当地在公司内部引入竞争机制,促进公司的健康发展。在所有人的共同努力下,30年来总公司—直保持每18个月就翻一番的骄人业绩(这里指的是CPU的晶体管数量)。
我们日常工作的主要内容(或者说对象)就是数据(DATA),由我们的bit办事员带回各自的办公室进行处理。一般来说,32个bit办事员我们编为一组,每组都有一个组长;这几年,我们也开始尝试将64个bit组成一组,希望能够提高效率(考虑到一致性,后面提到的一组还是指32个办事员)。而bit们携带的数据一般分为两大类:
◇一类就是整数。我们这将他们分为无符号数和有符号数。无符号数比较简单,组长站在最前面表示高位,这时候一组办事员(32bit)就可以表示0~2-1中任何一个整数;对于有符号数来说,组长仍然站在第一位来表示该数据的正负属性,这样一组办事员就可以表-2~2-1当中的任何一个整数。
◇再一类就是浮点数。什么是浮点数呢?顾名思义,就是小数点的位置不恒定,可以在任何一个数的后面(这在整数中是没法想象的,整数中小数点永远在最后一位数的后面)。一个浮点数可以分为两个部分,一部分表示尾数(同样可以让组长来选择正负),另一组来表示指数。举个简单的8bit浮点数来说,如果前5个bit来表示尾数,后3bit来表示指数,那么这组办事员既可以表示-16000、或者16000,还可以表示16.000、1.6000以及0.16000等等。这样一来,浮点数可表示的范围就要此整数的范围大太多了(整数的8bit只有-128~127的256个值)!
有了整数和浮点数的概念之后,每组bit在表达数据的时候就能够做到得心应手。在总公司诞生初期,仅仅只能处理整数,那时候大家都挤在x86区办公,随着公司业务范围和规模不断扩大,我们必须开始处理浮点数,但鉴于浮点数和整数的巨大区别,公司新成立了名为x87的浮点处理区,专门设立了8个能容纳80个bit的寄存器办公室。可惜由于当时的“堆栈”建筑技术,这8间房仅有一个进口和一个出口,换句话说,如果你想去第8间办公室,也只能挨个穿过前面的7间办公室(效率非常低)。
在我们的公司中,每个部门都由职业经理人根据自身的程序来完成计划好的职责,这就是说经理人的好坏直接关系到处理业务的效率。简单地说,如果一个经理人只知道算加法,当你给他一个“10×10=?”的业务时,他就笨得只能进行10次加法了。说起来很可笑,但是在公司运营初期条件就是这么艰苦(台下很多老bit一把鼻涕一把泪)……
在286、386、486担任CEO的时期,我们总公司主要面向商用办公领域。那时候商用办公市场的特点是要求稳定,效率上只要能够满足文本处理、简单的统计运算就可以了,而且由于交通不便,公司各办事处之间的交流基本上是通过蜗牛速度的“国际软盘快递业务”。
在486 CEO掌管公司的晚期,他老人家开始有计划的试水多媒体领域。但是当时总公司的执行能力有限,这类业务还是通过合作伙伴的来完成的——像是CD和VCD的播放,就需要借助光驱公司和多媒体卡公司的处理能力来完成,CPU总公司当时只是起到一个调度的作用。
Pentium时代酝酿的变革
等到Pentium做了Intel团队的头儿之后,开始在整个集团中强化多媒体业务,特别是影音播放能力。众所周知,影音播放相对于原先的商用办公,特点是实时数据量非常庞大,也是说同时需要处理很多组数据才能完成一项工作。对公司最大的考验还不在这里,因为在486时代,CPU在布置工作的时候往往只能对一组数据分配任务,哪怕有很多组数据还在等候,CPU也只能一次处理一组bit,其他人只有排队等候。在商用时代,这种工作方式虽然看起来没有效率,但是结果也就是存档速度慢点或者需要多等上几秒钟拿到数据而已,所以很多人并不是非常在意。
但到了多媒体时代,要求实时处理的数据突然增多了。像处理160kb/s的MP3音乐数据,相当于每秒中有20KB的数据等待着处理,而且音乐数据与其它文件不同,每一个采样点的模拟值都需要对比前面好几个采样点才能算出来,这种对比、叠加的方式虽然压缩了数据流量,但是给CPU的解码运算制造了更大的麻烦。
如果还跟以前一样,本来0.1秒的完整数据结果只能算到0.09秒处(运算能力不够,最后1/10的数据算不出来),我们听到的就不是音乐了,而是“噼……兹拉……吱……砰……”;当然换做视频的时候,大片《碟中谍》中靓丽的脸蛋可能会出现一大块马赛克,又或者下一帧画面的爆炸场景会变成一大堆五颜六色的方块(色块)……
MMx横空出世——指令集的前奏
是时候进行优化了!Pentium上台后不久,在短时间内就找到了快速处理这类连续任务的方法。他称之为MMX,使用SIMD(Single Instruction Multiple Data单指令多数据)来实现数据的并行处理。这个方法其实很简单:比方说原来负责处理MP3音频的部门一次只让32个bit进去,分配好任务再通知下一组的32个bit;现在这个部门借用Tx87区的那8间大寄存器办公室,专门进行媒体数据处理(记住是借用)。由于x87部门每个空房间能容纳80个bit,因此每个房间就可以进入两组32bit数,8间房可以容纳512个bit。部门经理人宣布:每间房的两个组长按照规范先算出两个平方值,然后把最终结果给我。如此一来,除去数据进入房间和组长传递数据的时间,整体效率也提高了数倍。
当然,改革远远不止加ASIMD这么简单,MMX还赋予了各个部门更大的行政权力。举个例子来讲,以前在处理图像的时候每个点都用24位色深来表示(R、G、B各8位),范围从0~255。我们在玩CS(反恐精英)的时候,某个悍匪衣服E有一个深色扣子,RGB参数为(18,30,22)。这个悍匪走进一条黑色的走廊,按照程序的要求,所有点都要减去20来突出阴影效果,这样一来RGB参数变成了(-2,10,2),怎么出现了-2?与此同时,一个反恐精英也快速逼近了洞口,他身上衣服的颜色是(184,197,210),双方激烈地对峙着……悍匪扔出一个闪光弹,程序立即要求反恐精英这边的画面所有数据乘以2,以显示闪光弹的效果。天啊!怎么所有数据都大于255了呢?
以往碰到这种情况,图形部门都要停下当前的操作,将出错的数据上报给CPU进行仲裁,然后CPU返回仲裁结果:大于255的一概用255来表示,小于0的一概用0来表示。现在MMX将这种仲裁权利直接下放给各个部门,只要再出现数据超出范围的问题,各部门就可以自行裁决了。
MMX式的革新显著提高了CPU对数据的处理速度,也得到客户的广泛肯定;借助MMX的推广这种通过改进公司内部行政执行能力,来提高公司工作效率的方式开始深入人心。不过MMX仅仅是开了一个头,他改进的不过是对整数的处理能力,而对浮点数的处理能力来说却并没有太大的帮助,一场更深层次的改革正在酝酿中……
3DNOW!的异军突起
在那个时候,除了Intel之外,总公司还有很多其它很多分公司,IBM、全美达以及AMD等等。值得一提的就是AMD,在MMX大行其道时,他们的技术力量并没有Intel那么强大,但是他们从MMX中获得了灵感,更可贵的是他们发现了MMX针对浮点数运算的尴尬。于是他们就在MMX原有的基础上,又增加了好几个专门使用SIMD处理浮点数据的3DNow!部门。同时,也为其加盖了8间大寄存器的办公室,每间房可以同时进出64个bit,也就是两组数据专门分给3DNow!部门使用,这就彻底解决了抢办公室的问题。因为办公室的面积足够大,所以在执行加法计算的时候,就可以将加数和被加数一起叫进来,而不是像MMX那样把两个数分别叫到两个房间里;而且这个过程的自动化程度非常高,乃至于经理人不需要系统的培训就能适应3DNOW!的管理方式。这种突破式的创新正好赶上3D游戏和3D处理的兴起,一下子让AMD从一个默默无闻的角落里脱颖而出,此时AMD团队的负责人K6-2在专业领域的风头甚至盖过了同时期Intel的PentiumⅡ。
SSE的全面反击
正所谓三十年河东,三十年河西,Intel绝对不能接受在管理技术上落后给AMD。伴随着Pentium家族第三代负责人走马上任,集合了MMX、3Dnow!优势于一身的SSE管理模式酝酿完成……
SSE(StreammgSIMD Extension)的中文意思就是“S1MD扩展”,即对前代S1MD指令集的补充和扩展。MMX已有的优势自然必不可少,针对3D应用,SSE仿照3Dnow!的处理方式,也新盖了8间寄存器办公室,而且每间房的面积居然是3Dnow的2倍(好在微电子世界中地皮不是问题,要在现实世界中肯定是超标建筑),也就是说可以同时进入4个32bit数据。当然,这8间房也修正过去建设x87区时尴尬的“一个石头落到底儿”的进出方式——8间房可以任意进出了。SSE结合自身仓库大的特点,还独创了70条并行管理(处理)数据的方法,其中50条用于浮点数处理,12条用于整数的处理,还有8条用于优化和Memory(内存)数据仓库间的连续数据传递。
根据PentiumⅢ时期公布的财报数据,在SSE的帮助下,公司上下的执行效率大幅提升至原来的四倍(相对于无MMX、无SSE而言,MMX主要针对多媒体应用,而SSE的改进是全方位的)。一时间,整个业界都在盛传SSE带来的管理方式革命,不过变革总会伴随变革的代价,那就是对经理人(这里指各种外围软件)的再教育。上面我们说到3DNow!由于新特点相对于原来变化并不大,所以经理人不需要专门培训就能上岗;但是在崭新的SSE面前,如果想要发挥那8问大办公室的空间优势,以及崭新的70条数据处理方式,几乎所有的经理人都要接受SSE的上岗前再培训教程。乃至于到最后,PentiumⅢ在自己的任期内也没有完成SSE的全面推广工作……。与此同时,AMD团队发挥“船小好掉头”的特点,在新队长AthlonXP的带领下,将SSE中容易学到的几条经验加入自己的管理方式中,形成新的3DNow!Enhence,继续与Intel相竞争。
有句话说的没错——“前人栽树,后人乘凉”。虽然PentiumⅢ没有在自己的任期内完成SSE的全面推广,但是在他不遗余力的努力下,业界的经理人形成了高涨的SSE学习热潮。终于等到Pentium 4负责人执掌帅印的时候,SSE完成了全面推广。在此利好消息的催动下,Pentium 4一上任就将Intel团队的动作频率由原来的每秒钟执行12亿次(1.2GHz)提升到15亿次(1.5GHz),并且立下豪言壮志,称在自己的任期内将达成100亿次的目标。这样一来在执行多重SIMD任务时就可以得到更高的效率,受益最大的就是视频处理,就像前面介绍到的那样,视频技术越是发展,对图像的压缩和解压缩要求越高、算法越复杂,此时CPU对性能和执行效率的要求也就越高。
SSE的推广,其意义要远远大于那70种处理方法,整个经理人业界已经广泛接受了SSE多种SIMD的处理方式:从入门级教程一直到高级经理讲习班,SSE这种处理数据的思路无处不在。在此基础上,史上最成功的管理方法——SSE2诞生了。
SSE2的锦上添花
这一次SSE2没有让大家失望,在原有的基础上SSE2一下子又加入了144条新的管理指令,而且分别对MMX和SSE进行加强。
针对MMX,大 家是否还记得当初Pentium只能处理64个bit的整数,如今Pentium 4在SSE2中对原有MMX管理指令进行了扩展,也可以使用128bit这么大的房间了。在SSE2中,浮点数的处理精度达到了64bit,而且仗着有大办公室的优势,就算是处理64bit浮点数,也能达到原来速度的2倍。其实这些都不算什么,如果与新加入的矢量数乘法(算法)相比的话。
原来的SSE指令无法快速处理对矢量数至关重要的乘法运算,就只能按照数学公式来计算(a+bi)×(c+di)=a×c-b×d+(b×c+a×d)i,这种算法费时又费力,如果需要连乘计算,那时候的多数CPU估计要累得“冒烟儿”了、但是SSE2成功的解决了这个问题,一下子总公司的Flash业务蒸蒸日上,再加上蓬勃发展的互联网高速公路、海量的视频共享、Microsoft新的XP版经理人工作环境以及新一代的3D游戏和软件都对SSE2进行了优化,SSE2赶上了好年代……
本来风头正劲的AMD开始“闭门思过”,第一件事就是将他们内定的新一代领导人K8兄弟——Opteron和Athlon64送去SSE2进修班学习。当然,后面的事情大家都了解,K8兄弟凭借着64bit一组的新一代处理方式狠狠地打了一个翻身仗,不过这部分内容就不是我这次管理方式讲解的重心了。(会场上的大屏幕闪过几个大字,“有兴趣的朋友可以去看以前的《微型计算机》……”)
AMD的K8兄弟上台之后,Intel并没有立即认识到问题的严重性,他们仍然按照既定策略来提高公司的业务处理能力——就是设法不断提高经理人工作的动作速度。从最初的15亿次,到30亿次……,他们仍然有信心拿下100亿次的关口。
这个时候,很多不明就里的经理人为Intcl团队飞快的处理速度所折服,相继与Intel签订合作协议,但是很快,行家们发现Intel团队看似“快如飞”的工作速度,其最终成果与慢吞吞AMD相比并没有多多少,相反甚至还要略逊一筹。深入的分析认为,Intel为了达到更快的动作速度,人为提高了工作流水线的长度(或者说细分了流水线中处理数据的步骤)——原来5个人做的工作,分给20个人做,每个人的工作量减少了,所以能够做的更快;但是如果其中的任何一个人做错,又要重头开始,浪费的时间也就更多,所以Intel的方式看似人手快一些,但是实际效率相差无几。与此同时,流水线闲置的问题也引起了大家的重视,Intel推出了一个新的概念,叫做超线程(Hyper-Threading HT)。
超线程的管理概念就相当于高层给各个部门下达工作指示的时候,将原有的任务A和任务B合并在一起执行(以前都是独立执行的),下面的员工不需要知道手上的工作是任务A还是任务B,只要忙好手上的活儿就行了a为此,Intel还特地推出了SSE3管理模式来支持超线程。SSE3成为历史上最“短小精悍”的工作指令集(13条),它的作用就是协调超线程中各个部门的工作关系。
SSE4:开辟第二战场
可惜,Intel最终还是没有实现每秒100亿次的远景目标。基层的工作人员为了面子“热火朝天”地高速工作,挥汗如雨甚至透支体力也没能每秒钟完成4件事。Intel遭遇了自团队创业以来的最大危机,这直接导致了领导Intel团队10余年的Pentium家族引咎辞职,换上了祖籍以色列的Conroe家族掌握管理层。
Conroe家族一上台就喊出了“效率为先”的口号,表面上的干活速度已经不再是衡量标准,单位时间完成的有效工作量才是部门考核的关键。为了提高效率,简单的任务不会再过分的细拆,而是按照部门的执行能力灵活分配。在Conroe家族大刀阔斧的改革下,整个Intel团队面貌焕然一新,各部门的协调工作能力得到极大提高。现在的Intel团队内,你再也看不到那种热火朝天的工作场面,取而代之的人人冷静的、有步骤地处理好自己手上的每一件事,效率反而上去了。在这里,我要重点介绍的代号为SSE4的新一代管理方法。
实际上SSE4酝酿于Pentium 4家族的晚期,并计划在Pentium 5上面得到推广,可惜随着Pentium家族的整体没落,SSE4计划也几乎被遗忘。幸运的是Conroe并没有完全摒弃Pentium时代的成果,经过改进的、全新的SSE4终于发布了。
和前几代的SSE不同,参与SSE4管理方式制定和执行的不再仅仅是CPU总公司,还拉上了一个重要的合作伙伴——芯片组(Chipset)公司。虽然消费者也可以选择其它的配套公司,但是Intel认为一条龙的服务更能够带给人信心。长期以来,Intel也是一直这么做的,它的CpU以及配套芯片组解决方案一直是新技术的倡导者。不过随着高清时代的来临,平衡被打破传统意义上视频编码和解码一直是CPU的份内工作,但是高清视频的各种新算法(如H.264、VC-1等)让CPU,总公司倍感压力,整个公司60%以上的处理资源全部被解码小组所霸占,想做点其它的工作部力不从心。也正是在这个当口,显示芯片公司的NVIDIA和ATI(现在已经圈入AMD团队了)推出了高速编解码服务,一下子将这一大块业务从总公司眼皮底下抢走,并占据大片市场。
SSE4的实质就是Intel和自己的芯片组配套公司合作推出的视频加速解决方案,即使面对H.264+1080p这样的海量数据处理,也能处之泰然——Intel想借SSE4夺回技术上优势的决心可见一斑。而且在基本管理模式上,SSE4终于完成了SSE模式一直以来的一个夙愿:那就是提供完整的128bit执行单元,一次可以执行一个128bit指令;而在此之前,128bit的加法或者乘法运算都需要分两步来完成,现在通过SSE4方式一次就搞定了。
SSE4模式带给Conroe前所未有的高效率,这样的优势AMD团队也看在眼里。为了缩小与Intel的技术差距,AMD也宣布要推广SSE4(这将是K8退休之后,继任者K10的主要工作),名字就叫做SSE4A(其中的A自然是AMD的意思),去掉了针对Intel管理模式优化的新指令,其余“照搬”。但是SSE4A还没有普及,SSE55L浮出了水面……
SSE5的未来之路
SSE5是第一个非Intel团队提出来的SSE管理模式,也说明TAMD迫切希望摆脱跟跑困境的意愿。虽然现在K10才刚刚接任,但AMD方面已经开始筹划新的管理革命了,而这一次,SSE5确实也将带来更多新的东西……
SSE5将全面继承SSE家族的各种优势,新增加的两条重要的数据处理指令格外引人注目:
一个是“三操作数指令”,以往的公司管理数据,对象一般都是两个数据,加数与被加数、乘数与被乘数……。现在三操作数指令可以进行三个数的管理,如果是六个数相加,那么SSE5将带来50%以上的性能提升!
另外一个是“熔合乘法累积”,这种管理方式能让CPU将乘法和其它算法结合起来,用一条指令完成多项迭代运算,从而简化程序、提高效率。这种方式可以让系统更快地执行绘图着色、相片着色、音场音效以及复杂矢量演算等高密度算法,从而显著提升系统的处理效能。
SSE5计划在推广初期就推出100余条崭新的指令,成功与否除了要看AMD的K11能否顺利接班,还要看各种经理人的SSE5培训课程是否受到欢迎。毕竟AMD相对弱势的地位,号令天下时多少让人觉得得有点底气不足。不过可喜的是这类通过更新公司管理机制,结合培训经理人,双管齐下提高效率的方法也一步步迈向成熟。10年间,从MMX我们一路走来,相信我们的公司在这种相互竞争和相互完善的机制中将与时俱进,勇往直前!(台下掌声雷同,会场的气氛达到最高潮,天顶篷都快要掀翻了……)
写在最后
就连我也不禁拍手叫好,谁知刚一用力就摸到了手边的鼠标,清脆的声音告诉我已经从电子的世界中回到了现实。游戏已经结束,由于我的“不作为”,我方输得很惨……
10年间就犹如南柯一梦,我们的处理器从Pentium MMX已经换到了Core 2 Extreme,操作系统从Windows 95变成了WindowsVista,应用也从当初简单地看VCD、玩象棋游戏变成了欣赏HDTV、趋近于真实的3D枪战世界……发展的巨轮不会因此而停下,技术的竞争会因为互相学习、互相超越而更加白热化,MMX、3DNow!、SSE这些指令集近年的进步大家有目共睹,随它们一起进步的是处理器性能的飞跃式发展。或许我们今天的一切都是十年前无法想象的,那十年后的一切是否也是今天的我们所无法想象的呢?
某周五晚上游戏至深夜,趁着一个重要存档的间隙闭上眼睛想休息一会,哪知竟然睡着了。迷迷糊糊中,感觉自己钻进了电脑显示器,进入了一个崭新的世界。周围全是是闪闪发光的电子,来来往往、忙忙碌碌。我着急着回去,于是走近一栋最高的建筑想问问路,哪知被一个等候在门口的电子给一把拉住,“Neo先生,恭候多时了,大家都进场了,就等您了!”
这下想脱身都不大可能了,既然来了就索性进去看看去吧。刚进入会场,就看到偌大的横幅上写着“现代企业管理的历史和创新”……主席台上一个电子清了清嗓子,开始演讲了!
大家好,我是CPU总公司宣传部的比特,英文名叫bit,性别1。和许许多多bit兄弟姐妹们一样,我们都属于信息世界中的生命,大家平时都住在各台电脑的硬盘当中,每天先去各自的CPU单位上班,得到当天的工作任务后就马上开始工作。比如我,有时候去内存做统计工作,有时候又去显卡、声卡等部门参与宣传工作。当然现在讲究社会化分工,我常常要去其它电脑出差,好在现在高速公路发达,顺利的话几秒钟就能回来,效率很高;不过听爷爷辈的人说,他们原来出差的机会很少,而且一趟要好几分钟,唉,谁叫他们那时候只有走56kb/s的山路呢?估计再过几年无线技术发达了高速公路也不用走了,出门直接坐飞机(台下掌声雷动)……
当然,今天我在这儿的主要任务是介绍。下CPU总公司这些年来在公司内部管理以及业务处理能力上的长足进步和经验。在正式开始之前,请容我对CPU总公司和我们日常的工作内容做一个简单的介绍,这将帮助大家对CPU有一个更详细的了解。
CPU总公司早期背景介绍
1971年,是我们CPU,总公司成立的日子,到现在已经36年了。从首任CEO(Intel)4004开始,在总公司不断发展的同时,我们也在逐步完善和加强公司的管理机制;三十多年后的今天,我们已经更名为“CPU,总公司”,麾下两家大型分公司——Intel和AMD,适当地在公司内部引入竞争机制,促进公司的健康发展。在所有人的共同努力下,30年来总公司—直保持每18个月就翻一番的骄人业绩(这里指的是CPU的晶体管数量)。
我们日常工作的主要内容(或者说对象)就是数据(DATA),由我们的bit办事员带回各自的办公室进行处理。一般来说,32个bit办事员我们编为一组,每组都有一个组长;这几年,我们也开始尝试将64个bit组成一组,希望能够提高效率(考虑到一致性,后面提到的一组还是指32个办事员)。而bit们携带的数据一般分为两大类:
◇一类就是整数。我们这将他们分为无符号数和有符号数。无符号数比较简单,组长站在最前面表示高位,这时候一组办事员(32bit)就可以表示0~2-1中任何一个整数;对于有符号数来说,组长仍然站在第一位来表示该数据的正负属性,这样一组办事员就可以表-2~2-1当中的任何一个整数。
◇再一类就是浮点数。什么是浮点数呢?顾名思义,就是小数点的位置不恒定,可以在任何一个数的后面(这在整数中是没法想象的,整数中小数点永远在最后一位数的后面)。一个浮点数可以分为两个部分,一部分表示尾数(同样可以让组长来选择正负),另一组来表示指数。举个简单的8bit浮点数来说,如果前5个bit来表示尾数,后3bit来表示指数,那么这组办事员既可以表示-16000、或者16000,还可以表示16.000、1.6000以及0.16000等等。这样一来,浮点数可表示的范围就要此整数的范围大太多了(整数的8bit只有-128~127的256个值)!
有了整数和浮点数的概念之后,每组bit在表达数据的时候就能够做到得心应手。在总公司诞生初期,仅仅只能处理整数,那时候大家都挤在x86区办公,随着公司业务范围和规模不断扩大,我们必须开始处理浮点数,但鉴于浮点数和整数的巨大区别,公司新成立了名为x87的浮点处理区,专门设立了8个能容纳80个bit的寄存器办公室。可惜由于当时的“堆栈”建筑技术,这8间房仅有一个进口和一个出口,换句话说,如果你想去第8间办公室,也只能挨个穿过前面的7间办公室(效率非常低)。
在我们的公司中,每个部门都由职业经理人根据自身的程序来完成计划好的职责,这就是说经理人的好坏直接关系到处理业务的效率。简单地说,如果一个经理人只知道算加法,当你给他一个“10×10=?”的业务时,他就笨得只能进行10次加法了。说起来很可笑,但是在公司运营初期条件就是这么艰苦(台下很多老bit一把鼻涕一把泪)……
在286、386、486担任CEO的时期,我们总公司主要面向商用办公领域。那时候商用办公市场的特点是要求稳定,效率上只要能够满足文本处理、简单的统计运算就可以了,而且由于交通不便,公司各办事处之间的交流基本上是通过蜗牛速度的“国际软盘快递业务”。
在486 CEO掌管公司的晚期,他老人家开始有计划的试水多媒体领域。但是当时总公司的执行能力有限,这类业务还是通过合作伙伴的来完成的——像是CD和VCD的播放,就需要借助光驱公司和多媒体卡公司的处理能力来完成,CPU总公司当时只是起到一个调度的作用。
Pentium时代酝酿的变革
等到Pentium做了Intel团队的头儿之后,开始在整个集团中强化多媒体业务,特别是影音播放能力。众所周知,影音播放相对于原先的商用办公,特点是实时数据量非常庞大,也是说同时需要处理很多组数据才能完成一项工作。对公司最大的考验还不在这里,因为在486时代,CPU在布置工作的时候往往只能对一组数据分配任务,哪怕有很多组数据还在等候,CPU也只能一次处理一组bit,其他人只有排队等候。在商用时代,这种工作方式虽然看起来没有效率,但是结果也就是存档速度慢点或者需要多等上几秒钟拿到数据而已,所以很多人并不是非常在意。
但到了多媒体时代,要求实时处理的数据突然增多了。像处理160kb/s的MP3音乐数据,相当于每秒中有20KB的数据等待着处理,而且音乐数据与其它文件不同,每一个采样点的模拟值都需要对比前面好几个采样点才能算出来,这种对比、叠加的方式虽然压缩了数据流量,但是给CPU的解码运算制造了更大的麻烦。
如果还跟以前一样,本来0.1秒的完整数据结果只能算到0.09秒处(运算能力不够,最后1/10的数据算不出来),我们听到的就不是音乐了,而是“噼……兹拉……吱……砰……”;当然换做视频的时候,大片《碟中谍》中靓丽的脸蛋可能会出现一大块马赛克,又或者下一帧画面的爆炸场景会变成一大堆五颜六色的方块(色块)……
MMx横空出世——指令集的前奏
是时候进行优化了!Pentium上台后不久,在短时间内就找到了快速处理这类连续任务的方法。他称之为MMX,使用SIMD(Single Instruction Multiple Data单指令多数据)来实现数据的并行处理。这个方法其实很简单:比方说原来负责处理MP3音频的部门一次只让32个bit进去,分配好任务再通知下一组的32个bit;现在这个部门借用Tx87区的那8间大寄存器办公室,专门进行媒体数据处理(记住是借用)。由于x87部门每个空房间能容纳80个bit,因此每个房间就可以进入两组32bit数,8间房可以容纳512个bit。部门经理人宣布:每间房的两个组长按照规范先算出两个平方值,然后把最终结果给我。如此一来,除去数据进入房间和组长传递数据的时间,整体效率也提高了数倍。
当然,改革远远不止加ASIMD这么简单,MMX还赋予了各个部门更大的行政权力。举个例子来讲,以前在处理图像的时候每个点都用24位色深来表示(R、G、B各8位),范围从0~255。我们在玩CS(反恐精英)的时候,某个悍匪衣服E有一个深色扣子,RGB参数为(18,30,22)。这个悍匪走进一条黑色的走廊,按照程序的要求,所有点都要减去20来突出阴影效果,这样一来RGB参数变成了(-2,10,2),怎么出现了-2?与此同时,一个反恐精英也快速逼近了洞口,他身上衣服的颜色是(184,197,210),双方激烈地对峙着……悍匪扔出一个闪光弹,程序立即要求反恐精英这边的画面所有数据乘以2,以显示闪光弹的效果。天啊!怎么所有数据都大于255了呢?
以往碰到这种情况,图形部门都要停下当前的操作,将出错的数据上报给CPU进行仲裁,然后CPU返回仲裁结果:大于255的一概用255来表示,小于0的一概用0来表示。现在MMX将这种仲裁权利直接下放给各个部门,只要再出现数据超出范围的问题,各部门就可以自行裁决了。
MMX式的革新显著提高了CPU对数据的处理速度,也得到客户的广泛肯定;借助MMX的推广这种通过改进公司内部行政执行能力,来提高公司工作效率的方式开始深入人心。不过MMX仅仅是开了一个头,他改进的不过是对整数的处理能力,而对浮点数的处理能力来说却并没有太大的帮助,一场更深层次的改革正在酝酿中……
3DNOW!的异军突起
在那个时候,除了Intel之外,总公司还有很多其它很多分公司,IBM、全美达以及AMD等等。值得一提的就是AMD,在MMX大行其道时,他们的技术力量并没有Intel那么强大,但是他们从MMX中获得了灵感,更可贵的是他们发现了MMX针对浮点数运算的尴尬。于是他们就在MMX原有的基础上,又增加了好几个专门使用SIMD处理浮点数据的3DNow!部门。同时,也为其加盖了8间大寄存器的办公室,每间房可以同时进出64个bit,也就是两组数据专门分给3DNow!部门使用,这就彻底解决了抢办公室的问题。因为办公室的面积足够大,所以在执行加法计算的时候,就可以将加数和被加数一起叫进来,而不是像MMX那样把两个数分别叫到两个房间里;而且这个过程的自动化程度非常高,乃至于经理人不需要系统的培训就能适应3DNOW!的管理方式。这种突破式的创新正好赶上3D游戏和3D处理的兴起,一下子让AMD从一个默默无闻的角落里脱颖而出,此时AMD团队的负责人K6-2在专业领域的风头甚至盖过了同时期Intel的PentiumⅡ。
SSE的全面反击
正所谓三十年河东,三十年河西,Intel绝对不能接受在管理技术上落后给AMD。伴随着Pentium家族第三代负责人走马上任,集合了MMX、3Dnow!优势于一身的SSE管理模式酝酿完成……
SSE(StreammgSIMD Extension)的中文意思就是“S1MD扩展”,即对前代S1MD指令集的补充和扩展。MMX已有的优势自然必不可少,针对3D应用,SSE仿照3Dnow!的处理方式,也新盖了8间寄存器办公室,而且每间房的面积居然是3Dnow的2倍(好在微电子世界中地皮不是问题,要在现实世界中肯定是超标建筑),也就是说可以同时进入4个32bit数据。当然,这8间房也修正过去建设x87区时尴尬的“一个石头落到底儿”的进出方式——8间房可以任意进出了。SSE结合自身仓库大的特点,还独创了70条并行管理(处理)数据的方法,其中50条用于浮点数处理,12条用于整数的处理,还有8条用于优化和Memory(内存)数据仓库间的连续数据传递。
根据PentiumⅢ时期公布的财报数据,在SSE的帮助下,公司上下的执行效率大幅提升至原来的四倍(相对于无MMX、无SSE而言,MMX主要针对多媒体应用,而SSE的改进是全方位的)。一时间,整个业界都在盛传SSE带来的管理方式革命,不过变革总会伴随变革的代价,那就是对经理人(这里指各种外围软件)的再教育。上面我们说到3DNow!由于新特点相对于原来变化并不大,所以经理人不需要专门培训就能上岗;但是在崭新的SSE面前,如果想要发挥那8问大办公室的空间优势,以及崭新的70条数据处理方式,几乎所有的经理人都要接受SSE的上岗前再培训教程。乃至于到最后,PentiumⅢ在自己的任期内也没有完成SSE的全面推广工作……。与此同时,AMD团队发挥“船小好掉头”的特点,在新队长AthlonXP的带领下,将SSE中容易学到的几条经验加入自己的管理方式中,形成新的3DNow!Enhence,继续与Intel相竞争。
有句话说的没错——“前人栽树,后人乘凉”。虽然PentiumⅢ没有在自己的任期内完成SSE的全面推广,但是在他不遗余力的努力下,业界的经理人形成了高涨的SSE学习热潮。终于等到Pentium 4负责人执掌帅印的时候,SSE完成了全面推广。在此利好消息的催动下,Pentium 4一上任就将Intel团队的动作频率由原来的每秒钟执行12亿次(1.2GHz)提升到15亿次(1.5GHz),并且立下豪言壮志,称在自己的任期内将达成100亿次的目标。这样一来在执行多重SIMD任务时就可以得到更高的效率,受益最大的就是视频处理,就像前面介绍到的那样,视频技术越是发展,对图像的压缩和解压缩要求越高、算法越复杂,此时CPU对性能和执行效率的要求也就越高。
SSE的推广,其意义要远远大于那70种处理方法,整个经理人业界已经广泛接受了SSE多种SIMD的处理方式:从入门级教程一直到高级经理讲习班,SSE这种处理数据的思路无处不在。在此基础上,史上最成功的管理方法——SSE2诞生了。
SSE2的锦上添花
这一次SSE2没有让大家失望,在原有的基础上SSE2一下子又加入了144条新的管理指令,而且分别对MMX和SSE进行加强。
针对MMX,大 家是否还记得当初Pentium只能处理64个bit的整数,如今Pentium 4在SSE2中对原有MMX管理指令进行了扩展,也可以使用128bit这么大的房间了。在SSE2中,浮点数的处理精度达到了64bit,而且仗着有大办公室的优势,就算是处理64bit浮点数,也能达到原来速度的2倍。其实这些都不算什么,如果与新加入的矢量数乘法(算法)相比的话。
原来的SSE指令无法快速处理对矢量数至关重要的乘法运算,就只能按照数学公式来计算(a+bi)×(c+di)=a×c-b×d+(b×c+a×d)i,这种算法费时又费力,如果需要连乘计算,那时候的多数CPU估计要累得“冒烟儿”了、但是SSE2成功的解决了这个问题,一下子总公司的Flash业务蒸蒸日上,再加上蓬勃发展的互联网高速公路、海量的视频共享、Microsoft新的XP版经理人工作环境以及新一代的3D游戏和软件都对SSE2进行了优化,SSE2赶上了好年代……
本来风头正劲的AMD开始“闭门思过”,第一件事就是将他们内定的新一代领导人K8兄弟——Opteron和Athlon64送去SSE2进修班学习。当然,后面的事情大家都了解,K8兄弟凭借着64bit一组的新一代处理方式狠狠地打了一个翻身仗,不过这部分内容就不是我这次管理方式讲解的重心了。(会场上的大屏幕闪过几个大字,“有兴趣的朋友可以去看以前的《微型计算机》……”)
AMD的K8兄弟上台之后,Intel并没有立即认识到问题的严重性,他们仍然按照既定策略来提高公司的业务处理能力——就是设法不断提高经理人工作的动作速度。从最初的15亿次,到30亿次……,他们仍然有信心拿下100亿次的关口。
这个时候,很多不明就里的经理人为Intcl团队飞快的处理速度所折服,相继与Intel签订合作协议,但是很快,行家们发现Intel团队看似“快如飞”的工作速度,其最终成果与慢吞吞AMD相比并没有多多少,相反甚至还要略逊一筹。深入的分析认为,Intel为了达到更快的动作速度,人为提高了工作流水线的长度(或者说细分了流水线中处理数据的步骤)——原来5个人做的工作,分给20个人做,每个人的工作量减少了,所以能够做的更快;但是如果其中的任何一个人做错,又要重头开始,浪费的时间也就更多,所以Intel的方式看似人手快一些,但是实际效率相差无几。与此同时,流水线闲置的问题也引起了大家的重视,Intel推出了一个新的概念,叫做超线程(Hyper-Threading HT)。
超线程的管理概念就相当于高层给各个部门下达工作指示的时候,将原有的任务A和任务B合并在一起执行(以前都是独立执行的),下面的员工不需要知道手上的工作是任务A还是任务B,只要忙好手上的活儿就行了a为此,Intel还特地推出了SSE3管理模式来支持超线程。SSE3成为历史上最“短小精悍”的工作指令集(13条),它的作用就是协调超线程中各个部门的工作关系。
SSE4:开辟第二战场
可惜,Intel最终还是没有实现每秒100亿次的远景目标。基层的工作人员为了面子“热火朝天”地高速工作,挥汗如雨甚至透支体力也没能每秒钟完成4件事。Intel遭遇了自团队创业以来的最大危机,这直接导致了领导Intel团队10余年的Pentium家族引咎辞职,换上了祖籍以色列的Conroe家族掌握管理层。
Conroe家族一上台就喊出了“效率为先”的口号,表面上的干活速度已经不再是衡量标准,单位时间完成的有效工作量才是部门考核的关键。为了提高效率,简单的任务不会再过分的细拆,而是按照部门的执行能力灵活分配。在Conroe家族大刀阔斧的改革下,整个Intel团队面貌焕然一新,各部门的协调工作能力得到极大提高。现在的Intel团队内,你再也看不到那种热火朝天的工作场面,取而代之的人人冷静的、有步骤地处理好自己手上的每一件事,效率反而上去了。在这里,我要重点介绍的代号为SSE4的新一代管理方法。
实际上SSE4酝酿于Pentium 4家族的晚期,并计划在Pentium 5上面得到推广,可惜随着Pentium家族的整体没落,SSE4计划也几乎被遗忘。幸运的是Conroe并没有完全摒弃Pentium时代的成果,经过改进的、全新的SSE4终于发布了。
和前几代的SSE不同,参与SSE4管理方式制定和执行的不再仅仅是CPU总公司,还拉上了一个重要的合作伙伴——芯片组(Chipset)公司。虽然消费者也可以选择其它的配套公司,但是Intel认为一条龙的服务更能够带给人信心。长期以来,Intel也是一直这么做的,它的CpU以及配套芯片组解决方案一直是新技术的倡导者。不过随着高清时代的来临,平衡被打破传统意义上视频编码和解码一直是CPU的份内工作,但是高清视频的各种新算法(如H.264、VC-1等)让CPU,总公司倍感压力,整个公司60%以上的处理资源全部被解码小组所霸占,想做点其它的工作部力不从心。也正是在这个当口,显示芯片公司的NVIDIA和ATI(现在已经圈入AMD团队了)推出了高速编解码服务,一下子将这一大块业务从总公司眼皮底下抢走,并占据大片市场。
SSE4的实质就是Intel和自己的芯片组配套公司合作推出的视频加速解决方案,即使面对H.264+1080p这样的海量数据处理,也能处之泰然——Intel想借SSE4夺回技术上优势的决心可见一斑。而且在基本管理模式上,SSE4终于完成了SSE模式一直以来的一个夙愿:那就是提供完整的128bit执行单元,一次可以执行一个128bit指令;而在此之前,128bit的加法或者乘法运算都需要分两步来完成,现在通过SSE4方式一次就搞定了。
SSE4模式带给Conroe前所未有的高效率,这样的优势AMD团队也看在眼里。为了缩小与Intel的技术差距,AMD也宣布要推广SSE4(这将是K8退休之后,继任者K10的主要工作),名字就叫做SSE4A(其中的A自然是AMD的意思),去掉了针对Intel管理模式优化的新指令,其余“照搬”。但是SSE4A还没有普及,SSE55L浮出了水面……
SSE5的未来之路
SSE5是第一个非Intel团队提出来的SSE管理模式,也说明TAMD迫切希望摆脱跟跑困境的意愿。虽然现在K10才刚刚接任,但AMD方面已经开始筹划新的管理革命了,而这一次,SSE5确实也将带来更多新的东西……
SSE5将全面继承SSE家族的各种优势,新增加的两条重要的数据处理指令格外引人注目:
一个是“三操作数指令”,以往的公司管理数据,对象一般都是两个数据,加数与被加数、乘数与被乘数……。现在三操作数指令可以进行三个数的管理,如果是六个数相加,那么SSE5将带来50%以上的性能提升!
另外一个是“熔合乘法累积”,这种管理方式能让CPU将乘法和其它算法结合起来,用一条指令完成多项迭代运算,从而简化程序、提高效率。这种方式可以让系统更快地执行绘图着色、相片着色、音场音效以及复杂矢量演算等高密度算法,从而显著提升系统的处理效能。
SSE5计划在推广初期就推出100余条崭新的指令,成功与否除了要看AMD的K11能否顺利接班,还要看各种经理人的SSE5培训课程是否受到欢迎。毕竟AMD相对弱势的地位,号令天下时多少让人觉得得有点底气不足。不过可喜的是这类通过更新公司管理机制,结合培训经理人,双管齐下提高效率的方法也一步步迈向成熟。10年间,从MMX我们一路走来,相信我们的公司在这种相互竞争和相互完善的机制中将与时俱进,勇往直前!(台下掌声雷同,会场的气氛达到最高潮,天顶篷都快要掀翻了……)
写在最后
就连我也不禁拍手叫好,谁知刚一用力就摸到了手边的鼠标,清脆的声音告诉我已经从电子的世界中回到了现实。游戏已经结束,由于我的“不作为”,我方输得很惨……
10年间就犹如南柯一梦,我们的处理器从Pentium MMX已经换到了Core 2 Extreme,操作系统从Windows 95变成了WindowsVista,应用也从当初简单地看VCD、玩象棋游戏变成了欣赏HDTV、趋近于真实的3D枪战世界……发展的巨轮不会因此而停下,技术的竞争会因为互相学习、互相超越而更加白热化,MMX、3DNow!、SSE这些指令集近年的进步大家有目共睹,随它们一起进步的是处理器性能的飞跃式发展。或许我们今天的一切都是十年前无法想象的,那十年后的一切是否也是今天的我们所无法想象的呢?