是否有任何架构即使进行缓存刷新也实现了内存屏障?我阅读过内存屏障仅影响CPU重新排序的说法,但我读到了与内存屏障相关的陈述:确保所有CPU都会看到该值...,但对我来说,这意味着进行缓存刷新/失效。
是否有任何架构即使进行缓存刷新也实现了内存屏障?我阅读过内存屏障仅影响CPU重新排序的说法,但我读到了与内存屏障相关的陈述:确保所有CPU都会看到该值...,但对我来说,这意味着进行缓存刷新/失效。
内存屏障的确切影响取决于特定的架构。
CPU采用性能优化,可能会导致乱序执行。内存操作(加载和存储)的重新排序通常在单个执行线程内不会被注意到,但是在并发程序和设备驱动程序中会导致不可预测的行为,除非进行仔细控制。排序约束的确切性质因硬件而异,并由架构的内存排序模型定义。一些架构提供多个屏障以强制执行不同的排序约束。
http://en.wikipedia.org/wiki/Memory_barrier
当前的英特尔架构可以自动保持所有CPU的缓存一致性,无需显式使用内存屏障或缓存刷新指令。
在对称多处理器(SMP)系统中,每个处理器都有一个本地缓存。内存系统必须保证缓存一致性。当不同处理器上的线程修改存储在同一缓存行上的变量时,会发生伪共享。这会使缓存行失效并强制进行更新,从而影响性能。
http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/
store
和 load
的过程,因此即使是 Intel 所选择的缓存一致性协议也不能神奇地同步缓存。这将由CPU在选择或被指示时完成。这不是每个 store
操作都会自动调用的过程。更重要的是,当值驻留在某个CPU存储缓冲区中时,没有其他CPU(无效队列)会被告知新值。 - Yarl