CPU
执行一条指令包含下面5
个步骤,其中每个步骤都会由CPU
的一个专门的功能单元(function unit
)来完成:
(1)取指令;
(2)解码;
(3)执行指令;
(4)内存访问;
(5)写回寄存器。
最后两个步骤是可选的,因为很多指令只会访问寄存器,不会访问内存。上面的每个步骤至少要花费一个时钟周期(clock cycle
)去完成。内存访问通常是最慢的,要占用多个时钟周期。
指令流水线(Instruction Pipeline
):是一种可以并行执行多条指令的CPU
结构(architecture
),也即同时执行不同指令的不同部分。假设上面提到的执行指令5
个步骤每个步骤都占1
个时钟周期,那么完成一个指令需要5
个时钟周期(假设步骤4
和5
都要经历)。在执行这条指令的过程,每个步骤只有CPU
的一个功能单元是工作的,其它的都在空闲中。采用指令流水线以后,多个功能单元可以同时活跃,举个例子:在解码一条指令时,可以同时取下一条指令。这样可以大大提高效率。理想情况下,执行每条指令仅需要1
个时钟周期。
更进一步,如果CPU
内执行特定功能的功能单元有多个的话,那么每个时钟周期可以完成更多的指令。这种CPU
结构称之为“超标量(superscalar
)”。指令宽度(Instruction Width
)描述了可以并行处理的指令的数量。现代CPU
一般是3-wide
或4-wide
,即每个时钟周期可处理3
~4
条指令。
Cycles per instruction(CPI)
是描述CPU
在哪里耗费时钟周期和理解CPU
利用率的一个重要度量参数。这个参数也可以表示为instructions per cycle(IPC)
。CPI
表达了指令处理的效率,并不是指令本身的效率。