查看原文
其他

『译』计算机体系结构发展史(一)

唐杉 StarryHeavensAbove 2022-12-01

前言

2021年春节,我有幸参与了《计算机体系结构:量化研究方法(第6版)》中文译本的审校工作。之后,更多专家加入,最近终稿几近完成。和大部分参与其中的朋友一样,这段经历对我来说更多的是”重温经典“的过程,也是进一步学习和思考的机会。

对这部书的价值,相信大家都非常清楚。但可能不是所有朋友都了解,这部书印刷部分包括的是正文的7个章节和A,B,C三个附录,而剩下的D-M的10个附录是可以在书籍网站上免费下载阅读的(网站还有一些其它很有价值的资源,可通过文后原文链接访问)。

这些附录也包含了大量有价值的信息。其中,附录M:Historical Perspectives and References,尤为有趣,读后收获颇丰。因此,我想在这本经典书籍的中文译本即将出版之际,翻译并分享这部分介绍计算机体系结构发展历程的内容,相信大家也会和我一样有所启发。

T.S.

P.S. 这部分内容有大量的专业词汇和专有名称,为了减少歧义,一些地方保留了原文。

If … history … teaches us anything, it is that man in his quest for

knowledge and progress is determined and cannot be deterred.

John F. Kennedy

Address at Rice University (1962)


Those who cannot remember the past are condemned to repeat it.

George Santayana

The Life of Reason (1905), Vol. 2, Chapter 3

M.1 简介


本附录提供了《计算机体系结构:量化研究方法(第6版)》中一些关键思想和技术的历史背景。通过观察一系列的计算机机型,或通过描述重要的项目,可以追踪一个想法是如何发展的。如果读者有兴趣了解某个特定概念或机型,或进行更深入的阅读,可以在每个部分的末尾找到更多参考资料。
M.2节从数字计算机的发明开始谈起,对应于书籍的第1章。关于存储器层次结构(memory hierarchy)的M.3节对应于第2章和附录B。关于指令集架构(instruction set architecture)的M.4节涵盖了附录A,J和K。关于流水线和指令级并行(pipelining and instruction-level parallelism)的M.5节对应于第3章以及附录C和H。关于向量机(vector),SIMD和GPU架构中的数据并行(data-level paral- lelism)的M.6节对应于第4章。关于多处理器(multiprocessors)和并行编程(parallel programming)的M.7节涉及第5章及附录F,G和I。有关集群(cluster)的发展的M.8节涉及第6章。最后,关于I/O技术的M.9,对应于附录D
注:本系列文章的划分也基本参照原文的方式。

M.2 The Early Development of Computers (Chapter 1)


在这个部分,我们主要讨论数字计算机的早期发展状况以及性能测量方法的演进。

The First General-Purpose Electronic Computers

Moore School of the University of Pennsylvania的J. Presper Eckert和John Mauchly打造了世界上第一台可运行的电子通用计算机,该机器称为ENIAC(Electronic Numerical Integrator and Calculator),由美陆军资助,在第二次世界大战期间投入使用,但直到1946年才公开。ENIAC用于计算火炮弹道射击表。ENIAC规模巨大,100英尺长,8.5英尺高,几英尺宽。20个十位数字的寄存器每个都长2英尺。总共有18,000个真空电子管。

尽管ENIAC大小比现在一般的计算机大三个数量级,但速度却慢了五个数量级以上。一个加法运算的时间为200微秒。ENIAC提供了条件跳转,是可编程的,这是与早期计算器的明显区别。编程是通过插入电缆和设置开关手动完成的,通常需要半小时到一整天的时间。数据由打孔卡提供。ENIAC的应用主要受到存储量少和编程繁琐的限制。

1944年,约翰·冯·诺依曼(John von Neumann)加入ENIAC项目。该小组希望改进程序输入的方式,并讨论了将程序存储为数字的问题。冯·诺依曼将这些想法具体化,并写了一份备忘录,提出一种名为EDVAC(Electronic Discrete Variable Automatic Computer)的存储程序(stored-program)计算机。赫尔曼·戈德斯汀(Herman Goldstine)分发了这个备忘录,并在上面写下了冯·诺伊曼的名字。而Eckert和Mauchly的名字被省略了,这令他们沮丧不已。这份备忘录成为我们常用的术语“冯·诺依曼计算机”的基础。几位计算机领域的早期发明者认为,虽然冯·诺伊曼把一个好的想法概念化并撰写下来,但他获得了过多赞誉,而真正实现这些机器的工程师Eckert和Mauchly的贡献没有获得足够的认可。像大多数历史学家一样,本书作者(2000年IEEE冯·诺伊曼奖章的获得者)认为,这三个人在开发存储程序计算机中都发挥了关键作用。冯·诺依曼在描述和泛化基本思想,思考编程问题方面的所扮演了重要角色,这对于将基本思想传播给更广泛的受众至关重要。

1946年,剑桥大学的Maurice Wilkes参观了Moore School,参加了有关电子计算机发展的一系列讲座的后半部分。当他回到剑桥时,Wilkes决定着手建立一个名为EDSAC(Electronic Delay Storage Automatic Calculator)的存储程序计算机的项目。EDSAC使用汞延迟线(mercury delay lines)作为存储器;因此,其名称中使用“延迟存储”这个词汇。EDSAC于1949年投入使用,是世界上第一台全规模运行的存储程序计算机[Wilkes, Wheeler, and Gill 1951; Wilkes 1985, 1995]。一个名为Mark I的小型原型机由曼彻斯特大学制造,于1948年运行,可以称为第一台可运行的存储程序计算机。EDSAC是一种基于累加器的架构。这种风格的指令集架构一直流行到70年代初。(附录A以EDSAC指令集的简要摘要开头。)

1947年,Mauchly协助成立了国际计算机协会(Association for Computing Machinery)。他曾担任ACM的第一任副总裁和第二任总裁。同年,Eckert和Mauchly申请了电子计算机专利。Moore School的院长要求他们将专利移交给该大学,这可能是Eckert和Mauchly最终离开项目的原因。他们的离开严重影响了EDVAC项目,该项目直到1952年才开始运作。

Goldstine于1946年离开Institute for Advanced Study at Princeton加入冯·诺伊曼。他们与Arthur Burks一起,根据1944年的备忘录发表了一份报告[Burks, Goldstine, and von Neumann 1946]。Princeton’s Institute for Advanced Study的Julian Bigelow受到该论文的启发制造了IAS计算机。它总共有1024个40-bit的字,比ENIAC快10倍左右。该小组考虑了机器的用途,发布了一系列报告,并鼓励大家使用。这些报告和使用者的参与激发了许多新计算机的开发,包括IBM的第一台基于IAS的计算机701。Burks,Goldstine和冯·诺伊曼的论文在这段时期是令人难以置信的。这篇论文讨论了现代计算机中的大多数体系结构设计的概念,直到今天,我们很难想象这篇具有里程碑意义的论文是50多年前撰写的(请参见第2章开头的引言)。

在ENIAC的同一时期,Howard Aiken在哈佛设计了一种称为Mark-I的机电计算机。Mark-I是由一个来自IBM的工程师团队制造的。紧随Mark-I之后,他建造了了继电器式计算机(relay machine)Mark-II,以及两种真空电子管计算机Mark-III和Mark-IV。Mark-III和Mark-IV是在第一批存储程序计算机之后制造的。由于它们具有分开的指令和数据存储器,这些机器被存储程序计算机的倡导者视为“反潮流”的。哈佛架构Harvard architecture)一词就是为了描述此类机器而创造的。尽管与原始含义明显不同,但该术语在今天用于表示具有单个主存储器但具有单独的指令和数据高速缓存的计算机。

MIT的Whirlwind项目[Redmond and Smith 1980]始于1947年开始,目标是应用于实时雷达信号处理。尽管它产生了很多发明,但其最重要的创新是创造了磁芯存储器(magnetic core memory),这是第一种可靠且廉价的存储技术。Whirlwind有2048个16位字的磁芯。磁芯存储器成为近30年的主要存储技术。

Important Special-Purpose Machines

二战期间,英国和美国的主要计算工作都集中在专用的密码破解计算机上。英国的工作旨在解密德国Enigma编码机加密的消息。这项工作在一个名为Bletchley Park的地方进行,导致了两台重要计算机的诞生。第一台是由艾伦·图灵(Alan Turing)构想的机电机器(electromechanical machine),称为BOMB [see Good in Metropolis, Howlett, and Rota 1980]。第二台更大的电子计算机是由Newman and Flowers构思和设计的,被称为COLOSSUS[see Randall in Metropolis, Howlett, and Rota 1980]。这些计算机是高度专业化的密码分析机,通过解密已编码消息(尤其是发送到U艇的消息),在战争中发挥了至关重要的作用。在Bletchley Park的工作是高度机密的(实际上,其中一些仍处于机密状态)。因此,很难追踪这些工作对于ENIAC,EDSAC和其它计算机项目的直接影响,但这些工作无疑对计算机技术的发展和了解其中的关键问题产生间接的影响。

在美国,用于密码分析的专用计算机也有类似的经历。这项工作最直接的派生公司是Engineering Research Associates (ERA) [see Thomash in Metropolis, Howlett, and Rota 1980]。该公司是战后成立的,旨在将创新技术思想进行商业化。ERA制造了几台计算机,出售给了保密的政府机构,最终被Sperry-Rand收购,后者在早些时候还收购了Eckert Mauchly Computer Corporation公司。

值得一提的另一套早期计算机是由Konrad Zuse在30年代末和40年代初在德国制造的一组专用机器[see Bauer and Zuse in Metropolis, Howlett, and Rota 1980]。除生产了可运行的计算机外,Zuse还是第一个实现浮点运算的人(冯·诺依曼认为这是不必要的!),他早期的机器使用的机械存储(mechanical store),比当时的其它的机电解决方案要小。他的最后一台计算机是机电的,但由于战争,这项工作没有完成。

John Atanasoff是电子计算机发展中另一位重要的早期贡献者,他在40年代初建造了小型电子计算机[Atanasoff 1940]。他的机器,称为Atanasoff Berry Computer(ABC),由爱荷华州立大学设计,是一台一直无法完全运行的专用计算机。Mauchly在建造ENIAC之前曾短暂访问过Atanasoff,而Atanasoff的一些想法(例如使用二进制表示法)可能影响了Mauchly。Atanasoff机器的存在,ENIAC专利的延迟(由于该工作的保密性,直到战后才可以申请专利),以及冯·诺依曼的EDVAC论文的发布,都被用来打破Eckert– Mauchly专利[Larson 1973]。John Atanasoff对计算机的发明所起的作用仍然存在争议,Eckert和Mauchly通常被认为是第一台可运行的通用电子计算机的建造者[Stern 1980]。尽管如此,Atanasoff的计算机展示了后来的计算机中用到的几项重要创新。Atanasoff的工作值得称赞,公平的说,他应该因世界上第一台专用电子计算机,以及可能对Eckert和Mauchly的工作产生的影响而获得荣誉。

Commercial Developments

1947年12月,Eckert和Mauchly组建了Eckert-Mauchly Computer Corporation。他们的第一台计算机,BINAC,是为Northrop制造的,于1949年8月展示。在出现一些经济困难之后,Eckert-Mauchly Computer Corporation被Remington-Rand收购,后更名为Sperry-Rand。Sperry-Rand整合了Eckert-Mauchly,ERA及其制表业务,形成了专门的计算机部门,称为UNIVAC。UNIVAC在1951年6月发布了第一台计算机UNIVACI。UNIVACI售价250,000美元,是第一台成功的商用计算机 - 共生产了48个系统!今天,这种早期的计算机,以及许多其它许多引人入胜的计算机知识,都可以在Computer History Museum in Mountain View, California中看到。另外,Deutsches Museum in Munich、the Smithsonian Institution in Washington, D.C.,以及许多在线虚拟博物馆也都展示这些早期计算机系统。

早期主要覆盖打孔卡和办公自动化业务领域的IBM一直到1950年才开始制造计算机。第一台IBM计算机是IBM 701,基于冯·诺伊曼的IAS机器,于1952年出厂,最终销售了19套[see Hurd in Metropolis, Howlett, and Rota 1980]。在50年代初,许多人对计算机的未来感到悲观,认为这些“高度专业化”的计算机的市场机会相当有限。尽管如此,IBM迅速成为最成功的计算机公司。他们对可靠性的重视以及以客户和市场为导向的战略是成功的关键。尽管701和702取得的成绩还不算耀眼,但后续机型650、704和705(分别于1954年和1955年交付)取得了巨大的成功,各自的销售量分别为132到1800台。

时至今日,计算机的先驱们已经写了好几本介绍早期计算机的著作[Goldstine 1972; Wilkes 1985, 1995],以及Metropolis, Howlett, and Rota [1980],这些著作记录了早期开拓者的回忆。此外,还有许多围绕历史人物的独立的著作[Slater 1987];以及一本致力于讲述计算历史的期刊,《计算历史年鉴》(Annals of the History of Computing)。

Development of Quantitative Performance Measures: Successes and Failures

在计算机发展的早期,设计人员就设定了性能目标,比如,ENIAC希望比哈佛Mark-I快1000倍;IBM Stretch(7030)则要求比现有最快的机器快100倍。不过,当时人们尚不清楚如何对这种性能指标进行评测。回顾过去,我们可以看到一个始终如一的规律,即每一代计算机都淘汰了上一代的性能评测技术

最初的性能衡量标准是执行单个操作(例如:加法运算)的时间。由于大多数指令执行时间相同,因此一个指令的执行时间就可以让我们了解其它指令的情况。然而,随着计算机中指令的执行时间变得越来越多样化,单独一个操作的运行时间对于性能的比较来说已经用处不大。为了反映这些差异,通常会计算“混合指令组”(instruction mix)的运行时间,这种指令组合是通过测量计算机中许多程序中指令的相对频率来确定的。The Gibson mix[Gibson 1970]是一种早期流行的指令组合。将每个指令的时间乘以其在指令组中的权重即可计算出平均指令执行时间。(如果以时钟周期为单位,则平均指令执行时间与每条指令的平均周期相同。)由于不同计算机的指令集是大致相似的,在进行比较的时候,这种方法更为准确。后来更常用的MIPS(Millions of instructions per second)方法,就是计算平均指令执行时间的倒数。相较而言,MIPS的好处是外行人更容易理解。

随着CPU变得越来越复杂,以及对内存层次架构和流水线的依赖越来越高,每条指令的执行时间受到很多因素影响,不再是一个单一的值,MIPS值也已经无法从指令组合和手册中计算出来。因此出现了使用核程序(Kernels)和合成程序(Synthetic Programs)进行基准测试的方法。Curnow和Wichmann [1976] 通过测量用Algol 60编写的科学计算程序创建了Whetstone测试程序。该程序后来转换为FORTRAN,并广泛用于表征科学计算程序的性能。McMahon [1986]和Lawrence Livermore Laboratory的研究人员针对类似的目标,设计了Livermore FORTRAN Kernels,试图为超级计算机建立基准测试。与Whetstone不同的是,这些核程序是由来自真实程序中的循环体而组成。

很显然,MIPS无法比较具有不同指令集的体系结构,因此人们设计了relative MIPS的概念。当VAX-11/780准备在1977年发布时,DEC运行了一些小型基准测试,这些基准测试也在IBM 370/158上运行。IBM的市场部分将370/158称为1 MIPS计算机。由于这些程序以相同的速度运行,因此DEC的市场部门也将VAX-11/780称为1 MIPS计算机。

对于计算机M来说,其relative MIPS(基于某些参考机器)定义为:

VAX-11/780的流行使其成为relative MIPS的流行参考机型(特别是因为1 MIPS计算机的relative MIPS易于计算)。如果一台计算机在运行某个基准测试程序时比VAX-11/780快五倍,则在这个基准测试下其评分是5个relative MIPS。VAX-11/780机型的1 MIPS的评分在前4年内并没有受到质疑,直到DEC的Joel Emer在分时负载下测量VAX-11/780时,发现VAX-11/780的本机MIPS等级应为0.5。随后运行某些基准测试程序达到3个MIPS的VAX计算机就被称为6 MIPS机器,因为它们的运行速度比VAX-11/780快六倍。到1980年代初,术语MIPS几乎普遍用于表示relative MIPS。

20世纪70年代和80年代标志着超级计算机行业的发展,其主要特征是追求浮点密集型程序的高性能。平均指令时间和MIPS显然不适合该行业,因此,MFLOPS(Million Floating-point Operations per Second)被发明,它可以有效地衡量浮点应用的基准测试程序执行时间的倒数。不幸的是,市场营销团队在超级计算机大战中更多使用峰值MFLOPS来描述其性能,客户也很快忘记了利用基准测试程序来评价和对比的方法。

SPEC(System Performance and Evaluation Cooperative)成立于80年代后期,旨在改善基准测试的混乱状况,并为性能对比提供更有效的依据。该小组最初专注于UNIX市场中的工作站和服务器,而这仍然是当今这些基准测试的重点。SPEC基准测试的第一个版本现称为SPEC89。相对传统的的基准测试,使用更实际的应用程序作为基准测试程序是SPEC的重大改进。在将近二十年后的今天,SPEC2006仍然在处理器的基准测试中发挥重要作用。 

- 第一部分完 -


参考资料

Amdahl, G. M. [1967]. “Validity of the single processor approach to achieving large scale computing capabilities,” Proc. AFIPS Spring Joint Computer Conf., April 18–20, 1967, Atlantic City, N.J., 483–485.
Atanasoff, J. V. [1940]. “Computing machine for the solution of large systems of linear equations,” Internal Report, Iowa State University, Ames.
Azizi, O., Mahesri, A., Lee, B. C., Patel, S. J., & Horowitz, M. [2010]. Energy- performance tradeoffs in processor architecture and circuit design: a marginal cost analysis. Proc. International Symposium on Computer Architecture, 26-36. Bell, C. G. [1984]. “The mini and micro industries,” IEEE Computer 17:10(October), 14–30.
Bell, C. G., J. C. Mudge, and J. E. McNamara [1978]. A DEC View of Computer Engineering, Digital Press, Bedford, Mass.
Burks, A. W., H. H. Goldstine, and J. von Neumann [1946]. “Preliminary discussion of the logical design of an electronic computing instrument,” Report to the U.S. Army Ordnance Department, p. 1; also appears in Papers of John von Neumann, W. Aspray and A. Burks, eds., MIT Press, Cambridge, Mass., and Tomash Publishers, Los Angeles, Calif., 1987, 97–146.
Curnow, H. J., and B. A. Wichmann [1976]. “A synthetic benchmark,” The Computer J. 19:1, 43–49.
Dally, William J., “High Performance Hardware for Machine Learning,” Cadence Embedded Neural Network Summit, February 9, 2016. http://ip.cadence. com/uploads/presentations/1000AM_Dally_Cadence_ENN.pdf
Flemming, P. J., and J. J. Wallace [1986]. “How not to lie with statistics: The correct way to summarize benchmarks results,” Communications of the ACM 29:3 (March), 218–221.
Fuller, S. H., and W. E. Burr [1977]. “Measurement and evaluation of alternative computer architectures,” Computer 10:10 (October), 24–35.
Gibson, J. C. [1970]. “The Gibson mix,” Rep. TR. 00.2043, IBM Systems Development Division, Poughkeepsie, N.Y. (research done in 1959).
Goldstine, H. H. [1972]. The Computer: From Pascal to von Neumann, Princeton University Press, Princeton, N.J.
Gray, J., and C. van Ingen [2005]. Empirical Measurements of Disk Failure Rates and Error Rates, MSR-TR-2005-166, Microsoft Research, Redmond, Wash.
Jain, R. [1991]. The Art of Computer Systems Performance Analysis: Techniques for Experimental Design, Measurement, Simulation, and Modeling, Wiley, New York.
Kembel, R. [2000]. “Fibre Channel: A comprehensive introduction,” Internet Week (April).
Larson, E. R. [1973]. “Findings of fact, conclusions of law, and order for judgment,” File No. 4-67, Civ. 138, Honeywell v. Sperry-Rand and Illinois Scientific Development, U.S. District Court for the State of Minnesota, Fourth Division (October 19).
Lubeck, O., J. Moore, and R. Mendez [1985]. “A benchmark comparison of three supercomputers: Fujitsu VP-200, Hitachi S810/20, and Cray X-MP/2,” Computer 18:12 (December), 10–24.
Landstrom, B. [2014]. “The Cost Of Downtime,” http://www.interxion.com/blogs/ 2014/07/the-cost-of-downtime/
McMahon, F. M. [1986]. The Livermore FORTRAN Kernels: A Computer Test of Numerical Performance Range, Tech. Rep. UCRL-55745, Lawrence Livermore National Laboratory, University of California, Livermore.
Metropolis, N., J. Howlett, and G. C. Rota, eds. [1980]. A History of Computing in the Twentieth Century, Academic Press, New York.
Mukherjee S. S., C. Weaver, J. S. Emer, S. K. Reinhardt, and T. M. Austin [2003].
“Measuring architectural vulnerability factors,” IEEE Micro 23:6, 70–75. Oliker, L., A. Canning, J. Carter, J. Shalf, and S. Ethier [2004]. “Scientific computations on modern parallel vector systems,” Proc. ACM/IEEE Conf. on Supercomputing, November 6–12, 2004, Pittsburgh, Penn., 10.
Patterson, D. [2004]. “Latency lags bandwidth,” Communications of the ACM 47:10 (October), 71–75.
Redmond, K. C., and T. M. Smith [1980]. Project Whirlwind—The History of a Pioneer Computer, Digital Press, Boston.
Shurkin, J. [1984]. Engines of the Mind: A History of the Computer, W. W. Norton, New York.
Slater, R. [1987]. Portraits in Silicon, MIT Press, Cambridge, Mass.
Smith, J. E. [1988]. “Characterizing computer performance with a single number,” Communications of the ACM 31:10 (October), 1202–1206. SPEC. [1989]. SPEC Benchmark Suite Release 1.0 (October 2). SPEC. [1994]. SPEC Newsletter (June).
Stern, N. [1980]. “Who invented the first electronic digital computer?” Annals of the History of Computing 2:4 (October), 375–376.
Touma, W. R. [1993]. The Dynamics of the Computer Industry: Modeling the Supply of Workstations and Their Components, Kluwer Academic, Boston.
Weicker, R. P. [1984]. “Dhrystone: A synthetic systems programming benchmark,” Communications of the ACM 27:10 (October), 1013–1030.
Wilkes, M. V. [1985]. Memoirs of a Computer Pioneer, MIT Press, Cambridge, Mass.
Wilkes, M. V. [1995]. Computing Perspectives, Morgan Kaufmann, San Francisco.
Wilkes, M. V., D. J. Wheeler, and S. Gill [1951]. The Preparation of Programs for an Electronic Digital Computer, Addison-Wesley, Cambridge, Mass.


新书预售即将开始,还请大家保持关注




公众号专题:

人工智能芯片技术基础

人工智能芯片技术进步
人工智能芯片产业发展
人工智能芯片初创公司
人工智能芯片评测对比
科技巨头的芯片尝试
从学术会议看人工智能芯片
基础芯片技术



题图由stable diffusion生成
prompt: beautiful painting of computers in datacenter, abstract, oil and canvas, by J W M Turner
本文为个人兴趣之作,仅代表本人观点,与就职单位无关

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存