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

Nat*_*urz 6 assembly x86-64 cpu-architecture jump-table branch-prediction

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

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

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

hbr在Cell处理器上是否有x64等效于分支的提示?

cmp像Itanium一样,它比条件分支更早地移动程序集是否有帮助?

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

谢谢!

Pet*_*man 3

如果您无法找到确切的答案,那么您也许可以使用返回地址预测器而不是分支目标缓冲区。通用技术称为上下文线程,可以在论文上下文线程:虚拟机解释器的灵活且高效的调度技术中找到描述。

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

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

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