上个世纪三十年代,邱奇和图灵共同提出了通用计算机的概念。在接下来的十多年里,因为战争需要下的国家推动,计算机得以很快从理论发展成为实体。在众多成果中以图灵提出的Pilot ACE计算机以及冯诺依曼提出的存储式计算机最为突出。战争之后,虽然Pilot ACE计算机运行效率更高,但存储式计算机以其更出色的可编程性获得了更多计算机科学家的青睐。计算机便以此为基础开始了近一个世纪的高速发展。
八十年代初的大众万万想不到十年后如此大块头的计算机能够被放到书桌上并快速普及到每个人的家里。九十年代的大众万万想不到十年后计算机可以成为我们连接世界的窗口。千禧年的大众万万想不到十年后计算机也能被握在手里,并且拥有超乎想象的计算能力。十年前的大众万万想不到如今的计算机拥有我们无法匹敌的“学习”能力,并在很多方面的表现超过了我们最顶尖的专家。
那么十年之后的什么是我们今天想不到的呢?或者我们应该怎么想象十年后的我们才靠谱呢?《自然》期刊在2014年刊登了一篇Igor Markov的文章《计算的基本极限的极限》。我们将以此文为基础并综合各方面论文,探讨计算机的极限以及面对这些极限计算机科学家们所采取的措施。希望这些探讨能让大家在脑海中勾勒出十年后的一个大概的轮廓。
在对这些问题探讨之前,我们先对计算机的工作原理做个简单的介绍。几十年计算机从不同方向上的发展将整个生态大概分出了四层,如下图所示。我们将越靠近用户的层级叫做高层,越靠近计算机硬件本身的层级叫做低层。从高到低,整个生态大概可以被分为应用层、编译层、架构层和电路层。其中应用和编译层被归纳为软件层,而架构和电路层被归纳为硬件层。应用层在应用层面上,实际的问题被分类成为各种复杂度。
需要说明的是计算机只能解决很少一类的问题,即是用有限内存能解决的问题。这类问题被归类成为PSPACE问题,如下图所示。值得注意的是这个归类只考虑了有限内存,并没有考虑完成它所需要的时间。在此基础上,各种问题又以解决它所需的时间归纳为各种其他复杂度问题,大致包括:P类复杂度问题必须在多项式时间内停止并输出正确的结果,其中n是输入的长度,c是常数。
NP类复杂度问题只要给出一个解,经典计算机就能够快速验证给出的解是否正确的所有问题。NPC类问题是指在多项式时间内,如果所有NP类问题都能被转化为另一个NP问题,那么这个转化后的NP类问题就称为NP完全问题。BQP类问题是指在多项式时间内,量子计算机能够轻易解决,且错误机率小于1/3的所有问题。
编译层程序员在算法的指导下将问题的解决方案写成程序。程序通过编译层里的编译器被翻译成机器能懂的二进制代码。编译器在翻译程序的同时也会进行一系列的优化,比如将程序并行,使得程序能够尽可能快得在硬件上面运行。架构层至此,一个问题的解决方案通过软件开发及编译,进入到硬件层面执行。
架构层指的是各个硬件单元的功能设计,如下图所示:处理器处理来自存储器和输入/输出端的指令,存储器储存指令和数据,输入/输出端连接计算机用户。简单来说,程序以指令的形式被存在存储器中。处理器通过读取存储器中的指令来执行程序。与此同时,处理器也接受来自输入/输出端的指令,并给予相应的回复。这些硬件单元如何排列,各自完成怎样的工作,就是计算机架构师研究的问题。
电路层电路层指的是每个硬件单元最底层的硬件设计,通过各种集成电路来实现架构层所设计的功能。由场效应晶体管所组成的开关电路是现代集成电路最主要的组成成分。传统的开关电路由MOS场效应晶体管制成。MOSFET是具有漏极、源极、栅极和衬底的4端子器件。下图显示了其三维结构。栅极和衬底之间由氧化层隔开。其工作原理就是在栅极施加一定的电压后,源极和漏极就会在场效应下联通,从而实现通路。
若栅极上没有电压,则源极和漏极断开,实现断路。正是无数个这写通路和短路的组合实现了计算机二进制0和1的转换。
最近苹果和华为相继发布了7纳米制程工艺的芯片。这是个什么概念呢?首先,制程工艺是指集成电路制造时的精度。因为电流在通过栅极时会有损耗,而栅极长度决定了电流损耗的程度。栅极长度越小,损耗就越小。而上述提到的7nm的制程工艺就是这个栅极的长度。制程工艺越小,电流损耗就越小,所以能在降低功耗的同时提高性能。这也是近几十年计算机性能高速发展的原因。
在了解了计算机的运行原理后,我们可以从工程、功耗、时空概念、复杂理论及新兴技术这五个方面的探讨计算机的极限,以及面对这些极限计算机科学家们所采取的措施。感兴趣的读者,可以扫以下二维码,关注「新原理研究所」进行更深一步的阅读哟!