计算机性能之殇(一)-- 天才冯·诺依曼与冯·诺依曼瓶颈

fundebug 2019-03-29

摘要: 理解冯·诺依曼架构。

本文的目标是在我有限的认知范围内,讨论一下人们为了提高性能做出的种种努力,这里面包含硬件层面的 CPU、RAM、磁盘,操作系统层面的并发、并行、事件驱动,软件层面的多进程、多线程,网络层面的分布式,等等等等。事实上,上述名词并不局限于某一个层面,计算机从 CPU 内的门电路到显示器上浏览器中的某行字,是层层协作才得以实现的;计算机科学中的许多概念,都跨越了层级:事件驱动就是 CPU 和操作系统协作完成的。

可能的文章列表

以下是可能的文章列表,我在撰写过程中可能会随时修改:

  • 天才冯·诺依曼与冯·诺伊曼瓶颈
  • 分支预测、流水线与多核 CPU
  • 通用电子计算机的胎记:事件驱动
  • Unix 进程模型的局限
  • DPDK、SDN 与大页内存
  • 现代计算机最亲密的伙伴:局部性与乐观
  • 分布式计算、超级计算机与神经网络共同的瓶颈

天才 冯·诺依曼

冯·诺依曼1903年12月28日出生于奥匈帝国布达佩斯,1957年2月8日卒于美国,终年53岁。在他短暂的一生中,他取得了巨大的成就,远不止于世人熟知的“冯·诺依曼架构”。

约翰·冯·诺伊曼,出生于匈牙利的美国籍犹太人数学家,现代电子计算机与博弈论的重要创始人,在泛函分析、遍历理论、几何学、拓扑学和数值分析等众多数学领域及计算机学、量子力学和经济学中都有重大贡献。

约翰·冯·诺伊曼的维基百科

除了对计算机科学的贡献,他还有一个称号不被大众所熟知:“博弈论之父”。博弈论被认为是20世纪经济学最伟大的成果之一。(说到博弈论,我相信大多数人第一个想到的肯定跟我一样,那就是“纳什均衡”)

冯·诺依曼架构

冯·诺依曼由于在曼哈顿工程中需要大量的运算,从而使用了当时最先进的两台计算机 Mark I 和 ENIAC,在使用 Mark I 和 ENIAC 的过程中,他意识到了存储程序的重要性,从而提出了存储程序逻辑架构。

“冯·诺依曼架构”定义如下:

  • 以运算单元为中心
  • 采用存储程序原理
  • 存储器是按地址访问、线性编址的空间
  • 控制流由指令流产生
  • 指令由操作码和地址码组成
  • 数据以二进制编码

优势

冯·诺依曼架构第一次将存储器和运算器分开,指令和数据均放置于存储器中,为计算机的通用性奠定了基础。虽然在规范中计算单元依然是核心,但冯·诺依曼架构事实上导致了以存储器为核心的现代计算机的诞生。

注:请各位在心里明确一件事情:存储器指的是内存,即 RAM。磁盘理论上属于输入输出设备。

该架构的另一项重要贡献是用二进制取代十进制,大幅降低了运算电路的复杂度。这为晶体管时代超大规模集成电路的诞生提供了最重要的基础,让我们实现了今天手腕上的 Apple Watch 运算性能远超早期大型计算机的壮举,这也是摩尔定律得以实现的基础。

瓶颈

冯·诺依曼架构为计算机大提速铺平了道路,却也埋下了一个隐患:在内存容量指数级提升以后,CPU 和内存之间的数据传输带宽成为了瓶颈。

计算机性能之殇(一)-- 天才冯·诺依曼与冯·诺依曼瓶颈

上图是 i9-7980XE 18 核 36 线程的民用最强 CPU,其配合超频过的 DDR4 3200MHz 的内存,测试出的内存读取速度为 90GB/S。看起来很快了是不是?看看图中的 L1 Cache,3.7TB/S。

我们再来算算时间。这颗 CPU 最大睿频 4.4GHz,就是说 CPU 执行一个指令需要的时间是 0.000000000227273 秒,即 0.22ns(纳秒),而内存的延迟是 68.1ns。换句话说,只要去内存里取一个字节,就需要 CPU 等待 300 个周期,何其的浪费 CPU 的时间啊。

CPU L1 L2 L3 三级缓存是使用和 CPU 同样的 14 纳米工艺制造的硅半导体,每一个 bit 都使用六个场效应管(通俗解释成三极管)构成,成本高昂且非常占用 CPU 核心面积,故不能做成很大容量。

除此之外,L1 L2 L3 三级缓存对计算机速度的提升来源于计算机内存的“局部性”,相关内容我们之后会专门讨论。

接下来

下一篇文章,我们将讨论分支预测、流水线与多核 CPU,看看那些上古大神们为了提升性能都迸发出了什么奇思妙想,搞出了什么奇技淫巧。

相关日志

计算机性能之殇(一)-- 天才冯·诺依曼与冯·诺依曼瓶颈

相关推荐