即使在缓存刷新的情况下,也有实现内存屏障的archs吗?我读到内存屏障只影响CPU重新排序,但我读到了与内存屏障相关的语句:确保所有cpu都看到值.,但对我来说,这意味着缓存刷新/失效。
发布于 2012-07-01 15:30:31
在几乎所有现代体系结构上,缓存(比如L1和L2缓存)都是由硬件保证的。没有必要刷新任何缓存以使内存对其他CPU可见。
人们可以想象一个假设的系统,它在硬件中没有一致的缓存,但是它看起来一点也不像当前运行Windows和Linux等操作系统的系统。
在这些体系结构上需要内存屏障来做三件事:
read x; read y;并不确保读取按该顺序进行。但read x; memory_barrier(); read y;通常会这么做。)发布于 2012-07-01 14:53:01
内存屏障的确切影响取决于特定的体系结构。
CPU采用可能导致无序执行的性能优化.内存操作(加载和存储)的重新排序通常在单个执行线程中不被注意到,但除非小心控制,否则会导致并发程序和设备驱动程序中不可预测的行为。排序约束的确切性质与硬件有关,并由体系结构的内存排序模型定义。一些体系结构为强制执行不同的顺序约束提供了多个障碍。
barrier
当前的Intel体系结构确保了所有CPU之间的自动缓存一致性,而无需显式使用内存屏障或缓存刷新指令。
在对称多处理器(SMP)系统中,每个处理器都有一个本地缓存。内存系统必须保证缓存的一致性。当不同处理器上的线程修改驻留在同一缓存行上的变量时,就会发生错误共享。这会使缓存行无效,并强制进行更新,这会损害性能。
http://software.intel.com/en-us/articles/avoiding-and-identifying-false-sharing-among-threads/
https://stackoverflow.com/questions/11282899
复制相似问题