我想交换两个变量。我想通过管道使用 Read After Write 危险来完成它,这对我有利。
管道:
OPERXXXXXX FetchXXXXX DecodeXXXX ExecuteXXX WriteBkXXX
STORE X, Y ---------- ---------- ---------- ----------
STORE Y, X STORE X, Y ---------- ---------- ----------
---------- STORE Y, X STORE X, Y ---------- ----------
---------- ---------- STORE Y, X STORE X, Y ----------
---------- ---------- ---------- STORE Y, X STORE X, Y
---------- ---------- ---------- ---------- STORE Y, X
我如何告诉编译器在没有自动锁定和警告标志的情况下做到这一点(并且完全做到这一点)?你能推荐任何文献/关键词吗?
规范:
->目标:支持多站(超过 4 个)流水线的现代架构
-> 这与任何特定“问题”无关。只是为了科学。
目前的障碍:
- 如果您知道如何忽略数据危害,请分享。
最佳答案
我建议您阅读 Intel's optimization manual 的第一部分.然后你会意识到现代的、无序的、推测性的 CPU 甚至不尊重你的汇编语言。操纵管道对你有利?根据这份文件,我会说——算了吧。
关于c++ - 交换变量(C++,处理器级别),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8431281/