美文网首页Java高级开发
内存屏障和CPU缓存

内存屏障和CPU缓存

作者: 依弗布德甘 | 来源:发表于2019-12-29 13:14 被阅读0次

CPU缓存

CPU高速缓存类型有一级缓存,二级缓存,三级缓存。
在读取数据时会先从一级缓存查找,再找二级缓存,再找三级缓存,然后是内存,最后是外存储器。读写数据时为了保证数据一致性,各大cpu厂商定义的一套公共协议-MESI协议,从而保证数据最终一致性

MESI协议
修改态, 专有态,共享态,无效态,

  • CPU性能优化手段-运行时指令重排序
    为了提高CPU处理新能,CPU遵循as-if-serial语义,可能将后面的命令优先执行

as-if-serial语义
编译器和处理器为了提高并行度,不管怎么重新排序,单线程内程序的执行结果不能被改变

内存屏障 多核多线程

  1. 缓存的数据与主内存的数据并不是实时同步的,同一时间点,各CPU所看到同一内存地址的数据值可能不是一致的
  2. 虽然遵循了as-if-serial语义,但只针对单CPU自己执行情况下,无法分辨因果关联,可能会出现乱序

处理器为了解决以上两个问题,提供了内存屏障指令Memory Barrier

  • 读内存屏障(Load Menory Barrier)
    在指令钱插入Load Barrier 让高速缓存的数据失效,强制从主内存加载数据,从而保证读取数据保存一致性

  • 写内存屏障(Store Menory Barrier)
    在指令后插入Store Barrie 能让数据写入主内存中,让其他线程可见。

相关文章

  • CPU缓存和内存屏障

    CPU性能优化手段 - 缓存 为了提高程序的运行性能, 现代CPU在很多方面对程序进行了优化例如: CPU高速缓存...

  • CPU缓存和内存屏障

    CPU性能优化手段-缓存 为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存。尽可...

  • CPU缓存和内存屏障

    CPU性能优化手段 缓存 运行时指令重排 缓存 为了提高程序运行的性能,处理器大多会利用缓存来提高性能,而避免访问...

  • 内存屏障和CPU缓存

    CPU缓存 CPU高速缓存类型有一级缓存,二级缓存,三级缓存。在读取数据时会先从一级缓存查找,再找二级缓存,再找三...

  • 1.1.4 CPU缓存和内存屏障

    CPU缓存 由于CPU的运算速度高出CPU和内存之间的数据传输速度一个级别,CPU厂商为了尽可能的利用CPU的性能...

  • 内存屏障

    内存屏障(Memory barrier) 为什么会有内存屏障 每个CPU都会有自己的缓存(有的甚至L1,L2,L3...

  • CPU缓存及内存屏障

    CPU 性能优化手段 - 缓存 CPU 缓存模型: 多级缓存 L1 Cache (一级缓存) CPU第一级高速缓存...

  • 3.CPU缓存和内存屏障

    cpu性能优化手段 缓存为了提高程序运行的性能,现代CPU在很多方面对程序进行了优化。例如:CPU高速缓存,尽可能...

  • JAVA线程-CPU缓存和内存屏障(四)

    上节说了线程中止,优雅和暴力的方式,也说到了通过标志位的方式,这次一起说说CPU缓存和内存屏障。 (一)CPU性能...

  • 杂谈 什么是伪共享(false sharing)?

    问题 (1)什么是 CPU 缓存行? (2)什么是内存屏障? (3)什么是伪共享? (4)如何避免伪共享? CPU...

网友评论

    本文标题:内存屏障和CPU缓存

    本文链接:https://www.haomeiwen.com/subject/iksyoctx.html