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

2018-11-12   /   字数:2408   /   阅读数:48581   /   分类: 技术史诗     

电子计算机与信息技术是最近几十年人类科技发展最快的领域,无可争议地改变了每个人的生活:从生活方式到战争方式,从烹饪方式到国家治理方式,都被计算机和信息技术彻底地改变了。如果说核武器彻底改变了国与国之间相处的模式,那么计算机与信息技术则彻底改变了人类这个物种本身,人类的进化也进入了一个新的阶段。

简单地说,生物进化之前还有化学进化。 然而细胞一经诞生,中心法则的分子进化就趋于停滞了:38亿年来,中心法则再没有新的变动,所有的蛋白质都由 20 种标准氨基酸连成,连碱基与氨基酸对应关系也沿袭至今,所有现代生物共用一套标准遗传密码。 正如中心法则是化学进化的产物,却因为开创了生物进化而停止了化学进化,人类是生物进化的产物,也因为开创了文化进化和技术进化而停止了生物进化——进化已经走上了更高的维度。

-- 《进化的阶次 | 混乱博物馆》

本文目标

上面的只是我的喃喃私语,下面我们进入正题。

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

可能的文章列表

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

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

天才 冯·诺依曼

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

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

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

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

冯·诺依曼架构

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

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

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

优势

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

注:请各位在心里明确一件事情:存储器指的是内存,即 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,看看那些上古大神们为了提升性能都迸发出了什么奇思妙想,搞出了什么奇技淫巧。

WRITTEN BY

avatar

评论:

热心网友焦某
2020-01-02 15:10
dpdk就是绕过内存??
LQ
2019-10-16 10:25
您好,文章很精彩,想转载在Qunar技术沙龙上,不知是否可以。公众号ID:QunarTL
JohnLui
2019-10-23 15:58
@LQ:可以,保留原作者姓名和链接即可。
Johnson
2018-12-20 13:56
一个小小的7980xe也敢称最强民用CPU?你当2990wx是摆着好看的?
JohnLui
2018-12-20 14:08
@Johnson:2990wx 的内存性能很差。
开发者头条
2018-11-26 09:58
感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/2rjvsg 欢迎点赞支持!使用开发者头条 App 搜索 1908 即可订阅《Swift、Laravel、前端》

发表评论:

© 2011-2024 岁寒  |  Powered by Emlog