动态调度流水线技术解析
1. 投机执行:超越未解决分支的执行
基本块通常较短,难以充分发挥动态调度处理器的优势。而超越未解决分支进行执行则面临诸多挑战,这种执行方式被称为投机执行。投机指令执行意味着执行可能是无用的,因为在执行时并不知道该指令是否应该被执行。
当一条指令被投机执行时,微架构必须做好准备并具备消除其影响的资源,直到该指令变为非投机指令。指令执行的影响包括对存储的修改(主要是内存位置和ISA可见的寄存器)以及异常。除非存在回滚这些修改的机制,否则投机指令执行不能修改存储。在指令处于投机状态时,必须抑制其触发的异常。通常,通过为投机指令执行的结果提供临时位置,并在指令变为非投机指令时将这些结果提交到架构状态来保护存储。此外,这种策略还需要一种可行且高效的技术来回滚投机执行。
投机执行有几种可能的方法:
- 全路径执行 :探索执行树的所有路径,即跟随树中每个分支的两侧。随着分支条件的投机解决,一些已执行的指令变为非投机指令并提交结果,而其他指令则被丢弃。虽然全路径执行可能达到最大性能,但它非常复杂且成本高昂。因为微架构必须跟踪基本块执行树,并能够区分哪些存储更新应该提交,哪些异常应该验证。而且,有用执行随着树的深度线性增长,而投机执行随着树的深度呈2的幂次方增长。随着树的深度增加,潜在的加速很快饱和,而所需的功能单元数量和控制及取消硬件数量会急剧增加,导致执行效率迅速下降。
- 单路径执行 :跟踪执行树中最可能的路径,即通过预测条件分支的结果并贪婪地沿着该路径前进。这种方法中,投机执行的指令数量与前瞻量成正比,比全路径执行更高效。此外,由于投机指令序列是线性的,更容易跟踪、回滚
超级会员免费看
订阅专栏 解锁全文
2391

被折叠的 条评论
为什么被折叠?



