c++ - 交换变量(C++,处理器级别)

标签 c++ swap processor pipelining

我想交换两个变量。我想通过管道使用 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/

相关文章:

c++ - 具有模板化静态成员函数的模板化类与实现中的原型(prototype)不匹配

caching - Meltdown 和 Spectre 之间有什么区别?

c++ - 处理器多久检查一次 while 循环条件?

c++ - 运行时检测系统架构 (x86/x64)

c++ - 无需管理员身份即可在本地调试 x64 程序

c++ - ofstream C++中同级目录中的文件

c++ - 如何将C++异常处理程序与C库完美结合?

c - 为什么 "A = A + B - (B = A)"在 C 中交换值?

c++ - 交换算法赋予所有相同的值

c - 我无法按字母顺序对文件中的 'last names' 进行排序 : I get Abort trap: 6