如何动态提示分支目标到x64 CPU?

时间:2013-04-26 08:13:26

标签: assembly x86-64 cpu-architecture branch-prediction jump-table

我想知道如何为C64,C ++或汇编语言编写x64处理器的高效跳转表。输入事先已知,但无法通过算法预测。假设我可以在输入流中看起来像我想要的那样,有什么办法可以动态地告诉CPU下一个分支将要去哪个地址?

基本上,我想以编程方式更新分支目标缓冲区。但是,如果程序员事先知道下一个分支在哪里查看数据但处理器无法从过去的模式中确定这一点,那么我会解决任何允许我避免冲洗管道的问题。

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

Cell处理器上的分支是否有x64相当于hbr提示?

使用Itanium移动程序集cmp早于条件分支是否有帮助?

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

你的想法是:如果你能看得太远,对于确定控制流变化的每个输入,你可以JIT编译/发出一条直接call指令到一些可执行的内存中。例如,如果您有十个输入单位,则会发出10个调用。

执行时,这段代码表现得很好,因为每个被调用函数的返回地址都是不变的,所有的调用都是直接的。

一方面注意,我不是CPU架构人员,所以我可能会简化一些事情,但原则上我认为这应该有效。