Pentium II & Pentium III的流水线 (3)

Execution Core Detail

要想实现指令执行并行,就必须要知道各个执行单元的延迟信息。执行单元在流水线上的布局信息以及流水线上执行的微指令信息也很重要。本节会详细讲述执行核的操作,包括对指令的延迟与吞吐量,执行单元/端口,高速缓存,以及存储缓冲区的讨论。

Instruction Latency and Throughput

当微指令到达预约站后,通过对微指令重排序,以便于取得指令需要的操作数和执行单元,这样可以获得更好的执行并行性。了解指令的延迟信息可以更好的安排指令调度。某些执行单元没有流水线化,例如浮点单元,因此微指令不能在每个时钟周期连续地分发到执行单元,所以达不到每个周期1条指令的吞吐量。下表列出了Pentium II和III处理器的执行单元,以及它们的延迟和发射吞吐量。

Port

Execution Units

Latency/Throughput

0

Integer ALU Unit

LEA instructions

Shift instructions

Integer Multiplication instruction

Latency: 1, Throughput 1/cycle

Latency: 1, Throughput 1/cycle

Latency: 1, Throughput 1/cycle

Latency: 4, Throughput 1/cycle

Floating-Point Unit:

  FADD instruction

 

  FMUL instruction

 

  FDIV instruction

 

 

Latency 3, Throughput 1/cycle (horizontal align with FADD)

Latency 5, Throughput 1/2cycle1 (aligh with FMULL)

Latency: single-precision 18 cycles, double-precision 32 cycles, extended-precision 38 cycles. Throughput non-pipelined (align with FDIV)

MMX Technology Unit:

MMX™ ALU Unit

MMX Multiplier Unit

 

Latency 1, Throughput 1/cycle

Latency 3, Throughput 1/cycle

Streaming SIMD Extensions (SSE)

FPU: Multiply, Divide, Square Root, Move instructions

 

参考Intel文档Order#: 245127-001

 

1

Integer ALU Unit

Latency 1, Throughput 1/cycle

MMX ALU Unit

MMX Shift Unit

Latency 1, Throughput 1/cycle

Latency 1, Throughput 1/cycle

SSE: Adder, Reciprocal and Reciprocal Square Root, Shuffle/Move instructions

 

参考Intel文档Order#: 245127-001

2

Load Unit

SSE: Load instructions

Latency 3 on a cache hit, Throughput 1/cycle

参考Intel文档Order#: 245127-001

3

Store Address Unit

 

SSE: Store instruction

Latency 0 or 3 (not on critical path), Throughput 1/cycle2

参考Intel文档Order#: 245127-001

4

Store Data Unit

SSE: Store instruction

Latency 1, Throughput 1/cycle

参考Intel文档Order#: 245127-001

注1:当接受第一个FMUL指令后,FMUL单元不能在下一个时钟周期内接受第二个FMUL指令。这与只能在偶数周期内执行FMUL指令不同。FMUL是流水线化的,但是是每两个时钟周期。

注2:某个地址上的读操作,如果可以从对该地址上的写操作中直接获取数据,则读操作可以与写操作在同一个时钟周期内分发,从这种意义上讲,写操作的延迟是0。写操作本身需要3个周期完成,但是这个延迟只影响一个存储缓冲区条目多快可以被释放从而被另一条微指令使用。

Execution Units and Ports

每个时钟周期内,执行核可以分发0个或1个微指令到每个流水线端口,由于有5个端口,所以最多可达每个周期5条微指令的最大分发吞吐量。每个流水线端口后面有若干执行单元。微指令根据所执行的操作类型被分发到对应的流水线单元中。例如,整型算逻单元和浮点单元(加法器,乘法器和除法器)共享一条流水线。掌握哪些微指令会在同一条流水线上执行,对合理安排指令顺序避免资源冲突非常有帮助。

Pentium II & Pentium III的流水线 (3)