程序员是否仍有可能优化支持完整无序执行n的处理器的数据风险?
发布于 2015-05-03 20:10:39
能够执行无序操作的处理器不一定能够消除任何数据危险。无序的执行实现可能不包括寄存器重命名,因此WAW和WAR危险将导致管道阻塞。
然而,大多数现代OoOE处理器都实现了寄存器重命名,从而消除了WAW和WAR危险,而不是原始危险。如果一个浮点除法指令后面跟着一系列需要除法结果的指令,那么管道可能会停顿很长一段时间。另一个例子是,分支指令依赖于导致页面错误的加载指令。无论对该分支的预测是否正确,重新排序缓冲区可能已满或几乎已满,可能会导致阻塞。如果分支被错误地预测,惩罚将会更高。所以你通常不用担心注册WAW和战争危险,但是原始的危险是很重要的。
有几种技术可以用来减少原始危险的影响:
通常,优化编译器能够执行这些优化,尽管它仍然可能产生次优的机器代码。
内存依赖关系也很重要。特别是,如果由于某些结构限制,存储结果不能转发到加载,则内存原始依赖关系将受到惩罚。内存、WAW和战争危险没有惩罚,因为大多数处理器按程序顺序退出指令。也就是说,在具有强内存排序模型(如x86 )的体系结构中,所有存储必须按照程序顺序执行,而不管WAW依赖关系如何。
还有许多其他可能的性能问题。您可以参考正在开发的处理器和/或体系结构的优化指南。
https://stackoverflow.com/questions/30017403
复制相似问题