我目前正在编写C++代码,并且在代码中使用了很多内存屏障/栅栏。我知道,MB命令编译器和硬件不要重新排序读写操作。但我不知道这个操作在运行时对处理器来说有多复杂。
我的问题是:这种屏障的运行时开销是多少?我在谷歌上没有找到任何有用的答案...开销可以忽略不计吗?或者导致大量使用MBs导致严重的性能问题?
诚挚的问候。
发布于 2009-11-29 19:34:34
试着想一想指令是做什么的。它不会让CPU在逻辑上做任何复杂的事情,但它会强制CPU等待,直到所有的读和写都提交到主存中。因此,成本实际上取决于访问主内存的成本(以及未完成的读/写操作的数量)。
访问主存通常是非常昂贵的(10-200个时钟周期),但在某种意义上,这项工作也必须在没有障碍的情况下完成,它可以通过同时执行一些其他指令来隐藏,这样你就不会感受到太大的成本。
它还限制了CPU(和编译器)重新调度指令的能力,因此也可能存在间接成本,因为附近的指令不能交错,否则可能会产生更有效的执行调度。
https://stackoverflow.com/questions/1815282
复制相似问题