微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 从4004到core i7:处理器的进化史 (3)-1—万事开头难

从4004到core i7:处理器的进化史 (3)-1—万事开头难

时间:02-19 来源:摘自《果壳小组》网 点击:

我们就用一个最简单的例子说起。

现在让我们暂时先忘掉编程和CPU,集中精力来解下面这一道小学算术题:

1+2=?

不要以为算出答案就完事了,我们来仔细想一想我们是怎么算数的。

首先我们是有眼睛的,所以看到了上面的那道算术题。

其次我们的眼睛是有焦点的,也就是说我们一般一时间只能看清一道算术题中的某一个数字符号。

然后我们会做加法。我们并非生来就会做加法,而是因为我们都上过小学,学过算数。换言之,我们被训练过,大脑中有了相应的突触连接。我们只能被训练做有限的事情。万能显然不是用来形容人类或者CPU的。

有了上面的生理基础还不够。我们还需要一支笔来书写,一张纸来记录。

我们先不要急着往计算机上靠拢,而是想一想我们上面究竟都弄清楚了些神马:

我们有一个需求,即计算1+2=?我们用清楚的语言描述了这个需求。这叫做设计捕捉(design capture)。

我们能描述清楚满足这种需求的流程:

用眼睛从题目的最左端向右扫视,辨认沿途碰到的每一个符号,同时将符号分成两堆:数和运算符。

这些符号我们可以记在大脑中,但是想象我们是某种极其健忘的生物,必须要用笔记录在纸上。

想要完成一次运算,我们至少得明白加法的含义,并且短暂地记住加数和被加数。

我们终于完成了运算,赶快把结果写在题目后面,免得忘掉了。

以上我们有了一个切实可行的算法。你可以注意到,这种算法其实是高度抽象、灵活的。比方说,我可以把眼睛换成摄像头,把大脑换成一个最简单的那种按起来滴滴响的计算器,等等。这就是说,我们有了一个行为描述(behavioral discrption),这种描述其实并没有指定具体的解决方案。

接下来让我们假设我们突然获得了有关半导体的知识,突然明白了用MOS管可以实现逻辑电路。对于高效、正确地完成大量小学算术题这个任务,你有什么想法呢?

算术题可以用比特表示出来,因为算术题的种类(加减乘除等等)是有限的,运算数也很好用比特表示出来(请相关人员自行脑补补码等内容)。运算这个操作十分简单、机械本身也很好用数字逻辑表示出来。为了存贮这些比特,我们可能需要一些记忆单元(类比于符号和笔纸的关系)。十分幸运的是,这些记忆单元也非常容易用晶体管搭建出来(寄存器、缓存、内存(主存))。

但是算术题本身却可以千变万化。可以是1+2,可以是2+3,可以是3+4......尽管其中每一个操作用晶体管搭出来都很简单,组合却是没有穷尽的。也就是说,我们最好在临算术之前用某种方式告诉晶体管它要完成的究竟是哪一道算术题。

以上我们区分了行为描述中两种不同的成分:固定、机械的和灵活多变、无法穷尽的。我们很自然地想到刻在硅片上的电路板极其擅长前者,而后者恐怕就要由我们的更强大的大脑代劳了。这就是硬件/软件划分(hw/sw partitioning)。不要小瞧了这个划分,在很多数字系统中软硬划分常常决定了整个工程执行的速度。总之,每个组件只做一件事情,但要做好。Divide and conquer.这不光是CPU的设计哲学。

软硬划分是亿万程序员和相比起来寥寥无几的CPU设计师的神圣不可侵犯的契约。这个划分是如此的坚固,以至于千千万万的freshman在学到C语言时想都不想就认为编程是一件自然的事情。

有了契约,整个解决方案就被分成了两部分:硬件和软件。只要其中的接口(interface)不变,两边其实都不大关心对面究竟在背地里搞什么名堂。我们经常见到这种接口,它就是指令集(instruction set)。

于是在软件一方,人们渐渐觉得机器码看起来实在是太诡异了,就出现了高级语言,让编程这件非人类的事情尽量地向人类的自然语言靠拢。当然,这一切都离不开编译器(compiler)的支持。如今人们已经离软硬划分的借口很远了,远到了软件已经出现了自己的一套哲学、思考问题的范式。

在CPU,也就是硬件的一方,人们的步伐看起来似乎要慢得多。毕竟,硬件是一件需要大量金钱和经验的工作,这导致它不可避免的不像软件那么易于上手,从业者不那么人山人海。不过,我们已经看到了至少3代的CPU,其中每一代的性能提升都是非常巨大的。我们将要看到,这种巨大的性能的提升,其本质是集成度的极大提高,源动力是电路和器件层面的。和软件相反,今天的“聪明”的CPU雄心勃勃,正在试图越过曾经神圣不可侵犯的契约,高效的完成一些以往只有编译器才能完成的优化工作。

上面的内容说得有点远了,我们再考虑回我们的小学算术题,只不过这一次完全从CPU的角度考虑,就是下面几条指令:

load reg1, mem1
  load reg2, mem2
  add reg1,reg2,reg3
  store mem3, reg3

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top