我知道,内存障碍阻止了指令从前到后以及从后到后的重新排序,例如,如果我有以下说明:
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但是,我不确定以下任务是否也是由内存屏障执行的:
发布于 2017-03-08 08:43:09
至少对于IBM的powerPC来说,收尾并不一定,c.f。IBM文档
eieio指令的执行或完成并不意味着由eieio之前的指令引起的存储访问已经完成。指令创建的屏障将确保所有由屏障分隔的访问都按照指定的顺序执行,但在屏障之前发出的访问可能要到eieio指令完成很久后才能执行。
发布于 2017-03-10 03:20:59
从技术上讲,内存屏障不会强制执行指令。它限制了指令中的命令,其他观察人员可以看到执行命令。
不需要刷新内存,而且确实会大大减慢基于缓存的体系结构。例如,考虑一个核心,它维护挂起的内存操作的私有队列,并与其他内核共享一个连贯的缓存。当它到达一个屏障时,它可以在允许任何更多的内存操作进入其队列之前耗尽它的内存操作队列。它不必耗尽它的缓存--缓存一致性将处理其余部分。有关这些协议如何工作的详细说明,请参见记忆一致性和缓存一致性初探。
https://stackoverflow.com/questions/42665704
复制相似问题