计算机系统开创性经典文献选读与解析
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 数字计算机

数字计算机(Digital Computer)背后的思想可以解释成,这些机器旨在执行任何可以通过人类计算员(Human Computer)计算而完成的操作。人类计算员被假设遵循确定的规则,没有一点偏离规则的权力。我们可以假设这些规则写在一本书上,人类计算员每次被分配新的任务时,这本书的内容就会改变。他有无限的纸进行计算,也可以用“台式机器”进行乘法和加法运算,但这并不重要。

第4节开篇第一句是一个映射,将数字计算机映射到人类计算员。这个映射在虚拟化论文中将再次被提到,在冯·诺依曼《计算机与人脑》的论文中也将被提到。数字计算机与人类计算员(具体指人脑)之间的关系是人工智能科学的根本问题。

艾伦·图灵在这里提出了人类计算员(Human Computer)和数字计算机(Digital Computer)的概念。在今天的关于人工智能的讨论中,Human Computer这个词不常用,这是不应该的,人类计算员(Human Computer)和数字计算机(Digital Computer)是相互参照和对应而存在的。人类计算员的“规则书”(Book of Rules)对应于数字计算机的程序(Program)。

如果我们使用上述解释定义数字计算机,可能陷入循环论证(circularity of argument)。我们通过概述达到预期效果的手段来避免循环论证。数字计算机通常由以下三个部分组成:存储器、执行单元、控制器。

为什么说“使用上述解释定义数字计算机,可能陷入循环论证”?因为这个定义把负担转移到“人类计算员”的定义上,而“人类计算员”没有被定义清楚或者又依赖机器的定义。

艾伦·图灵在这里提到了计算机的三个部分,没有提到输入设备和输出设备。

存储器用来存储信息,对应于人类计算员的纸,人类计算员既在纸上计算,也在纸上打印他的规则书。至于说人类计算员在头脑中进行计算,那么一部分存储器将对应于他的记忆。

存储器中存放的是数据和程序,其中数据是程序的处理对象,数据可被分为初始数据、计算过程中产生的中间数据、计算过程结束后产生的最终数据。一个人(人类计算员)具有很强的心算能力,通常是指在没有纸、笔等工具的条件下进行计算,这就需要这个人具备很强的记忆力,特别是关于计算过程中的中间数据的记忆能力,更具体地说,是对应于高速缓存的那部分记忆能力。

这里要提一下数学家欧拉,他于1707年生于瑞士巴塞尔,1783年卒于俄国圣彼得堡。在欧拉的数学生涯中,他的视力一直在恶化。在1735年一次几乎致命的发热后的三年,他的右眼近乎失明,但他把这归咎于他为俄国圣彼得堡科学院进行的辛苦的地图学工作。在德国期间他的视力也持续恶化。欧拉原本正常的左眼后来又遭受白内障的困扰。在他于1766年被查出患有白内障的几个星期后,他的双眼近乎完全失明。即便如此,病痛似乎并未影响到欧拉的学术生产力,这大概归因于他的心算能力和超群的记忆力。比如,欧拉可以从头到尾不犹豫地背诵维吉尔的史诗《埃涅阿斯纪》,并能指出他所背诵的那个版本的每一页的第一行和最后一行是什么。在书记员的帮助下,欧拉在多个领域的研究其实变得更加高产了。在1775年,他平均每周就完成一篇数学论文。

海伦·凯勒和欧拉的事迹,是研究智能和计算的本质时需要考虑的。

执行单元是一次计算中涉及的各种操作被执行的地方,这些操作是什么,将随着机器的变化而变化。通常相当冗长的操作可能是“3540675445乘以7076345687”,但是一些机器可能只执行“写下0”一类的简单操作。

操作(Operation)是一个落实计算(Computing)的实体。指令集体系结构(ISA)是软件与硬件的接口。

我们上面曾经提到人类计算员的“规则书”由机器中的一部分存储器代替,不妨把它们称为“指令表”。控制器的功能就是保证指令按照正确的顺序执行。控制器的设计使得这种情况必然发生。

规则书(对人类而言)、指令表(对机器而言)都是指程序,控制器是解读和遵循程序的实体,显然程序与智能之间存在很强的关联。

存储器中的信息通常被分解成大小适中的数据块,例如,在一个机器中,一个数据块由十个十进制数组成,数据以某种系统的方式被赋值到各种数据块所在的存储器中。一个典型的指令可以是:

“把存放在6890的数加上存放在4302的数,并把结果存入后面的单元。”

显然,此指令在机器中不会用英语表达,而是更有可能编码成6890430217这样的形式,这里17表示对这两个数进行哪一种操作,在这里就是加法操作。请注意,这个指令占用了10个数字,因此正好是一个数据块,非常方便。控制器通常按照指令的存储顺序取指令执行,但是偶尔会碰到这样的指令:

艾伦·图灵在这里介绍了指令的格式,即指令由操作码和操作数构成。注意上面这段话中,17是操作码,6890和4302均是存放操作数的地址。寻址方式就是计算机组成原理课程中要讲授的重要内容。寻址方式对编程的难易、程序的执行效率具有重要影响。

“现在遵守存储在5606的指令,并从那里继续执行。”或者,“如果4505位置是0,那么执行存储在6707的指令,否则紧接着继续执行。”

上面两个指令介绍了指令的顺序执行和跳转执行,这是冯·诺依曼结构的特征。程序通常包括三大结构:顺序结构、分支结构、循环结构。

后面这些类型的指令非常重要,因为它能重复执行一段指令直到满足某种条件,但不是通过每次执行新指令来做的,而是一遍又一遍执行相同的指令。可以类比家庭生活:如果妈妈想让汤姆每天上学时都到修鞋匠那里看看她的鞋是不是修好了,妈妈可以每天都告诉他一遍;另一种方式是,在大厅里汤姆每天上学都能看到的一个地方贴个便条,告诉他到修鞋匠那里去看一下,当汤姆拿回鞋时,就撕掉那个便条。

机器的一个优势是擅长做重复的操作,弥补人类耐心(是一种稀缺资源)的不足。循环是程序中表达语义的重要程序结构,也往往是最耗时的部分,因此成为性能瓶颈,被称为“热点”。

“一遍又一遍执行相同的指令”是什么呢?就是循环!循环的概念据说是后面将会提到的阿达·洛芙莱斯(Ada Lovelace)发明的。艾伦·图灵上面提到的例子,实际上就是while循环。

有了循环结构,程序员只需要写少量的程序就可以对应地运行很多指令,而且指令的具体数量也不需要提前知道,事实上在很多情况下也很难提前知道。

这里要区分动态指令数量和静态指令数量。动态指令数量是一个程序在处理器上实际被执行的指令数量,静态指令数量是一个程序被编译后的指令数量。动态指令数量与静态指令数量一般是不同的,原因有二,一是因为循环的存在,一个循环体对应的少量的静态指令可以对应大量的动态指令;二是因为分支的存在,有些静态指令没有在选中的分支中,所以没有被执行,也就没有成为动态指令。

读者必须接受的一个事实是,数字计算机可以建造,而且确实已经按照我们所描述的原理被建造,并且能够很接近地模仿人类计算员的动作。

请注意这里的“模仿”(Mimic),实际上这是虚拟化的概念,而且可以从功能和性能上进行解读。

当然,上面描述的人类计算员所使用的规则书仅仅是为了方便而做的杜撰。实际的人类计算员真正记得他要做什么。如果一个人想让机器模仿人类计算员执行复杂的操作,就必须问人类计算员操作是怎样做的,然后把答案翻译成指令表的形式。构造指令表的行为通常被描述为“编程”,“给一个机器编程使之执行操作A”,意味着把合适的指令表放入机器,从而它将执行A。

这一段给出了编程(Programming)的实质。

按照艾伦·图灵的表述,存在几个同义词:程序(Program)、指令表(Instruction Table)、规则书(Book of Rules)。

“给一个机器编程使之执行操作A”,意味着把合适的指令表放入机器以使它能够执行A,从这个意义上,是人类通过编程把自己的智能赋予了机器。当前“赋能”这个词汇被广泛使用,此处应该是“赋能”的本源出处。

数字计算机的一个有趣变体是“带有随机元素的数字计算机”,它们有特定的指令进行掷骰子或者别的等价的电子过程,例如一个这样的指令可能是“掷骰子并把结果的数字存入存储位置1000”。有时,这样的机器被描述为具有自由意志(尽管我自己并不使用这一短语)。通常并不能通过观察判断出一个机器是否有随机元素,因为一个相似的效果可以依据π小数部分的数字做出选择来产生。

π的十进制位数是确定的,但是是无限不循环的。π本身不是一个随机数,但它的小数位因为无限不循环,所以具有随机性。

计算机的程序是确定的,规则的含义不是模棱两可的,但不代表计算机不能包括随机数。现在的计算机硬件中可以实现人工智能的应用,同样,人工智能的算法(如神经网络等)可以用于体系结构设计,比如用于预取器和高速缓存替换策略的设计。这说明什么呢?

人工智能不仅仅是上层应用,还可以融入底层体系结构。

一定的随机性、不确定性是智能的特征。但完全的随机性(随机行走和布朗运动)则不是智能的特征。简言之,智能允许甚至需要一定的随机性,但仍以确定性为主。

值得注意的是,图灵在本文中多次提到随机数,也就是说,他注意到并且仔细考察了智能与随机性(Randomness)之间的关系。除此之外,图灵还考察了智能与行为的非正式性(Informality of Behaviour)之间的关系,以及智能与神经系统的连续性(Continuity of Nervous System)之间的关系。

大多数现实中的数字计算机仅有有限的存储空间,让一个计算机具有无限的存储空间并不存在理论上的困难,当然在任何时候都只有有限的部分被使用。同样,只有有限的存储空间能够被建造,但我们可以想象越来越多的存储空间可以根据要求被添加。这样的计算机具有特殊的理论价值,将被称为无限容量计算机(Infinitive Capacity Computer)。

存储容量是可以逐步扩展的,存储受限的加速比模型(Memory-bound Speedup)就是基于这一前提提出的。

无限容量的计算机是不存在的,过去、现在、将来都不存在,但具有特殊的理论价值。从这里可以看出,不存在的东西不一定没有价值。

在本章第2节,图灵给出的图灵机就是无限容量计算机。

有关数字计算机的想法是一个旧想法。1828年至1839年担任剑桥大学卢卡斯数学教授的查尔斯·巴贝奇(Charles Babbage)规划设计了这样的机器,并称之为分析机(Analytical Engine),但是并没有实现。尽管巴贝奇有了所有的关键思想,但他的机器在那个时代却没有很吸引人的前景。它能够达到的运算速度肯定比人类计算员要快,但仅相当于曼彻斯特机速度的约百分之一,而曼彻斯特机本身是现代计算机中较慢的一台。巴贝奇分析机的存储全部由轮子和卡片组成的机械实现。

艾伦·图灵是熟知计算机发展历史的,他对巴贝奇分析机和曼彻斯特机具有深入的了解。本书中将有多处提到查尔斯·巴贝奇分析机。

卢卡斯数学教授席位(Lucasian Professor of Mathematics)是英国剑桥大学的一个荣誉职位,授予对象为数学及物理学相关的研究者,同一时间只授予一人,牛顿在1669~1702年、查尔斯·巴贝奇在1828~1839年、狄拉克在1932~1969年、霍金在1980~2009年都曾担任此教席。现任此职的是英国物理学家迈克尔·盖茨(Michael Cates)。

巴贝奇分析机全部由机械实现这一事实,将帮助我们破除一个迷信。现代数字计算机是电子的,神经系统也是电子的,这一事实常常被强调。既然巴贝奇的机器没有使用电,而所有的数字计算机在某种意义上都是等价的,那么我们看到是否使用电在理论上并不重要。当然,快速发信号的地方通常需要电,因此,我们就会发现在这两个地方使用电是理所当然的。在神经系统中,化学现象至少和电现象同样重要,某些计算机的存储器主要基于声学原理。因此,计算机和神经系统都使用电仅仅是表面的相似。如果我们希望寻找这样的相似性,倒不如寻找功能上的数学相似性。

什么是计算机?什么是数字计算机?什么是电子计算机?什么是离散状态机?

是否用电,对本质没有影响。通过化学过程、电、机械,都可以实现功能等价的数字计算机,只有速度(性能)上的差别。艾伦·图灵的可计算性是忽略速度(性能)意义上的可计算性。中国科学院计算技术研究所徐志伟研究员提出了考虑速度(性能)的可计算性,被称为实用可计算性。