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条微指令的最大分发吞吐量。每个流水线端口后面有若干执行单元。微指令根据所执行的操作类型被分发到对应的流水线单元中。例如,整型算逻单元和浮点单元(加法器,乘法器和除法器)共享一条流水线。掌握哪些微指令会在同一条流水线上执行,对合理安排指令顺序避免资源冲突非常有帮助。