原文: https://www.yuque.com/ksco/uiondt/nimz8b
要成为一名优秀的赛车手,你不需要成为一名优秀的机械师,但你需要对汽车的工作原理有一个粗略的了解。 我相信我们作为软件工程师也是如此。我不认为我们在座的任何人将是一个专业的CPU 设计者,但这并不意味着我们可以忽略 CPU 设计者面临的问题。
单线程整数性能仍在每年提高 2-3%左右。以这种速度,它将需要 20 年的复合增长才能使整数性能翻倍。相比之下,90 年代性能每两年翻一番。
时钟速度和CPU散热(电能转化为热量)是相关的。
这是一个固态设备,没有运动部件,所以像摩擦力这样的影响在这里没有(直接)关系。
CMOS 器件的功耗由三个因素共同构成:
静态功率。当晶体管是静态的,也就是说,不改变它的状态时,会有少量的电流通过晶体管泄漏到地上。 晶体管越小,泄漏就越多。泄漏量随温度升高而增加。当你有几十亿个晶体管时,即使一分钟的泄漏量也会增加!
动态功率。当晶体管从一种状态过渡到另一种状态时,它必须对其连接到栅极的各种电容进行充放电。 每个晶体管的动态功率是电压乘以电容和变化频率的平方。降低电压可以降低晶体管的功耗,但较低的电压会导致晶体管的开关速度变慢。
短路电流。我们喜欢将晶体管视为数字设备,无论其处于开启状态还是处于原子状态,都占据一种状态或另一种状态。 实际上,晶体管是模拟设备。作为开关,晶体管开始时大部分处于截止状态,然后转变或切换到通常处于导通状态。 这种转换或切换时间非常快,在现代处理器中约为 pico 秒,但是当从 Vcc 到地的电阻路径很低时,这仍然代表了一段时间。晶体管切换速度越快,其频率就越高,散热越多。
Dennard's Scaling 定律大致说明,随着晶体管变小,它们的 power density 保持不变。
较小的晶体管可以在较低的电压下运行,具有较低的栅电容,开关速度更快,这有助于减少动态功率。
但当晶体管的栅极长度接近几个硅原子的宽度时,晶体管的尺寸、电压和重要的泄漏之间的关系就破裂了。
CPU 特征尺寸的缩减主要是为了降低功耗,从而散热。
事实上,CPU 的核心计数是由散热控制的。Dennard's Scaling 的结束意味着 cpu 的时钟速度是 1 到 4 Ghz 之间的任意数字,这取决于它有多热。
Amdahl 定律告诉我们,程序的最大加速受程序的顺序部分限制。 如果你编写的程序 95% 的执行速度能够并行运行,即使有数千个处理器,程序执行的最大速度也限制在 20 倍。
1) 无序执行
无序,也称为超标量体系结构,是一种从 CPU 执行的代码中提取所谓指令级并行性的方法。现代 cpu 在硬件级有效地执行 SSA,以识别操作之间的数据依赖关系,并在可能的情况下并行运行独立的指令。 然而,任何一段代码中固有的并行性数量都是有限制的。它消耗也特别大。大多数现代 cpu 已经确定每个核心有6个执行单元,因为在管道的每个阶段,将每个执行单元连接到所有其他执行单元的成本是 N 的平方。
2) 推测性执行
所有 CPU 都使用指令管道在指令提取/解码/执行/提交周期中重叠部分。 通过指令重排优化执行性能。
连接到服务器的物理内存呈几何级数增长。 但内存速度增值缓慢, 处理器速度和内存访问时间之间的差距继续扩大。