gpt4 book ai didi

performance - 返回地址预测堆栈缓冲区与堆栈存储的返回地址?

转载 作者:行者123 更新时间:2023-12-04 05:38:39 26 4
gpt4 key购买 nike

一直在阅读 Agner Fog 的“英特尔、AMD 和威盛 CPU 的微体系结构”,并在第 34 页描述了“返回地址预测”:

http://www.agner.org/optimize/microarchitecture.pdf

3.15 Returns (all processors except P1)

A better method is used for returns. A Last-In-First-Out buffer, called the return stack buffer,remembers the return address every time a call instruction is executed, and it uses this for predicting where the corresponding return will go. This mechanism makes sure that return instructions are correctly predicted when the same subroutine is called from several different locations.



鉴于返回地址无论如何都存储在堆栈中,我有点不清楚这是什么需要?

那么如果也有这种技术,那么将返回地址存储在堆栈上的目的是什么?是否仅在此预测技术不起作用时才使用堆栈存储值?

最佳答案

预测器通常是获取阶段的一部分,以确定接下来要获取哪些指令。这发生在处理器解码指​​令之前,因此甚至无法确定是否存在分支指令。与所有预测器一样,返回地址预测器的目的是更快地获得分支的方向/目标。返回指令是一个分支,因此它通常会有一个分支预测器条目来确定它是否被采用以及目标在哪里。引用返回地址预测器代替正常的分支目标缓冲区。

因此,在实际“执行”return 语句之前可能有 50 条指令,提取阶段会预测返回指令和接下来要提取的指令地址。稍后,当执行返回时,从堆栈中读取地址并与返回的预测位置进行比较。如果它们相同,则继续执行,否则回滚执行以使用正确的返回地址。

为什么要存储在栈上?首先,处理器不知道预测器是否在不与存储在堆栈中的地址进行比较的情况下工作。其次,堆栈是“官方”返回地址,可能会因合法原因而更改。第三,返回地址预测器的条目数量有限。没有空间在预测器中存储地址的返回指令需要堆栈。

关于performance - 返回地址预测堆栈缓冲区与堆栈存储的返回地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22442766/

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