Intel NetBurst Pipeline Details
Front End Pipeline Details
本节讲述的关于流水线前端操作的详细信息可能会对软件在指令预取,分支预测以及执行跟踪片高速缓存操作相关的优化有所帮助。
Prefetching
Intel NetBurst微架构支持3中指令预取机制:
- 只进行指令预取
- 只进行数据预取
- 指令或数据预取
第一种机制由处理器的指令预取器完成,它可以自动的预取指令。第二种机制由软件控制,通过使用预取指令将数据读入到高速缓存中。第三种机制是由硬件完成,处理器自动地将指令和数据预取到二级混合缓存中。
指令预取器将由分支目标缓冲区预测的路径对应的指令读入到指令流缓冲区中。数据将按照32字节的块粒度从目标起始地址处读入。第二种和第三种预取机制后边会介绍。
Decoder
Intel NetBurst微架构的前端有一个译码器,可以在每个时钟周期译码最多1条指令的吞吐量。有一些复杂的指令则必须借助微码ROM的辅助完成译码。译码器的操作与执行跟踪片高速缓存紧密相连。接下来讲一下跟踪片缓存。
Execution Trace Cache
跟踪片高速缓存是Intel NetBurst微架构中微指令缓存(主要不要与缓存x86指令的一级指令缓存混淆),用于存储译码后的IA32指令,即微指令。这个缓存消除了频繁执行代码的译码成本,例如template restrictions(todo:这是什么?)以及分支预测失败后指令译码产生的额外延迟(分支预测失败会导致必须重新读取正确的分支路径指令并进行译码,而从产生额外的延迟)。
在Pentium 4处理器实现中,跟踪片缓存可以存储最多达12K个微指令,每个时钟周期可以发送最多达3条微指令(到执行核)。这个缓存不会存储执行核将要执行的所有微指令。在某些情形下,执行核可能需要执行一个微码流(todo:我怀疑是使用微码ROM执行),而不是存储在跟踪片缓存中的微指令跟踪片。
Pentium 4处理器被优化为频繁执行的IA32指令保存在跟踪片缓存中,这样可以提供高效的,持续的微指令流;只有一少部分指令需要涉及到微码ROM。