高性能go工坊(笔记)

原文: https://www.yuque.com/ksco/uiondt/nimz8b

要成为一名优秀的赛车手,你不需要成为一名优秀的机械师,但你需要对汽车的工作原理有一个粗略的了解。 我相信我们作为软件工程师也是如此。我不认为我们在座的任何人将是一个专业的CPU 设计者,但这并不意味着我们可以忽略 CPU 设计者面临的问题。

计算机变得越来越慢

单线程整数性能仍在每年提高 2-3%左右。以这种速度,它将需要 20 年的复合增长才能使整数性能翻倍。相比之下,90 年代性能每两年翻一番。

时钟速度和CPU散热(电能转化为热量)是相关的。

为什么 CPU 会产生热量?

这是一个固态设备,没有运动部件,所以像摩擦力这样的影响在这里没有(直接)关系。

CMOS 器件的功耗由三个因素共同构成:

Dennard's Scaling 定律

Dennard's Scaling 定律大致说明,随着晶体管变小,它们的 power density 保持不变。

较小的晶体管可以在较低的电压下运行,具有较低的栅电容,开关速度更快,这有助于减少动态功率。

但当晶体管的栅极长度接近几个硅原子的宽度时,晶体管的尺寸、电压和重要的泄漏之间的关系就破裂了。

CPU 特征尺寸的缩减主要是为了降低功耗,从而散热。

事实上,CPU 的核心计数是由散热控制的。Dennard's Scaling 的结束意味着 cpu 的时钟速度是 1 到 4 Ghz 之间的任意数字,这取决于它有多热。

Amdahl 定律

Amdahl 定律告诉我们,程序的最大加速受程序的顺序部分限制。 如果你编写的程序 95% 的执行速度能够并行运行,即使有数千个处理器,程序执行的最大速度也限制在 20 倍。

过去二十年中,性能的改善主要来自于架构的改进

1) 无序执行

无序,也称为超标量体系结构,是一种从 CPU 执行的代码中提取所谓指令级并行性的方法。现代 cpu 在硬件级有效地执行 SSA,以识别操作之间的数据依赖关系,并在可能的情况下并行运行独立的指令。 然而,任何一段代码中固有的并行性数量都是有限制的。它消耗也特别大。大多数现代 cpu 已经确定每个核心有6个执行单元,因为在管道的每个阶段,将每个执行单元连接到所有其他执行单元的成本是 N 的平方。

2) 推测性执行

所有 CPU 都使用指令管道在指令提取/解码/执行/提交周期中重叠部分。 通过指令重排优化执行性能。

现代 CPU 已针对批量操作进行了优化

现代处理器受到内存延迟而不是内存容量的限制

连接到服务器的物理内存呈几何级数增长。 但内存速度增值缓慢, 处理器速度和内存访问时间之间的差距继续扩大。

缓存