Computer History Museum
这次去 Computer History Museum,体会到了对于计算量的需求远远早于电子计算机的发明,人们解决这一问题有很多发明。这次也很幸运看到了IBM 1401大型的演示过程。
计算机之前的计算
在电子计算机出现以前,银行、保险、航海、工程和天文已经需要反复处理大量数字。计算的需求早就存在,只是当时使用的是表格、木棒、齿轮和人工。
Napier’s Bones 把乘法表刻在一组可以排列的小棒上。把对应数字的小棒拼好,再沿斜线相加,就能完成多位数乘法。
Napier’s Bones:把乘法预先写进一组可以排列的表格。

Babbage 的 Difference Engine 又向前走了一步。它不是等人逐题输入算式,而是利用有限差分连续生成数表。例如平方数是:
0, 1, 4, 9, 16...
第一次相减得到 1, 3, 5, 7...,再相减永远是 2。机器只要保存这几列数字并反复做加法,就能不断算出下一个平方数。很多航海、工程和天文表都可以这样生成。它适合按固定步长连续制表,而不是随意输入一个 x 就立刻求值。Babbage Difference Engine No. 1 的三分之四比例演示模型。竖直的数字轮保存各阶差分,齿轮把数值逐列累加。

当程序变成一叠卡片
1801 年前后的 Jacquard loom(提花织机)让我第一次把纺织和编程联系起来。织布时,每织一横行都要决定哪些经线抬起。Jacquard 把这些选择打在穿孔卡上:一张卡控制一行,整串卡片跑完就织出一幅花纹。换一串卡,花纹就变;重新装上原来那串卡,同一花纹还能再织一次。
连在一起的提花卡片和 19 世纪织物样品。孔的排列最终变成了布上的鸟与花纹。


几十年后,Herman Hollerith 把穿孔卡用于 1890 年美国人口普查。一张卡记录一个人,触针从孔中穿过并接通电路,让对应的计数器加一;原本靠人工汇总的年龄、婚姻和出生地数据就能交给机器统计。
英国植物调查也是类似过程:研究人员先在野外记下物种、地点和日期,回来后把一条观察打进一张卡。机器按物种或地区排序、筛选和计数,工作人员再把结果画成分布图,最后在 1962 年出版 Atlas of the British Flora。同一条记录今天也许会写成一个 JSON document;当时它就在卡片的孔里。
左:一条植物观察从笔记到穿孔卡,再到今天的 JSON。右:调查数据生成的物种分布图。


Nordsieck Differential Analyzer
展厅里的 Nordsieck Differential Analyzer 很容易和 Babbage 的 Difference Engine 混在一起。中文也分别叫“微分分析机”和“差分机”,但两者的思路完全不同。
Babbage 用离散的数字和有限差分,把复杂运算化成一步步加法。Nordsieck 的机器则是 analog computer:它不把连续系统拆成一串数字,而是搭建另一个物理系统去模拟它。电压、轴的位置和转速可以代表温度、速度或压力;机械 integrator 的输出转角代表积分结果。把积分器、加法器和比例器按方程接起来,线怎么连,就决定机器在解什么方程。
1950 年,Arnold Nordsieck 用大约 700 美元的二战剩余零件造出这台机器。它是机电混合系统:电连接负责在模块之间传递量和驱动伺服,积分仍由机械 integrator 完成。相比早期微分分析机的长机械轴,它更小,也更容易重新配置。旁边的两张绘图台可以边计算边把结果画出来。
Nordsieck Differential Analyzer。上方是一排 integrator,左右两侧是绘图台。

计算前,要先把现实问题写成一个 model。例如研究核反应堆冷却,需要挑出温度、流量、泵速等变量,再写清它们怎样互相影响。Nordsieck 把这些关系接成积分器、加法器和比例器;启动以后,电压和转轴随时间变化,绘图台直接画出结果。
我本科时没有专门学过电路,所以问题来了,究竟怎么建模模拟这样的问题,数电模电又是怎么一回事?
模电和数电
模电也会计算:它直接用连续电压代表现实量,电路接法决定功能。温控风扇中,热敏电阻把温度变成电压;运放与设定值比较,再由晶体管调节电流。温度高,风扇加快;温度降,风扇变慢,不需要 CPU。
温控风扇的模电与数电实现。

数电版本多三步:ADC 把连续电压按时间采样并变成数字;MCU 是装着 CPU 和内存的小计算机,按程序比较温度;PWM 让供电快速开关,用“开多久”控制平均功率和转速。
数电把电压范围认作 0 和 1,晶体管再组成逻辑门、寄存器和 CPU。计算机就是可编程数电:CPU 不断取出并解码指令,完成计算,保存结果,再执行下一条。
黑胶沟槽连续记录声音,唱针把起伏还原成电压,再经放大器推动扬声器;CD 保存采样后的数字,播放时还要经过 DAC 变回电压。介质不同,但完整播放器常会同时用到模电和数电。
IBM 1401 Demo Lab
IBM 1401 Demo Lab 里的机器现在仍能运行。志愿者把程序卡送进 1402,1401 处理数据,需要时读写 729 磁带,最后由 1403 把结果打印出来。
IBM 1401 Demo Lab。前方是读卡设备,后方可以看到磁带机和主机机柜。

IBM 1401 于 1959 年推出,是一台晶体管化的 business computer。它主要处理公司每天都要做的批量工作,例如 payroll、账单和 invoice、库存、应收账款以及各种定期报表。典型系统包括负责计算的 1401、读写穿孔卡的 1402 和输出报表的 1403;数据量更大时还可以连接 729 磁带机。
程序和数据都可以从穿孔卡装入。一叠程序卡必须保持顺序;如果掉在地上,就要按卡片上的序号重新排列,否则程序会出错。
一箱 IBM 穿孔卡。卡片的顺序也是程序的一部分。

IBM 1401 也帮助很多公司把卡片上的数据搬到磁带。729 把 0 和 1 编成磁化变化,再由磁头写入和读回。一台 729 里,左侧的 file reel 提供磁带,中间的 read/write head 读写数据,右侧的 machine reel 只是收起同一条磁带,并不是备份盘。真正复制备份时,一台驱动器读取原带,另一台驱动器写出副本;其他驱动器还可以放排序时使用的工作带。
IBM 729 磁带机:左侧供带盘,中间读写磁头,右侧收带盘。下方真空柱负责缓冲并维持张力。

主机里的逻辑也不像今天的芯片那样不可见。1401 使用晶体管,但晶体管仍然是一颗颗焊在 Standard Modular System(SMS)电路卡上。电阻、连线和金属封装的晶体管都可以直接辨认。坏了一张卡,工程师可以把它拔出来诊断和更换。
IBM SMS 电路卡。逻辑门还没有被压进集成电路。

它的工作内存是 magnetic-core memory。玻璃瓶里只是还没织入内存的铁氧体磁环;做成内存后,每个小环保存一个 bit,两个磁化方向分别表示 0 和 1。X、Y 两组选择线在一个交点上选中磁环,感应线检测磁通变化。读取会改变磁环原来的状态,所以读完还要把这个 bit 写回去。
1401 可配置 1,400 到 16,000 个字符的磁芯内存。即使用最大配置,也大约只有 16 KB;今天一张几 MB 的手机照片,通常就需要它几百倍的空间。
左:还没织入阵列的铁氧体小环。右:X、Y 选择线和感应线怎样找到一个 bit。


最后是 IBM 1403 line printer。带有字符的 print chain 高速横向循环;目标字符经过某个位置时,后面的锤子把纸和色带撞向字符,许多位置可以同时打印。演示程序计算 2^328,1403 随后打印出完整的 99 位数字、科学计数法和英文写法。
左:打开外壳的 1403,连续纸两侧的孔负责送纸。右:1401 计算并打印的 2^328。


几十年后怎么看今天的 AI
今天每天都在用的 AI 和 ChatGPT,几十年后会不会也变成博物馆里的老古董。那时的人看 GPU、prompt 和 token,也许就像我们今天看穿孔卡、磁带和磁芯内存。
资料
- Computer History Museum:Revolution — The First 2000 Years of Computing
- Computer History Museum:IBM 1401 Demo Lab and Restoration Project
- Computer History Museum:About the Museum’s IBM 1401 Machines
- Computer History Museum:Nordsieck’s Differential Analyzer
- Computer History Museum:The Babbage Engines
Links
- Hub: Writing Hub