cpu-architecture - 为什么将分支目标缓冲区设计为缓存?
问题描述
BHT 不是缓存,也不需要是缓存,因为在访问时出错也没关系。然而,BTB 被设计为缓存,因为它总是必须返回命中或未命中。为什么 BTB 不能出错?
解决方案
BTB可能会出错,并且当跳转指令实际执行(或解码,对于直接分支)时会检测到错误推测,从而导致前端重新引导从正确位置获取数据时出现气泡。
或者对于间接分支的无序推测执行,核心可能必须回滚到最后一个已知的良好状态,就像从条件分支的错误分支方向恢复一样。
推荐阅读
- stripe-payments - 关闭 Stripe 验证错误消息
- entity-framework - 在实体框架中更新实体时执行操作
- java - 微服务方法中的多个作者和读者
- python - 我们如何在 python 中表示“Riesz 函数”(不使用 Sympy)?
- ansible - 由于 StackOverflowException 导致的 Ansible 问题
- firebase - 从 ID 列表中检索用户并在 Flutter 中显示
- python - Pydantic - 如果未提供,则插入默认值
- c# - 未在 Blazor 服务器应用程序的 Hangfire 作业中注入服务
- r - 可能与 MC 风格的 knitr bug 交互
- python - 如何获取显示列异常值的行?