我知道内存屏障会阻止从内存之前到内后重新排序指令,例如,如果我有以下指令:
instruction 1
instruction 2
instruction 3
memory barrier
instruction 4
instruction 5
instruction 6
可以按以下顺序执行这些说明:
instruction 3
instruction 1
instruction 2
memory barrier
instruction 6
instruction 5
instruction 4
但它们永远不会按以下顺序执行:
instruction 1
instruction 2
instruction 5
memory barrier
instruction 4
instruction 3
instruction 6
但我不确定以下任务是否也由内存屏障强制执行:
答案 0 :(得分:0)
至少对于IBM的powerPC,不能保证完成,c.f。 IBM's documentation:
[eieio指令的执行或完成]并不意味着由eieio之前的指令引起的存储访问已经完成。指令创建的屏障将确保屏障分隔的所有访问都按指定的顺序执行,但是在屏障之前发出的访问可能在eieio指令完成很久之后才会执行
答案 1 :(得分:0)
从技术上讲,内存屏障不会强制执行任何指令。它限制了指令执行中的顺序变为可见给其他观察者。
不需要刷新到内存,实际上会大大减慢基于缓存的体系结构。例如,考虑一个核心,该核心维护未决内存操作的私有队列,并具有与其他核心共享的一致缓存。当它到达屏障时,它可以在让更多的内存操作进入其队列之前耗尽其内存操作队列。它不必耗尽其缓存 - 缓存一致性将处理其余部分。有关这些协议如何工作的详细说明,请参阅A Primer on Memory Consistency and Cache Coherence。