年开始精简指令集芯片研究,也就是后来的PowerPC。1992年,IBM与Motorola(摩托罗拉)、Apple Computer(苹果)宣布合组Power联盟。刚开始,Power联盟引用学界评比论文,直指x86复杂指令集结构无法应付未来信息需求,而媒体也纷纷发难斥责x86电脑效能低劣,操作介面不便,都表示支持大胆改革的Power联盟。形势危机,当时Intel的总裁葛洛夫甚至认为Intel已陷入死亡之谷,如果应对失措,“Intel”将成为历史名词。Power联盟洋洋得意。逆@风@者
但在接下来的三年里,Power联盟迟迟不能统一平台标准,操作系统开发进度也严重滞后。到1994年,Intel推出了Pentium芯片,微软的Windows 95也大功告成。尽管当时的Pentium逊于PowerPC,Windows 95界面也不如Macintosh,但前二者相互支援,前后兼容,不断改进,而后二者却不够统一,用户没有安全感。形势急转直下,Power联盟大跌眼镜。
第一波攻击,Sun退回到工作站;第二波攻击,SGI退回绘图工作站;第三波攻击至今,IBM还在服务端处理器领域靠PowerPC苦撑。
顺带说一句,Intel和AMD主要走的都是CISC路线。但处理器发展到现在,各方面技术已经相互融合,不存在绝对CISC或者RISC的芯片了。
译注2
In-Stat:www.instat.com,全球著名的行业研究机构,Reed Business Information出版集团成员公司之一,Reed Elsevier的战略组成部分;涉及半导体、电信和电子消费品等领域的研究、评估与预测。
MDR:MicroDesign Resources,原属美国Ziff-Davis电子出版集团,1999年被Reed Elsevier收购。
In-Stat/MDR主办《Microprocessor Report》(《微处理器报告》)杂志,三周刊;Microprocessor Forum(微处理器论坛)每年10月在加利福尼亚州San Jose举行。
译注3
原句为:Andy giveth, and Bill taketh away.
Andy:Andy Grove,安迪·格鲁夫,1968年和罗伯特·诺宜斯(Robert Noyce)、戈登·摩尔(Gordon Moore)共同创立Intel。
Bill:Bill Gates,比尔·盖茨,1975年和保罗·艾伦(Paul Allen)创立Microsoft。
译注4
大概是2001年看到过一则新闻,到网上搜了一下,内容大致如下:
澳大利亚教授韦伯领导的研究小组利用位于夏威夷的世界最大的天文望远镜“凯克”观测17颗不同的类星体。由于这些类星体距离地球120亿 光年,它们在宇宙形成初期发出的光线到今天才抵达地球。在长途旅行中,部分光线被星系间的气云吸收。光线的吸收情况既能反映星系气云的性质,也能反映出光 的变化情况,这其中就包括光的速度以及决定光速的光谱线精细结构常数。结果,韦伯等人发现,精细结构常数发生了微小的变化。从理论上说,这意味着光速有可 能发生过改变。消息公布后,不少物理学家对此发现持谨慎态度。韦伯及同事希望用位于智利的另一个大型天文望远镜来证实他们的结果,据称要得出最终结论尚需2至3年的时间。
不过到目前为止,似乎还没看到他们的最终结论。
译注5
管线:pipelining,或流水线。CPU的管线并不是数据输入输出使用的物理线路,而是指指令执行的流程。一条指令必须被分解为多个执行步骤,每个步骤占用一个时钟周期。例如最基础的管线是5级的:(1)取指令,(2)对指令译码,(3)演算出操作数,(4)执行指令,(5)将结果存储到高速缓存。前三步由指令控制器(ICU)完成,后两步由运算器(ALU或FPU)完成。管线可以细化,例如苹果的G4处理器采用了7级管线,AMD 2500+处理器10级,Intel公司的P3到10级,P4到20级,P4-E甚至高达31级。管线加长,则每级任务量减小,执行所需时间缩短,因此时钟周期可以缩短,即时钟速度加快。设管线为N级,时钟速度为TMIPS(T百万次/秒),那么平均完成一条指令所花费时间为N/T(当 然要求芯片的确在每个周期内能完成各管线级的任务),因此理论上只要时钟速度加快,则芯片处理能力上升。但问题是管线执行时总有出错(如分支预测失败)的 可能,一旦出错,整个管线就要全部清空,然后从第一级重新执行,在这种情况下,长管线的全部花费时间通常比短管线多。这就是部分AMD芯片比Intel相同甚至更高主频的芯片实际速度要快的原因。
分支预测:branch prediction。解决管线中条件转移引起管线停顿的问题。例如第一条指令是条件转移,那么需要等其判断结果出来后才能执行下一条指令,分支预测可预测判断结果,然后尽快执行其他指令,从而不致管线停顿。当然预测也有出错的时候,预测失败将导致管线清空,从头执行。目前预测准确度可达90%,进一步提高分支预测准确率是正在研究的重要课题。
乱序执行:out-of-order execution。 解决管线中指令相关引起管线停顿的问题。后序指令需要正在执行指令的结果,因此无法立即处理后序指令,这叫做指令相关,造成其他处理单元的停顿,白白损失 时钟周期。解决办法是立即找出其他不相关指令来执行,最后由重新排列单元将各执行单元的结果按原来指令顺序重新排列。很显然,乱序执行是有风险的。
译注6
出自美国电影《化身博士》(Dr. Jekyll and Mr. Hyde,有1931和1941两个版本)。 故事讲述哲基尔医生相信每个人都同时拥有两极化的个性——好的一面与邪恶的一面。如果将这两种个性分开成为截然不同的两个人,这两个灵魂都将获得释放。他 随后成功地用化学实验将自身邪恶的一面转化成为海德先生,此先生犯下了可怕的罪行。但当他想要停止用药时,却惊恐的发现一切为时已晚……
译注7
读/写操作再排序都属乱序执行。看下面一段原始指令代码:
(p1)br label //分支判断。若为true则跳转到label,否则继续执行
ld8 r9 r5 //从r5所指地址空间读取8个字节到r9
add r2 r9 r3 //将r9和r3中值求和,并存入r2
其中ld,load;r,register。
因为load操作较耗时间,通常花费几个时钟周期才能完成。因此从提高效率的角度看,应该在处理器空闲的情况下,尽早加载此操作。比如简单再排序优化后:
ld8 r9 r5
(p1)br label
add r2 r9 r3
如果分支判断结果为false,流程发生跳转,那么可以直接舍弃r9的结果值,即ld8白做了;但如果未发生跳转,则ld尽早执行,提高了流程整体效率。
当然,CPU实际工作远比上面例子复杂。比如将ld提前,但如果ld失败怎么办?有依赖关系的指令呢,能否乱序?在多线程应用里,乱序还可能引起其他一些问题,比如Java中的Double-Checked Locking失败。
不光CPU支持乱序执行,现在的很多编译器也开始做乱序优化,而且重心有逐渐从硬件转到软件的趋势。
有两篇资料可以参看:Scaling Itanium® Architecture for Higher Performance(特别是其中的如何处理指令依赖值得了解)和Verified Optimizations for the Intel IA-64 Architecture。
译注8
片内,英文为on the die或On-Die。Die:裸芯;Chip:包装后的芯片。类似有On-Chip、Off-Die/Chip。
译注9
MMX:MultiMedia eXtension,多媒体扩展。Intel在1996年3月份正式公布了MMX技术的细节,并于1997年1月正式向全球推出基于MMX技术的166MHz和200MHz Pentium芯片,AMD也几乎在同时推出了支持MMX技术的第六代处理器AMD K6。
MMX技术是Intel针对×86体系的一次重大扩充,使计算机同多媒体相关任务的综合处理能力提高了1.5~2倍。它不仅是Intel自 i386面世以来对CPU体系结构的一次显著改进,同时也是IT界对多媒体数据处理等专用芯片及功能板卡的一次成功挑战。
SSE:Streaming SIMD(单指令多数据) Extensions,是Intel针对AMD K6-2引入的“3D NOW!”技术,于l999年在Pentium3中引入的SIMD扩展指令集,业界也称为MMX2,在多媒体数据处理(特别是3D)和浮点运算等能力上全面加强。
译注10
目前频率最高的处理器是Intel P4 570J,3.8GHz,上升非常缓慢。
CPU频率越高,所需电能和发热量越多;而晶体管越小,耗电和热量越低。制造工艺进步,可能让晶体管更小,从而让CPU在相同或一定程度内提高的能耗下达到更高频率。从这个角度说,提升CPU频率的瓶颈是制造工艺。
于是,Intel推出了了90nm工艺的Prescott核心Pentium4,其理论频率将能达到6GHz!然而世事难料,在90nm工艺晶体管里,由于电介质厚度太低无法阻挡电子的穿越,造成了严重的电流泄漏问题,随之带来的就是大量的电能消耗和废热。如果强行提升频率,则发热激增,CPU经不起如此的高烧。
泄漏电流问题并非不可解决,但绝不能在短时间办到。至此,芯片厂商提升系统性能的思路开始发生重大变化,即转向多核。
有关电流泄漏和应对策略的详情,可参看:NetBurst的继承者 Core微处理器架构技术解析。
译注11
在IDF05(Intel Developer Forum 2005)上。Intel首席执行官Craig Barrett就取消4GHz芯片计划一事,半开玩笑当众单膝下跪致歉。

译注12
Working Set,记录了操作系统为进程提交的内存的总量。
译注13
并发编程语言(Concurrent Language)中的术语。
协同程序(coroutines),或协程。用以实现协作式多任务,于上世纪60年代提出。同属一个协程的多个进程,在同一时刻只能有一个处于运行状态。协程属于一种并发进程创建方式,其他方式还有Fork/join、Cobegin/coend和进程显式申明(Process declarations)等。
并发进程之间的通信方式主要有两种方式:变量共享(shared variables)和消息传递(message passing)。其他还包括抽象于更高层次的远程过程调用(remote procedure call,RPC)等。
通信就离不开同步。同步方法主要包括:信号量(semaphores)、条件临界区(conditional critical regions)、管程(monitors)、互斥(mutual exclusion)、路径表达式(path expressions)、原子事务(atomic transactions)和汇集(rendezvous)等。
其中的管程是位于低级同步控制手段之上的一种对象化管理工具。信号量的使用是无结构的,很不方便;条件临界区相对于信号量更结构化,但同步控制代码仍然非常分散,不利于管理。因此引入了管程,它实现了共享资源的集中管理,封装了共享资源以及施于其上的操作。
译注14
因为某些原因(如竞争条件下静态变量初始化问题),线程还未被列入ISO C++标准。目前在不同的平台上,都有线程的专门实现,短时间内难以完全统一。
不过Boost线程库目前差不多具有准标准身份。
译注15
并行编程中必须考虑的两个问题是被处理数据和任务间通讯。经过用户的选择与市场的淘汰,现在的并行编程标准基本上趋向以下三种:
1、数据并行。特点,各任务处理的数据彼此分离,任务间通过消息传递进行通讯;数据分离和消息传递工作由编译器完成。
HPF(High Performance Fortran,高性能Fortran)是典型的数据并行编程语言。因为目前的编译器技术对实际应用中各种不规则问题的解决方案仍不够理想,加上专注于数据并行,因此HPF未获广泛应用。
2、消息传递。特点,各任务处理的数据彼此分离,任务间通过消息传递进行通讯;数据分离和消息传递工作由程序员和用户完成,因此对程序员要求很高。这种模式非常适用于消息传递的体系结构(如机群系统),用户和程序员主要需考虑的是通讯同步和通讯性能问题。
并行虚拟机(PVM,Parallel Virtual Machine)和消息传递接口(MPI,Message Passing Interface)是两种广泛使用的消息传递并行编程标准。其中PVM侧重异构环境下的可移植性和互操作性;MPI更强调性能,但在异构环境下有不同的实现。几乎所有的高性能计算系统都支持PVM和MPI。
3、共享内存。特点,各任务处理的数据实现内存共享,任务间也通过共享数据实现通讯;数据共享可由程序员或编译器完成。共享内存并行编程主要应用在对称多处理器(SMP ,Symmetric Multi Processors)系统上。
OpenMP(Open MultiProcessing由X3H5发展而来)和PThread(POSIX Thread)都是共享内存并行编程的实现。
OpenMP由1993年建立的X3H5标准发展而来,目前已成共享内存并行编程的实际工业标准,得到DEC、Intel、IBM和Sun等厂商广泛支持。它在Forthan、C/C++得到了实现,主要支持隐式并行编程,即编译器实现并行。
PThread主要在Unix系统上使用。Unix的实现系统很多,比如Linux、FreeBSD、Solaris、Mac OS X等。要在众多“类UNIX”上开发跨平台的多线程应用,绝非易事,因此制定了POSIX Thread标准。David R. Butenhof(Boost库发起者之一,ISO C++标准委员会成员)的《Programming with POSIX Threads》这本书,可以说是Unix上编写多线程应用的必备参考书。对其他平台并行程序开发也有很高参考价值。 本文章更多内容:<<上一页 - 1 - 2 - 3 - 4 - 下一页>> |