gpt4 book ai didi

cpu-architecture - 嵌套分支和推测执行会发生什么?

转载 作者:行者123 更新时间:2023-12-04 07:23:28 24 4
gpt4 key购买 nike

好的,所以我知道如果一个特定的条件分支有一个需要时间来计算的条件(例如内存访问),CPU 会假设一个条件结果并沿着该路径推测性地执行。但是,如果沿着这条路径又弹出另一个缓慢的条件分支(当然,假设第一个条件尚未解决并且 CPU 不能只提交更改)会发生什么? CPU 只是在推测中进行推测吗?如果最后一个条件被错误预测而第一个不是,会发生什么?它只是一路回滚吗?

我正在谈论这样的事情:

if (value_in_memory == y){
// computations
if (another_val_memory == x){
//computations
}
}

最佳答案

推测执行是正常的执行状态,而不是一种特殊的模式,即乱序 CPU 在看到分支时进入,然后在分支不再运行时离开。

如果您考虑到不仅分支会出错,而且许多指令(包括访问内存的指令)对其输入值有限制等,这会更容易看出。因此,任何实质性的乱序执行都意味着不断的推测,而 CPU围绕这个想法建立。

因此,从这个意义上说,“嵌套分支”最终并不特别。

现在,现代 CPU 具有多种快速分支预测错误恢复的方法,比从其他类型的故障中恢复更快。例如,他们可能会在某些分支上对寄存器映射的状态进行快照,以允许在分支位于重新排序缓冲区的头部之前开始恢复。由于在所有分支进行快照并不总是可行的,因此可能涉及复杂的启发式方法来决定在何处拍摄快照。

我提到最后一部分是因为它是嵌套分支可能很重要的一种方式:当有很多分支在运行时,您可能会遇到一些与跟踪这些分支以进行恢复相关的微架构限制。有关更多详细信息,您可以查看“分支订单缓冲区”的专利(针对英特尔技术,但毫无疑问是其他技术)。

1 基本的恢复方法是继续执行,直到出现故障的指令是下一个要退出的指令,然后扔掉所有较新的指令。在分支错误预测的上下文中,这意味着您实际上可能会遭受两个或更多错误预测,只有其中最旧的才真正生效:例如,一个较新的分支错误预测,并且在执行到该分支时(此时可以恢复),另一个发生错误预测,所以年轻的最终会被丢弃。

关于cpu-architecture - 嵌套分支和推测执行会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59209662/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com