1.3 冯·诺依曼结构与“量子神话”
如何用技术手段造出一个可以实际使用的通用计算机,是一个工程实现问题。而艾伦·图灵在1936年提出的图灵机,只是一个在科学意义上计算的抽象理论逻辑模型,并不是计算机的工程原理设计。就好比热力学提供了现代发动机的科学原理,但是它并没有告诉人们如何设计一台能用的发动机。
现实可用的现代电子数字计算机出现于20世纪40年代。在这个过程中,大家通常认为冯·诺依曼(1903—1957,数学家,计算机科学家,普林斯顿大学任职)起到了关键的作用,因此尊其为现代电子数字计算机在工程实现意义上的鼻祖,尽管事实上其他人在同时期也做出了基本相同的工作成果(艾伦·图灵被认为是计算机科学,也就是计算机理论上的奠基人)。冯·诺依曼之所以获得了这个殊荣,除开他在计算机结构领域的实际贡献之外,很重要的一点是他比其他做出类似贡献的人有更多的在其他科学领域的建树。下面来简单地回顾一下现代电子计算机诞生的那段时光。
德国的朱赛在1941年最先采用电气元件制造计算机。他制成的全自动继电器计算机Z-3,已具备浮点记数、二进制运算、数字存储地址的指令形式等现代计算机的特征。
美国在1940—1947年期间也相继研制成了继电器计算机MARK-1、MARK-2、Model-1、Model-5等。继电器属于电控机械开关,而不是纯电子开关。继电器的开关速度大约为百分之一秒,这使这些计算机的运算速度受到很大的限制,寿命与可靠性也不理想。
真正用纯电子器件做计算的计算机的开拓过程,经历了从制作部件到整机、从专用机到通用机、从“外加式程序”到“存储程序”的演变。
1938年,美籍保加利亚学者阿塔纳索夫首先制成了电子计算机的运算部件。1943年,英国外交部通信处制成了“巨人”电子计算机。这是一种专用的密码分析机,在第二次世界大战中得到了应用。
1946年2月,美国宾夕法尼亚大学莫尔学院制成的大型电子数字积分计算机(ENIAC),最初也专门用于火炮弹道计算,后经多次改进而成为能进行各种科学计算的通用计算机(见图1-4)。这台完全采用电子线路执行算术运算、逻辑运算和信息存储的计算机,运算速度比继电器计算机快1000倍。当时还没有出现晶体管,所以它使用的是真空电子管。这就是人们常常提到的世界上第一台电子数字计算机。但是,这种计算机的程序仍然是外加式的,存储容量也太小,尚未完全具备现代计算机的主要特征。
图1-4 第一台电子数字积分计算机ENIAC
1945年3月,数学家冯·诺依曼领导的设计小组发表了一个全新的存储程序式通用电子计算机方案——电子离散变量自动计算机(EDVAC)。随后于1946年6月,冯·诺依曼等人提出了更为完善的设计报告《电子计算机装置逻辑结构初探》。同年7~8月间,他们又在莫尔学院为美国和英国二十多个机构的专家讲授了专门课程《电子计算机设计的理论和技术》,推动了存储程序式计算机的设计与制造。
1949年,英国剑桥大学数学实验室研制成功电子离散时序自动计算机(EDSAC);美国则于1950年研制成功了东部标准自动计算机(SFAC)等。至此,电子数字计算机发展的萌芽时期结束,开始了现代计算机的发展时期。
冯·诺依曼的贡献在于提出了一个清晰的、可存储程序的通用计算机可实现的原理性结构(见图1-5)。如前所述,尽管事实上也有其他人在冯·诺依曼之前就提出基本同样的创意,但由于冯·诺依曼在众多的科学领域内取得了杰出成就,人们还是选择用他的名字来命名这个设计,称之为“冯·诺依曼结构”。
图1-5 冯·诺依曼结构示意图
前面花费相当篇幅介绍计算机诞生初期的历史,是为了更好地理解冯·诺依曼结构的本质。在计算机发展的历史进程中,冯·诺依曼结构的本质可以用三句话来概括:计算机的数制采用二进制;计算机按照程序顺序执行操作;程序存储在计算机存储器内。
在他提出的结构中,数据与程序是放在同一个存储器中的。所以后来有人把数据与程序分开存储的结构称为“哈佛结构”。其实,在更本质的意义上,哈佛结构应该被看成是冯·诺依曼结构的一个变形,而不是一个独立于冯·诺依曼结构之外的全新设计。所以现在人们普遍认为,现代计算机采用的都是冯·诺依曼结构,或者说都是以这个结构为基础的,尽管现代计算机在冯·诺依曼原始设计基础上存在许多不同的局部改变或上层组合。
在计算机的发展历史上,一直有人试图突破冯·诺依曼结构,也不断有人声称做到了这一点。以数据驱动计算代替程序驱动计算曾经是许多人的梦想。但事实上冯·诺依曼结构的地位至今依然无人能够撼动。有人误以为这是具体技术手段的局限所导致的,其实真正的原因在于人类至今无法在理论上提出一个有效的、不同于冯·诺依曼结构的计算机系统结构的原理性设计,可以替代冯·诺依曼结构实现通用可编程计算。这是一个“系统原理”性理论问题,而不是技术手段问题。至于实现特定算法的专用计算结构,则有很多不同的可行设计,比如在1990年前后昙花一现、实现特定并行算法的“systolic”阵列结构。之所以昙花一现,就是因为它不具有通用的可编程计算能力,所以不具有普适应用的意义。现在被高度关注的“量子计算”,目前也还是停留在特定并行算法的实现方面,而不具有通用可编程的计算能力。
“量子计算”始于1981年著名的物理学家理查德·菲利普斯·费曼(1918—1988,物理学家,1965年获诺贝尔物理学奖,加州理工大学任职)在麻省理工学院的一次题为Simulating Physics with Computers的讲演(后成文刊登于International Journal of Theorectical Physics,Vol.21,Nos 6/7,1982)。他认为物质世界的本质是量子特性的,所以应该可以直接利用量子特性来模拟物质世界的问题,而不需要通过现代计算机那些人工设计出来的“算法”去计算。他认为这样会更加有效地解决问题。而且他进一步花了很大的篇幅去说明量子过程也不能够完全用传统计算机的来模拟:“That’s why quantum mechanics can’t seem to be imitable by a local classical computer.”
费曼的这个思路的出发点与传统计算机有着本质的不同,它并不是去追求传统意义上的计算速度有多快,而现在大家关心的恰恰仅仅在于计算速度。换句话来讲,费曼设想让“量子计算机”的“运算”过程直接对应于物理世界的过程,而传统的计算机的运算是面向抽象的逻辑数字运算的。人们要通过程序算法将世界的实际问题转化为逻辑数字运算交给传统的计算机来解决,而费曼设想的量子计算机则不需要这个转换过程。他提出这个思路后,大家就开始研究如何利用量子特性来做“计算”。但后来大家的思路似乎与费曼的想法不太一样,不是用量子过程去直接对应世界问题,而是借助量子特性来达到数字计算的目的。人们已经尝试的用于量子计算的量子手段有:原子和光腔相互作用、冷阱束缚离子、电子或核自旋共振、量子点操纵、超导量子干涉等。目前还没有哪一个手段被普遍认为能够切实可行地支撑量子计算的持续发展。
虽然费曼提出了量子计算的设想,但是他的设想比较粗糙,在科学意义上无法达到传统计算机领域里图灵与冯·诺依曼贡献的高度。他在那次讲演中强调他设想的量子计算机在基本原理上与传统的计算机是不一样的:“It is not a Turing machine,but a machine of a different kind”。到底是个什么“kind”,他认为回答这个问题“应该”并不难,只是他还没有花时间来做。而事实上后来人们在量子计算领域也是在拿图灵机与冯·诺依曼架构往量子计算上套,有学者仿造图灵机搞出了“量子图灵机”。也许这个做法是可行的,但是与费曼的设想大相径庭。量子计算目前还在非常初期的探索阶段,对于量子计算的许多基本问题,大家还没有形成一致的看法,而且目前的量子计算都处于利用某些量子特性实现专用计算的演示,人们还不知道如何有效地实现通用的可编程计算。
1996年,贝尔实验室的W.Shor(1959—,应用数学家,麻省理工学院任职)发现了如何利用量子特性做质数分解的方法(即所谓的“量子算法”,可用于RSA加密系统的破译),让量子计算从概念向实际迈进了一步。2001年,来自IBM研究中心与斯坦福大学的科学家利用有7个量子位的基于核磁共振机理的“量子计算机”,实现了将数字15分解为5与3的乘积,为实现W.Shor算法迈出了一步。但人们对这是否属于“量子计算”仍存在不同看法。
2011年,加拿大D-Wave公司造出了128个量子比特的“世界第一台”量子计算机D-Wave One,并且卖给了洛克希德·马丁公司。2013年又推出512个量子比特的D-Wave Two,NASA、谷歌公司与美国一个大学联盟一起用其建立了“量子人工智能实验室”。这个系列计算机的“量子计算”部分也是一个专用“量子”处理器,实现的是“退火算法”,用于解决离散函数的全局最优化问题。这个处理器相当于一个基于“量子隧穿效应”的专用的计算模块。该公司CTO称该量子处理器的目的是快速找到优化问题的“近似解”。“量子人工智能实验室”建立之后,全球许多机构的专家学者都参与了对这台机器的测试使用,但是测试的结果并没有能够肯定地显示出“量子计算”的速度优势。大家对这个系列的计算机是否能够算作量子计算机也依然持有不同的看法。该公司后来又于2015年与2017年分别推出了拥有1000个与2048个量子比特的D-Waver 2X与D-Wave 2000Q。
显然,今天的量子计算还处于20世纪30年代传统计算机的萌芽状态,只能做一些解决特定问题的专用计算装置,而且这些计算装置的实用性也不强。
在传统计算机领域,图灵机与冯·诺依曼架构都是逻辑模型,与具体的物理手段和过程无关。而按照费曼的设想,量子计算是希望基于量子物理特性去直接“仿真”(Simulate)真实物理过程,而不是将真实的物理过程抽象为逻辑数学算法。这是两者之间的一个很基础性的本质差异。面向未来,如何利用量子特性按照费曼的设想做通用的可编程计算,目前还没有费曼说的不同于于传统计算机中图灵机与冯·诺依曼架构的理论支撑。这一点与量子通信完全不同。量子通信在技术实现之前,其可行性在理论上至少是没有问题的。所以,量子计算机是否能够取代普通计算机是一个目前在理论上都难以回答的问题。
目前,对量子计算有几个认识上的误区。一个是量子计算机的信息存储量远远超过普通计算机。这个是把量子叠加态简单地等同于信息技术中的数字化信息。而这两者是不同的概念。以D-Wave为例,量子叠加态对于量子计算过程来说是没有确切含义的中间过程状态,并不能用来表达信息。计算完成后,量子叠加态一定要坍塌到一个单一的确定状态,此时才能对应于人们需要的信息——最优化问题的近似解。而最优化问题本身的信息是以某种形式存放在控制量子态坍塌过程(退火过程)的相关器件中的。不可能将大量的“确定性”信息“叠加”在一起放到量子位的“叠加态”中存储,因为量子叠加态是不可人为控制、不确定的。量子叠加态提供的是“量子算法”并行性,而不是信息存储;另外一个误区就是量子计算的速度问题。如前所述,量子计算目前只能针对具体特定的问题进行处理,所以速度对比也仅仅是针对特定的问题而言,而不是一般情况下的计算速度。而对于特定的问题,除了量子计算,还有其他可以比普通的计算机效率更高的手段。所以,现在还不能下结论,不能简单地认为量子计算机的速度会远远超过普通计算机。就D-Wave而言,针对其量子计算设计面向的优化问题,也没有人们普遍认可的确切证据证明其比传统非量子计算装置运算得更快;还有人讲量子计算突破了冯·诺依曼架构,这就更不着边际了。冯·诺依曼架构实现的是通用可编程计算,现在的量子计算只能做专用计算,还不具有通用计算能力,谈何突破冯·诺依曼架构?
《科学美国人》日文版2018年第二期专门讨论了量子计算机问题,它最后的结论是量子计算机至少还需要几十年的时间才可能实用化。这已经是比较乐观的看法了。一个更悲观的典型看法来自一位物理学家——2012年诺贝尔物理学奖得主,专门做量子信息的法国科学家Serge Haroche(1944—,物理学家,2012年获诺贝尔物理学奖,法兰西大学任职),他在其诺贝尔演讲词中专门说:量子计算机看起来是一个乌托邦。所以,今天对量子计算的研究,还属于非常初期的探索阶段,要想造出通用的量子计算机,不仅有大量的技术问题需要突破,更有基本的理论原理需要解决。如果量子计算不能实现通用可编程计算,则它就很难与传统计算机一决高下。
当然,也许如传统计算机那样实现一般的可编程通用计算就不应该是“量子计算”的归宿。如在第1.2节中讨论的,“量子计算”如果能够找到基本数字计算之外的与人的基本智能活动新的结合点,并且这个结合点能够支撑基本数字计算无法实现的其他类型的人类智能活动的话,那么量子计算将引发人类创造的辅助与延伸智能类工具的革命性变化,而不仅仅是运算速度的进一步提升。假如未来造出这样的计算机,那它的理论基础将如费曼所言,不再是以图灵机为代表的计算机科学理论了。而目前还看不到这样的前景,虽然它似乎更符合费曼当初的设想。
信息技术中与量子有关的另一个话题就是“量子通信”。它比量子计算要简单一些。由于量子现象远远超出人们的日常经验,因此对量子通信引发了许多争论,也有很多不准确的说法。
“量子通信”目前就是借助光量子态的不确定性,来让通信双方获得一组同样的、在测量前无法预知的真随机数,作为加密用的密钥。它的好处就是可以“几乎绝对地”保证密钥生成获取过程的保密性,同时也可以使得通信密钥高频度的更换(如“一次一密”)让用计算机破译密钥即使不是完全不可能,也彻底失去了意义。当然,这是理论上的推论,实际效果如何还要看未来大规模的工程实践情况。
第一个提出用量子特性做密钥传送的是IBM的Charles Bennett与他的合作者Giles Brassard。该想法于1984年提出,他们于1988年在实验室成功完成了实验验证。他们使用的方法是用一个单光子来传递随机数的一位(0或1),通信双方测量的是同一个光子。
1991年,Artur Ekert(1961—,量子物理学家,牛津大学任职)在其发表的一篇论文里提出利用纠缠现象以及量子态的随机性,利用纠缠光子对,既可以监测信道的安全,也能让通信双方获得相同的真随机数,用作加密的密钥。这种方式更加巧妙也更加玄妙。由于纠缠现象,虽然双方分别测量的是纠缠光子对中的一个,但是它们的状态是严格相关的,所以他们可以获得同样的随机数。
所以不论采取什么原理,目前“量子通信”与通信的带宽无关,仅仅与加密有关。它更不是超光速即刻通信,这也是很多人对量子通信的误解。目前对量子纠缠现象无法做更底层的科学解释,但是很明确的一点,就是它与超光速信息传送无关,也并不违背相对论。许多人,包括许多从事物理学工作的人,都认为量子纠缠违背了相对论,是“信息”无须时间过程的即刻传播。这种看法只是人们头脑中的想象,而非物理现实。如果量子纠缠真的是“信息”的即刻传播的话,那现在人们热衷的就不会是仅仅利用量子纠缠来做密钥分发,而会有更多的人去尝试利用量子纠缠来做即刻通信了。事实上迄今为止,还没有听到世界上有哪个实验室在做这种技术研究。利用量子纠缠做不确定的“量子态”的传送,即所谓的量子“隐形态传”,与信息技术领域里的“信息”无关,属于量子力学领域的探索,未来可能会应用到量子计算中。
对量子通信的一个重要的非议来源于“量子通信”这个名字。因为量子通信只是分发没有含义的随机数——密钥,并不传递有含义的信息,所以许多做传统通信的学者认为这不能算作是“通信”,是一种不“诚实”的做法。
说到量子力学,就不得不说一下冯·诺依曼也曾涉足量子力学领域的研究,他在1932年撰写出版的《量子力学的数学基础》一书成为量子物理学家的圣经。讨论了离奇晦涩的量子问题后,再回到冯·诺依曼对计算机的贡献上来。也许有朋友会说,这个冯·诺依曼结构看着挺简单,没有什么玄妙之处,怎么被推到了如此高的地位?这是因为今天的我们已经熟悉了现代计算机,再回顾过去的事情,会觉得一切都属正常。而在当时,电子计算机是一个从未有过的事物,在自然界也没有可模仿的对象。那时,按照什么方式来实现电子可编程计算,绝不是一件简单的、一目了然的事情。这是一个无中生有的过程,有无数种看上去可能的选择。事实上,前面介绍的计算机也确实在结构设计原理上彼此有很大的不同。所以,以冯·诺依曼为代表的科学家们经过摸索提炼出这个结构,是具有重大的历史意义的。
原始创新的重大意义不在于它的直接结果的复杂性,而在于它从无到有的开拓性与未来广泛应用的有效性。再复杂的锦上添花,也不能与看上去粗糙简陋的原始创新相媲美。
自冯·诺依曼结构成为基础标准之后,计算机发展到今天,基本上可以概括为两个大的方向:体积越来越小,以便适应更广泛的应用场合;计算速度越来越快,以便能够完成更复杂的计算类任务。计算机硬件技术的发展,基本都是围绕这两个目标进行的(见图1-6)。当然,还有一个附带的成果,就是存储量越来越大。
图1-6 计算机硬件发展的两个方向
需要特别指出的是,不论计算机变得多么小,也不论计算机算得多么快,在科学原理的意义上,计算机的DNA并没有变化,计算机介入人的智能活动的基础与起点没有丝毫的改变,依然是有限字长二进制数字的基本计算以及附带的数字存储。
所以,虽然计算机的应用越来越令人眼花缭乱,计算机的性能也在不断地发生着跨数量级的增长,但是它的本质功能却没有丝毫的改变或进步。
在人类科技发展的历程中,重大的“原理性”的突破都会带来天翻地覆的变化。在计算机领域,图灵贡献了奠基性的“科学原理”,而冯·诺依曼则贡献了基础性的“系统原理”。今天虽然信息技术花样繁多,但是能够达到奠基性“科学原理”高度的贡献还没有出现。在系统原理上,互联网等在系统层面也属于原理性贡献,所以对产业与社会也影响巨大。
信息技术正在进入一个空前繁荣的时期,必然会出现更多的新的原理性突破,而这些突破可能主要发生在系统原理层面(详见第8章第8.4节)。