gpt4 book ai didi

assembly - 如何动态地将分支目标提示到 x64 CPU?

转载 作者:行者123 更新时间:2023-12-02 19:51:09 28 4
gpt4 key购买 nike

我想知道如何用 C、C++ 或汇编语言为 x64 处理器编写高效的跳转表。输入是预先已知的,但不可能通过算法来预测。假设我可以在输入流中查看尽可能远的位置,有什么方法可以动态地告诉 CPU 下一个分支将转到哪个地址?

本质上,我想以编程方式更新分支目标缓冲区。但我会满足于任何允许我避免刷新管道的情况,如果程序员通过查看数据提前知道下一个分支要去哪里,但处理器无法从过去的模式中确定这一点。

意识到这是一个非常具体的问题,而且我可能无法正确表达它,这里有一些替代措辞:

是否存在与 Cell 处理器上的 Branch 的 hbr 提示等效的 x64?

像 Itanium 那样将程序集 cmp 移动到其条件分支之前是否有帮助?

间接跳转的预测目标是否基于寄存器值而不是最后使用的地址?

谢谢!

最佳答案

如果您无法找到确切的答案,那么您也许可以使用返回地址预测器而不是分支目标缓冲区。通用技术称为上下文线程,可以在论文Context Threading: A Flexible and Efficient Dispatch Technique for Virtual Machine Interpreters中找到描述。 .

您的想法是:如果您能够展望 future ,对于确定控制流更改的每个输入,您可以 JIT 编译/发出单个直接 call 指令一些可执行内存。例如,如果您有 10 个输入单位,您将发出 10 次调用。

执行时,此代码将表现良好,因为每个被调用函数的返回地址将保持不变,并且所有调用都是直接的。

顺便说一句,我不是 CPU 架构专家,所以我可能会简化事情,但原则上我认为这应该可行。

关于assembly - 如何动态地将分支目标提示到 x64 CPU?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16231697/

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