|
4 ?2 K; b3 v9 W4 n ]
CISC和RISC之争又是一个大话题。简单地说,他们哪个更优反映了不同时期技术进步的方向和速度。最早的CPU很原始,根本就没有几条指令,也就无所谓CISC与RISC。后来技术进步了,可以更大规模地集成电路,速度也快了很多。这时候人们发现把一些复杂的工作打包交给CPU去做,效率会提高很多。比如说(这里只是打一个容易被一般人理解的比喻,并非CISC和RISC真正的区别点),假设CPU只有累加器(最早的CPU也确实如此),那么当人需要做4×3的时候只能写成4+4+4。现在可以给这个原始的CPU增加一条乘法指令,只告诉它乘数和被乘数,至于CPU内部怎么把数最后算出来,那是CPU内部的事情。因为CPU内部的速度远远快于外围电路,这种增加CPU指令的做法可以极大地提高整个系统的性能。
) o* e1 s+ F3 R9 |# o% P/ E, w
' W/ {2 K, z* {, S那么RISC呢?电路的速度不能无限地提高。曾几何时,为了求快超级计算机甚至用上了ECL(发射极耦合逻辑)电路,再大幅度的提速几无空间。于是人们的眼光转向了挖潜,把CPU需要完成的复杂工作分解成一项项简单的任务,模仿制造业流水线那样分步完成。比如说某某汽车厂号称一分钟生产一辆汽车,并不是真的装配这一辆汽车只需要一分钟,而是成千上万辆汽车在流水线上滚动起来,平均就可以每分钟有一辆汽车出厂。当这种流水线模式大规模应用起来,人们发现如果每次交给CPU的工作更加简单而且整齐划一,更有利于流水线的优化,从而获得更高的速度。这就是RISC的动机,它化繁为简,砍掉CISC中很多不常用的指令,并对剩余的指令格式上规整化。有人可能会问当初那些复杂的工作怎么办?在RISC构架下,许多过去由一条复杂指令完成的工作被软件(比如说高级语言的编译器)分解和优化,转换成多条简单指令。6 E! } Z/ t) a
. G, c! S; M3 X# |, u2 }9 _, s
科技发展到今天,RISC无疑是占了上风。一些CISC的CPU,其实就只剩下CISC的一张皮了。拿最常见的Intel CPU来讲,它的CISC指令集就是为了原有的软件能够无缝运行,进入CPU后被翻译成一系列类似于RISC的微操作,然后再执行。至于将来,会不会一直RISC保持下去?老实说,我不知道。但如果再发展,一个很可能的方向是更大的并行性。回到汽车制造业,我们知道整车的装配速度会受制于发动机的生产速度。甚至更极端,受制于发动机从发动机厂运输到总装厂的时间。这种依赖性决定了汽车生产速度不能无限地提高。现在科技的进步已经可以让家用电脑CPU轻易地装备6核、8核,但我们主观感受到的速度并不是过去电脑的6倍或8倍,其原因就在于这种依赖性。提高并行度,也就是减弱这种相互依赖关系,无疑可以使电脑的性能又上新台阶。有意思的是,信息在人脑中流动是并行的,它被表达出来(无论是人类自然语言还是计算机语言)却是一个串行的过程。这种串行的东西有时候平添了很多不必要的依赖性(或者术语上下文相关)。然后再到CPU执行时又是越并行越好。这种并->串->并的转换现在是必要的,将来也许是革命的着力点。 |
|