今天咱们聊聊那台老古董机器的信号如何跑到屏幕上的。大家看那根电线,实际上它早就被一根根变成了几百根,像蒲公英一样散开,每一根都是一个独立的营养通道,专门负责把不同的电流送到不同的地方。别被“总线”这个词骗了,它不是一条单一的跑道,而是一个庞大的分发中心,所有的信号都得靠它来排队,哪位也不抢,也不让哪位先走。 这就像个拥挤的菜市场摊位,菜贩子手里拿着一堆菜,你得一个个挑。信号就是那些菜,CPU 是那个大摊子,它不直接卖菜,而是把菜分给不同的摊子,比如卖运算、卖管住、卖存。

要是你的目标是算个 1+1,那乘法器就得干活;要是想让个“加一堆”程序跑起来,加法器就得排着队,还得给每个加法器发个信号:“第 4 个加法器,你预备好干活了!”不然它要是闲着,那多浪费电啊。 说到数据流向,这图得转个面。

那会儿大家习惯把数据从内存往 CPU 塞,那是“进栈”模式,就像人往柜台前排队。但目前的 CPU 是个倒置的仓库,数据是从内存里“推”出去的,这叫“出栈”。想象一下,内存是一个大仓库堆满了货,CPU 是仓库管理员,但管理员们不是一个人干的,得有分工。乘法器、加法器、存单元,它们各自负责不同品类货的搬运,每个单元都有个专属的出口,专门往 CPU 指定的位置对应货堆。

要不就你只做加减法,否则乘法器肯定忙不过来,这时候就得把数据往存器里塞,让乘法器去“就寝”休息一下,等它算得差不多了。 这种倒置结构有个益处,就是单核 CPU 也能运行复杂的程序。你能够与此同时让加法器、乘法器和存单元在一瞬间与此同时工作。

这就好比你让三个施工队在同一个工地与此同时干活,一个砌墙,一个铺地,一个浇混凝土,别看每个人只做一件事,但整体工程推进得飞快。

要是那会儿由一个工人把所有材料都拿过来再一个个砌,那效率低得吓人。 再讲讲那个著名的"1000000"实验。

那是当年冯·诺依曼结构最典型的一个场景。

那时候,CPU 要处理一百万条指令,每条指令长度 32 位,总共就有 3200 兆字节的数据要搬运。

要是用传统的 CPU 加内存,就是先加内存再往 CPU 里塞,这数据量相当于给 CPU 灌了一吨福汤,绕个弯子。但在那台机器上,乘法器、加法器、存单元是并行工作的。它们就像三个独立的管道,与此同时往外喷水。理论上,只要三个管道与此同时喷,就能在几秒钟就连几十毫秒内搞定这百万条指令。 实际上这种结构听起来挺高深,但本质上就是个庞大的流水线。CPU 就是个调度员,它发指令说:“乘法器,把这堆数据送给我。”乘法器收到命令后,别管别的,只管算。算得差不多了,它把结局搞到内存里,把数据清空,然后持续算下一个任务。整个过程是无序的,可能加法器先算完,紧接着乘法器又算完,最终存单元再汇总。但这正是现代并行处理的灵魂。 这种并行架构在目前的处理器里依然能看到影子。

比如多核 CPU,那实际上就是一群核心与此同时在干活,每个核心都是一个独立的小工厂。你不需求把所有数据都攒起来,每个核心只管自己负责的那一块。

不管是 iPhone 的 A 系列芯片,还是超算机上的节点,都是这一套逻辑在运作。数据不再是一根线,而是变成了成千上万根并行的小路,只要路不堵,车就能跑得比车快,就连比步行还快。 故此你看,那些复杂的运算,往往不是靠一条线干完的,而是靠无数条线与此同时努力的结局。

这就是计算机组成中看似好办却无比精妙的地方,它用看似混乱的数据流动,构建出了我们习当作常的高效运算。