首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >内存屏障和缓存刷新

内存屏障和缓存刷新
EN

Stack Overflow用户
提问于 2012-07-01 14:47:05
回答 2查看 6K关注 0票数 11

即使在缓存刷新的情况下,也有实现内存屏障的archs吗?我读到内存屏障只影响CPU重新排序,但我读到了与内存屏障相关的语句:确保所有cpu都看到值.,但对我来说,这意味着缓存刷新/失效。

EN

回答 2

Stack Overflow用户

发布于 2012-07-01 15:30:31

在几乎所有现代体系结构上,缓存(比如L1和L2缓存)都是由硬件保证的。没有必要刷新任何缓存以使内存对其他CPU可见。

人们可以想象一个假设的系统,它在硬件中没有一致的缓存,但是它看起来一点也不像当前运行Windows和Linux等操作系统的系统。

在这些体系结构上需要内存屏障来做三件事:

  1. CPU可以预取另一个核心上的写入无效的读。必须防止这种情况发生。(虽然在x86上,这在硬件中是被阻止的。预取被锁定到L1缓存行,因此如果另一个CPU使缓存行无效,则预取也将失效。)
  2. CPU可能会“发布”写入,而不会将它们放入其L1缓存中。这些写入必须至少完成到L1缓存。
  3. CPU可以在内存屏障的一边重新排序读和写,而在另一边进行读和写。根据内存屏障的类型,必须禁止某些重排序.(例如,read x; read y;并不确保读取按该顺序进行。但read x; memory_barrier(); read y;通常会这么做。)
票数 7
EN

Stack Overflow用户

发布于 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/

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11282899

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档