我想知道如何用 C、C++ 或汇编语言为 x64 处理器编写高效的跳转表。输入是预先已知的,但不可能通过算法来预测。假设我可以在输入流中查看尽可能远的位置,有什么方法可以动态地告诉 CPU 下一个分支将转到哪个地址?
本质上,我想以编程方式更新分支目标缓冲区。但我会满足于任何允许我避免刷新管道的情况,如果程序员通过查看数据提前知道下一个分支要去哪里,但处理器无法从过去的模式中确定这一点。
意识到这是一个非常具体的问题,而且我可能无法正确表达它,这里有一些替代措辞:
是否有一个 x64 相当于hbr
Cell 处理器上的 Branch 提示?
移动装配体有帮助吗cmp
比安腾的条件分支更早?
间接跳转的预测目标是否基于寄存器值而不是最后使用的地址?
Thanks!
如果您无法找到确切的答案,那么您也许可以使用返回地址预测器而不是分支目标缓冲区。通用技术称为上下文线程,可以在论文中找到描述上下文线程:一种灵活高效的虚拟机解释器调度技术 http://csng.cs.toronto.edu/publication_files/162/demkea_context.pdf.
您的想法是:如果您能够展望未来足够远,对于决定控制流更改的每个输入,您可以 JIT 编译/发出单个直接call
指令到一些可执行内存中。例如,如果您有 10 个输入单位,您将发出 10 次调用。
执行时,此代码将表现良好,因为每个被调用函数的返回地址将保持不变,并且所有调用都是直接的。
顺便说一句,我不是 CPU 架构专家,所以我可能会简化事情,但原则上我认为这应该可行。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)