Pentium 4处理器流水线(8)

Execution Core Details

通过高效地处理常见的指令情形,执行核可以获得优化的整体性能。硬件被设计成尽可能快速地执行常见情形下常用的操作,当然,对于某些罕见的情形里不频繁执行的操作会有一些性能损失。执行核的某些部件会首先假设某些常用的条件满足,从而得到更快速的执行。但是如果这些条件的确不满足,处理器可能会停顿,导致性能下降。例如对于存储读取转发操作(后续章节会详细介绍),如果读取操作被预测为依赖某个存储操作,则读取操作直接从存储操作的操作数获取数据,并尝试继续执行。如果最终发现这个读取操作并不与该存储操作关联,则读取操作只能等待并延迟到从存储器中读取到真正需要的数据后,才能继续执行。

Instruction Latency and Throughput

Pentium 4处理器的超标量乱序执行核拥有多个硬件执行资源,可以并行地执行多条微指令。通过以下方式,可以增强执行核利用并行性的能力:

  • 选择低延迟且/或译码后小于4条微指令的IA32指令
  • 排序IA32指令,使得长依赖链最小化,高延迟的指令被覆盖,这样得以保持指令并行性
  • 排序IA32指令,使得当指令到达调度器(即预约站)时,其所需要的操作数,对应的发射口和执行单元都处于可用状态

本节讲述发射口限制,执行延迟,发射延迟(也称为吞吐量),这些共同形成了排序指令的基础。指令调度会影响指令如何被发送到处理器执行核,但是执行核总是要面对一个持续变化的机器状态:为了更快的执行对指令重排序,或者由于依赖关系和资源限制推迟某些指令。因此,代码层面上的指令排序对硬件更多的是一种提示。

Intel的优化文档中会详细的列出IA32指令的延迟,吞吐量,在某些情况下,还会列出指令关联的执行单元。某些执行单元没有被流水线化,因此微指令不能在连续的周期内被送入执行单元,这样也就达不到每周期1条微指令的吞吐量。

每条IA32指令对应的微指令条数为选择合适的指令提供了基础参考。尤其是那些需要由微码ROM处理的指令,会涉及到更多的译码成本。对于Pentium II和Pentium III处理器,对译码器性能的优化是非常重要的,这会涉及到将指令按照4-1-1的顺序排列(即译码后生成4条微指令的IA32指令,紧跟着是2条译码后生成1条微指令的IA32指令),以及考虑每条IA32指令对应的微指令条数。但是在Pentium 4处理器上,译码器模板(即指令的排序)不再是一个考虑点。因此也就不需要在详细地参考每条IA32指令对应的微指令条数做计算。常用的译码后小于或等于4条微指令的IA32指令可以在Intel的优化文档中找到,与指令对应的执行单元也一并列出。

猜你喜欢

转载自blog.csdn.net/qq_43401808/article/details/85452357