指令级并行
指令级并行性
当程序员们听到并行这个词时,大多数都会想到多核并行性,即明确地将计算分割成一个个半独立的线程,这些线程同时工作以解决一个共同问题。
这种类型的并行主要是用来减少延迟和实现可扩展性,而不是提高效率。我们可以使用并行算法来解决一个比原来大十倍的问题,但它至少需要十倍的计算资源。尽管并行硬件变得越来越现金,而且并行算法的设计也变得越来越重要,但现在我们暂时仅限于考虑单个CPU核心。
在CPU核心内部也存在其他类型的并行性,我们可以很自由的使用。
指令流水线
为了执行某个指令,处理器需要做很多准备工作,包括:
- 从内存中获取一块机器码,
- 解码它并分割成指令,
- 执行这些指令,可能涉及进行一些内存操作,
- 将结果写回寄存器。
整个操作序列是很长的。即使对于很简单的操作,比如将两个存储在寄存器中的值相加,也需要长达15-20个CPU周期。为了隐藏这个延迟,现代CPU使用流水线功能:在一条指令通过第一阶段之后,它们会立即开始处理下一条指令,而不用等待前一条指令完全完成。