尼尔·阿姆斯特朗(Neil Amstrong)和巴兹·奥尔德林(BuzzAldrin)在1969年执行阿波罗11号任务并首次登上月球 ,这也许是人类工程学历史上最伟大的成就。然而,很多人并没有意识到,阿波罗计划及其前驱任务能够成功的重要因素之一,就是“模拟”和“混合”(模拟-数字)计算机,NASA曾把这种计算机用于仿真,甚至在某些应用中用于飞行控制。事实上,很多人至今甚至从未听说过模拟计算机,以为计算机肯定是一种数字设备。如果半个世纪前模拟和混合计算机果真有如此价值,那它们为什么会销声匿迹,几乎不留任何痕迹?其原因与20世纪70年代技术的局限性有关:本质上,它们的设计、建造、操作和维护难度都太高了。但是,用今天的技术构建的模拟计算机和数字-模拟混合计算机则没有这些缺点,这也正是为什么现在,模拟计算机正在机器学习、机器智能和仿生电路中发挥着重要作用。在本文中,我将专注于模拟和混合计算机的另一种应用:高效科学计算。我认为,在生物、流体动力学、天气预报、量子化学、等离子体物理以及许多其他科学领域,现代模拟计算机可与数字计算机实现互补,用来求解各种相关方程式。下文解释了这些非常规计算机是如何做到的。一台模拟计算机就是一个由等同于待解问题的方程式进行管控的物理系统。首先确定待查系统对应的方程初始条件,然后允许模拟计算机中的变量随时间变化,所得到的结果即提供了相应方程的解。简单举例,你可以把一根水管和一个水桶看作是一台可以执行积分函数的模拟计算机。可以通过调整水管中的水流速度来匹配相应的积分函数。把水倒到水桶里,这一数学问题的解正是水桶里的水量。虽然有些模拟计算机的确会用流动的液体来进行计算,但最早期的模拟计算机的机械装置通常由各种转轮和齿轮组成。这种早期的模拟计算机包括范内瓦·布什于1931年发明的微分分析器,其构建原理可追溯到19世纪,主要得益于威廉·汤姆森(WilliamThomson,即后来的开尔文勋爵)和他的弟弟詹姆斯(James)的工作成果,詹姆斯还设计了用于计算潮汐的机械模拟计算机。这类模拟计算机长期以来一直用于控制战舰上的大炮。到了20世纪40年代,虽然机械类的模拟计算机仍沿用了一段时间,但电子模拟计算机开始飞速发展。正是数字设计理论之父克劳德·香农于1941年发表了影响重大的早期模拟计算理论。大约从那时起,在美国、苏联、德国、英国、日本以及其他国家,电子模拟计算机得到了广泛的发展。很多厂商,包括ElectronicAssociates 公司、Applied Dynamics、美国无线电公司、英国输力强、德律风根和波音公司,都生产电子模拟计算机。这些电子模拟计算机最初被用于导弹和飞行器设计以及飞行模拟器中。NASA自然成为其重要客户。随后其应用很快扩展到了其他领域,包括核反应堆控制。电子模拟计算机最初由成千上万个真空管组成,后来真空管被晶体管所取代。起初,它们的编程是通过在一个面板上手工用线连接各个组件来完成的。这种机器复杂又奇特,只有经过专门训练的人才能了解和进行操作,而这也是导致它们消亡的一个因素。模拟计算机衰退的另一个原因是20世纪60年代数字计算机的巨大进步,这得益于其众多优点:可直接编程,可进行算术操作,易存储,精度高,只要有足够时间,几乎能处理任何问题。随着金属氧化物半导体(MOS)集成电路技术的发展,用单个芯片取代作为数字开关的大量晶体管成为可能,数字计算机的性能在六七十年代得以迅速提高。模拟计算机制造商很快将数字电路纳入他们的系统,混合型计算机应运而生,不过为时已晚:以当时的设计和制造技术水平,这些计算机的模拟部分尚无法进行大规模集成。最后一台大型混合型计算机生产于20世纪70年代。随后世界头也不回地转向了数字计算机。今天的模拟MOS技术是高度先进的:其身影随处可见,例如在智能手机的收发器电路上,复杂的生物医学设备中,各种消费类电子产品中,以及构成物联网的许多智能设备里。如果利用这种高度先进的现代技术,那么这些模拟和混合计算机的样子,会与它们在半个世纪前截然不同。但为什么我们还要考虑用模拟电子技术来进行计算呢?这是因为传统的数字计算机虽然功能强大,但它们似乎已经达到了极限。每当数字电路开关时,它们都会消耗能量。在一个芯片上以千兆赫速度开关数十亿个晶体管,会产生大量的热量,我们必须在温度上升至可能会对设备造成损害前消除这些热量。在YouTube上,我们很容易就能找到在数字电脑芯片上煎鸡蛋的视频片段。能源效率也是科学计算特别关注的问题。这是因为数字计算机中连续的时间流必须被近似为一系列离散步长。在解决某些有挑战性的微分方程时,会需要非常精确的时间步长,以确保所涉及的算法得到有效的解。这意味着需要很长的时间并消耗许多能量来进行大量计算。大约15年前,我开始思考:用当今科技打造的模拟计算机能否带来价值?为了回答这个问题,格伦·考恩(GlennCowan)设计并建造了一台单芯片模拟计算机,他曾是我在哥伦比亚大学辅导的一名博士生,现在已是蒙特利尔康戈迪亚大学的教授。他建造的这台模拟计算机,包含模拟积分器、乘法器、函数发生器和其他电路块,以现场可编程门阵列(FPGA)的形式进行布局。也就是说各种功能模块均被嵌入到一片接线的海洋之中,制成后的芯片可在现场配置形成各种连接。数字编程可使一个模拟块的输入与另一个模拟块的输出相连,并由此建立起一个由待解方程进行控制的系统。此处不使用时钟:电压和电流是连续而非离散的。这台计算机可以得到一个自变量的复杂微分方程解,误差不超过百分之几。对某些应用来说,这种有限的准确度已经足够。在准确度不够的情况下,我们可以将其输出的近似值代入数字计算机进行改进,由于数字计算机可从较精确的初始估值开始处理,因此可以轻而易举地实现10倍左右的加速,同时节省相近数量级的能量。最近在哥伦比亚大学,我和我的两位同事石明(MingooSeok,音)和西姆哈·赛特马德哈万(Simha Sethumadhavan),以及两位学生郭宁(Ning Guo,音)和黄一鹏(Yipeng Huang,音),共同创建了第二代单片模拟计算机。与早期模拟计算机一样,我们设备中的所有模块都是同时运行的,而若要在数字领域中采用这样的信号处理方式,则需要高度并行的体系结构。我们现在制成了由几个二代设计模块构成的更大的芯片,可以解决更大尺度的问题。我们的模拟计算机采用的新设计在电力使用方面更加高效,并更易与数字计算机连接。这种混合形式的计算结合了两者的精髓:先用模拟部分以低能耗进行快速近似计算,再用数字部分进行编程、存储和高精度计算。我们最新制作的芯片上包含了很多过去用于模拟计算(例如积分计算或乘法计算)的电路。而新设计中的一个关键部件是一种能够连续计算任意数学函数的新型电路。下文将解释为何这种新型电路很重要。数字计算机在操作信号时认为只有两级电压值,分别代表数值0和数值1。当然,在这两种状态之间切换时,信号会出现中间电压值。而在典型的数字电路中,只有当信号电压稳定清晰地表示数值0或数值1时,才依靠系统时钟周期性地处理信号。为了实现这种周期性处理,系统时钟的周期要足够长,使得在下一轮信号处理前,电压从一个稳定水平切换至另一个稳定水平。其结果是,电路会输出一连串二进制值,每一个二进制值与时钟的一个标度值相匹配。我们的函数发生器则采用了我和同事们开发的方法,我们称之为连续时间数字,这是一种不同于异步数字逻辑的技术(见http://tsividis.ee.columbia.edu/current-research)。它涉及无时钟的二进制信号,这种信号可以在任何时刻改变它的值,而不是在预先设定的时间才能改变。我们还打造了模-数和数-模转换器,以及可以处理这种连续时间的数字信号的数字存储器。我们可以把模拟信号输入到这样的模-数转换器,将它转换成二进制数。该二进制数用来查找存储在内存中的值。然后再将输出值输入到数-模转换器。这样的连续时间电路组合便提供了一个可编程的模拟输入和模拟输出函数发生器。我们已经用这种新型计算机求解了一些颇具挑战的微分方程,解的准确度可达百分之几。这个结果跟数字计算机通常能获得的结果相比是很差的,但准确度并非一切。事实上在很多情况下,采用近似值已经足够。近似计算,这种有意限制准确度的计算方法,有时也会被用于当今的数字计算机中,比如在机器学习、计算机视觉、生物信息学和大数据挖掘等领域里。通常情况下,输入值本身就是近似值,因此这些结果也都是有意义的。由于我们新型计算机的核心是模拟,如果需要,它可直接与传感器及执行器接口。它的高速率允许计算机在执行计算任务的同时与用户进行实时交互,否则将会慢得令人难以置信。当然,我们的计算方法仍有不完善之处。难点之一是特别复杂的问题会需要大量的模拟计算块,而这将使芯片尺寸变大,成本增加。解决这个问题的一种方法是把待解的计算问题分解为更小的子问题,每个子问题依次由一台模拟计算机在数字计算机的监督下进行解决。这里的计算不再是完全并行的,但至少是可能的。几十年前,当混合计算机流行时,研究人员就曾探索过这种方法。但直到混合计算机被淘汰,他们也没能取得多少进展。这种技术还需要进一步发展。
另一个难题是在大型模拟计算芯片中,在不同电路块之间任意连接配置是相当困难的:所需的布线网络在规模和复杂性上会变得难以承受。然而,如果要在模拟计算机上解决一些科学问题,这些连接又是必需的。
三维制造技术也许能突破这一限制。但就目前而言,我们的混合设计的模拟核心最适合于那些仅需局部连接即可运行的应用程序,例如临近(而不是远距离)分子相互作用的分子阵列仿真。
第三个难点是运行多值函数以及有效处理与偏微分方程相关的问题。在20世纪70年代,曾有人开发过利用混合计算机解决这类方程的几种技术,而我们打算捡起前人的工作。
在提高计算精度方面,模拟电路也有不足之处。在数字电路中,只需增加位数就可以提高精度。但是在模拟计算机中提高精度则需要更大的芯片面积。这就是为什么我们现在的目标只是那些低精确度的应用。
━━━ ━━━
我曾说过模拟计算可以加速计算并节省能源,但我应该描述得更为具体一些。我和我的同事们开发的这种新型计算机进行模拟处理通常需要大约1毫秒的时间,解一个只涉及一个导数的微分方程通常需要小于0.1微焦耳的能量。而如果我们采用普通的制造技术(65纳米CMOS)的话,这会需要0.5平方毫米的芯片面积。涉及两个导数的方程则需要2倍的能量和芯片面积,以此类推,但求解的时间是一样的。
对于某些成本不是问题的应用来说,我们甚至可以考虑晶圆级集成,也就是把整个硅晶片当作一个大芯片。一个300毫米的晶圆芯片可以容纳超过10万个积分器,这样就能够模拟一个有10万个耦合的一阶非线性动力学方程系统,或有5万个耦合的二阶方程系统,以此类推。这在诸如模拟大分子阵列动态的问题上也许会很有用处,求解时间仍然在毫秒级,功耗约为几十瓦左右。
许多科学问题涉及耦合微分方程组的求解。为了简单起见,我们在这里考虑一个有两个变量的微分方程,这两个变量分别为x1和x2。一台模拟计算机利用一个电路来求解x1和x2,在这个电路的两条电线中流动的电流由相同的方程控制。只要通过合适的电路,这两条电线中的电流将迅速地代表原方程式的解(上图)。这一过程需要模拟积分器、乘法器、扇出块以及恒定电流源。(总电流只需把电线连接起来即可)。为了求解非线性微分方程式,单芯片模拟计算机也使用连续时间电路形成能产生任意函数的块(粉色)。
因此,一台通用的模拟计算机可由一块现场可编程芯片进行构建,这块芯片包含许多在数字控制下运行的模拟电路元件(下图,图中每条水平和垂直的灰线代表多根导线)。当我们需要更高的精度时,可以将此类模拟计算机得到的结果输入到数字计算机中进行细化。
只有实验能证实这种新型计算机是否实际可行,且模拟误差的积累不会产生不良的后果。如果它真的可行,其结果将远超今天的数字计算机。对于数字计算机,处理这样级别的复杂问题时将需要耗费大量的能量,求解时间甚至会达到几天甚至几周。显然我们还需要进行更多研究才能回答上述问题和一些其他问题,诸如如何在模拟部分和数字部分之间进行任务分配,如何把一个大问题分解为若干个小问题,以及如何将生成的解进行组合。为了寻求这些答案,我们和其他新近的对模拟计算机感兴趣的研究人员们,从半个世纪前许多非常聪明的工程师和数学家所做的工作中获益良多。我们不应该试图重新发明一个复杂的系统,而应将前人的成就作为跳板,继续向前远行。至少这是我们的希望,毕竟只有实践才能出真知。