在早期计算机架构中,有一种特殊的存储单元,被尊称为累加器,它是CPU内部的一股强大力量。作为核心部件,累加器的速度比机器主存储器更为迅捷,宛如CPU的私人助手,其存在极大提升了计算效率。
早期的计算机设计者们深知资源的珍贵,因此,许多早期机器只配备了一个累加器,这是它们运算的灵魂所在,也是它们负载存储体系结构的基石。这种单一的累加器在计算过程中扮演着至关重要的角色,它存储着每次计算的结果,避免了频繁地进出内存,显著提高了运算速度。
累加器的概念源于对历史的致敬,如J. Presper Eckert所提及的戈特弗雷德·雷布尼茨和布莱斯·帕斯卡的加法器,它们都是累加器理念的先驱。Percy Ludgate甚至在其1909年的分析机器中设想了更为复杂的乘数累加器(MAC),标志着累加器在计算机科学中的重要性。
到了1945年,ENIAC这款里程碑式的计算机拥有20个累加器,它们并行工作,每个都能独立处理8位的十进制数字,进行加减运算。IBM早期的计算机,如1952年的IBM 701,更是配备了36位累加器,以及专门的乘法器/商寄存器,以应对更复杂的数学操作。IBM 650和7070则进一步展示了累加器的灵活性,它们的累加器设计各有特色,适应了不同应用场景。
然而,累加器并非仅仅通过编号来识别,它隐藏在指令的深层结构中,作为指令执行中的默认操作对象。现代CPU通常采用2或3操作数架构,允许程序员灵活指定通用寄存器作为计算的源和目标,但这些机器并不单纯被视为累加器机器,而是通用计算平台的组成部分。
第一台可编程的通用电子计算机埃尼阿克(Electronic Numerical Integrator and Computer, ENIAC)于1945年完成设计。该系统的功耗为150千瓦,占地1800平方英尺[插图],重达27吨。ENIAC基于真空管、二极管和继电器等元件设计,其中包含17000多个用作开关的真空管。与分析机类似,它使用十位环形计数器(见第2章)实现了十进制数表示。它从IBM穿孔卡片读卡机接收输入数据,并将计算后的输出发送到卡片穿孔机。ENIAC体系结构能够执行复杂的处理步骤序列,包括循环、分支和子程序。该系统有20个10位累加器,它们类似于现代计算机中的寄存器。但是,除了累加器之外,它最初没有任何存储空间。如果在之后的计算中需要使用计算的中间结果,则必须将它们写入穿孔卡片,并在需要时回读。ENIAC每秒可以执行大约385次乘法。
ENIAC程序由插板布线和基于开关的功能表组成。对系统进行编程是一个艰巨的过程,通常需要优秀的女性程序员团队花费数周时间才能完成。由于真空管经常发生故障,因此可靠性也是一个问题,需要在日常维护的基础上进行故障排除,以便对发生故障的真空管进行隔离和更换。ENIAC于1948年得到改进,增加了通过穿孔卡片取代插板来对系统进行编程的能力。这一改进极大地提高了程序开发的速度。作为此次升级的顾问,约翰·冯·诺依曼(John von Neumann)提出了一种通用的计算机体系结构,其中包含存放程序指令和数据的单一存储区域、由算术逻辑单元和寄存器构成的处理组件、具有指令寄存器和程序计数器的控制单元。这种结构称为冯·诺依曼体系结构,许多现代处理器都采用了这种结构。ENIAC的早期应用包括研制氢弹以及计算远程火炮射程等。