当前位置: 首页 > news >正文

建设旅行网站策划书做模板网站怎么放视频

建设旅行网站策划书,做模板网站怎么放视频,网站被禁用如何解决,春考网站建设文章目录 cpu缓存一致性缓存的出现:多核之后带来的缓存一致性问题,如何解决LOCK 指令(刚好可以实现上述的目标)LOCK 指令特性内存屏障特性编译器屏障的作用MESI协议为什么有了 MESI协议 还需要 内存屏障问题:总结&…

文章目录

  • cpu缓存一致性
    • 缓存的出现:
    • 多核之后带来的缓存一致性问题,如何解决
    • LOCK 指令(刚好可以实现上述的目标)
    • LOCK 指令特性
    • 内存屏障特性
    • 编译器屏障的作用
    • MESI协议
    • 为什么有了 MESI协议 还需要 内存屏障
    • 问题:
    • 总结:
      • 附带:
    • 参考

cpu缓存一致性

缓存的出现:

  1. 提高内存的访问速度(时间、空间局部性),指令、数据的预取

多核之后带来的缓存一致性问题,如何解决

  1. 锁总线

  2. MESI 协议(总线嗅探机制)+ 内存屏障

LOCK 指令(刚好可以实现上述的目标)

  1. 早期:锁总线(实现,性能差)
    后期:锁缓存(实现,Ringbus + MESI协议,硬件支持,无需软件实现)
  2. 内存屏障

LOCK 指令特性

  1. 硬件层面提供 lfence、sfence、mfence 三个内存屏障以及一个可以实现相同效果的 lock 指令前缀
  2. 一般lock都会加入读屏障,保证后续代码可以读到别的cpu核心上的未回写的缓存数据,而unlock都会加入写屏障,将所有的未回写的缓存进行回写。

内存屏障特性

  1. 所有的CPU内存屏障封装都隐式包含了编译器屏障。
  2. 只有内存屏障是无法保证缓存的同步的,还需要MESI一致性协议的支持

编译器屏障的作用

  1. 防止编译乱序
  2. 数据重新load缓存

MESI协议

  1. 保证了单条指令的在缓存上的读写的一致性
  2. MESI协议可以通过提供加入缓存带来的数据一致性问题,但是会带来一些性能的消耗,比如说缓存的伪共享
  3. MESI是强一致性,强一致性必定会带来性能的损害

为什么有了 MESI协议 还需要 内存屏障

  1. MESI是强一致性的,比如:需要等待写失效才能写入内存,所以硬件又引入了store buffer还有invalid queue,导致了有可能cpu 的乱序执行,为了禁止这种乱序执行需要加入内存屏障,但是这种乱序执行的前提是(数据之间没有依赖性)

问题:

  1. 那如果当前访问的数据在寄存器上面呢

    1. 需要 用到 volatile指令,强制从缓存中读取一次数据,间接通过MESI协议能够访问到内存中的数据
  2. 那如果是多条指令的顺序性呢,内存数据还在store buffer、invalid queue上面呢?

    1. 需要用到 内存屏障的指令,比如 x86 fence

总结:

  1. volatile指令的作用(cpp的volatile和java的特性不一致)
    1. c++ volatile 的特性
      1. 禁止编译器的优化
      2. 禁止编译器的代码的重排序
      3. 强制从缓存中读取,失效寄存器
    2. java volatile 的特性:是基于 LOCK 指令 实现的
      1. 在cpp的特性的基础之上
      2. 实现了一个全屏障(越过cpu的乱序执行、指令重排序等,保证了数据的顺序一致性)
  2. 缓存的一致性保证是通过 MESI 协议(总线嗅探机制)+ 内存屏障 实现的,因此为什么说 尽管有了 CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字(主要是增加屏障的目的,单靠MESI协议无法保证 整体顺序的一致性)

附带:

// (java 9) hotspot/src/os_cpu/linux_x86/vm/orderAccess_linux_x86.inline.hpp
// java实现的内存屏障
inline void OrderAccess::loadload()   { compiler_barrier(); }
inline void OrderAccess::storestore() { compiler_barrier(); }
inline void OrderAccess::loadstore()  { compiler_barrier(); }
inline void OrderAccess::storeload()  { fence();            }
inline void OrderAccess::acquire()    { compiler_barrier(); }
inline void OrderAccess::release()    { compiler_barrier(); }
inline void OrderAccess::fence() {if (os::is_MP()) {// always use locked addl since mfence is sometimes expensive
#ifdef AMD64__asm__ volatile ("lock; addl 0,0(%%rsp)" : : : "cc", "memory");
#else__asm__ volatile ("lock; addl0,0(%%esp)" : : : "cc", "memory");
#endif}compiler_barrier();
}

参考

volatile也不过如此

C/C++ Volatile关键词深度剖析

既然CPU有缓存一致性协议(MESI),为什么JMM还需要volatile关键字

http://www.yayakq.cn/news/620090/

相关文章:

  • 5944免费空间上搭建网站婚恋网站排名前10
  • you物公馆网站建设西安网站维保公司
  • 网站如何做聚合页面网站设计待遇
  • 苏州网站建设设计制作公司google搜索引擎
  • 惠州网站建设报价seo关键技术有哪些
  • 云渲染网站开发网站制作者
  • 合肥建设网站哪个好俱乐部网站 模板
  • 徐州人才网官方网站重庆安全员证书查询系统
  • 厦门网站建设推荐施工企业造价管理
  • 手机产品网站建设网站开发的背景是指什么
  • 免费包装设计网站首页
  • 搜索引擎怎么收录网站wordpress 后台反应
  • 网站视频主持沈阳城市建设学院信息与控制工程系
  • 网站建设的栏目奥远网站建设流程
  • 河西苏州网站建设推广计划有哪些
  • 网站建设网站建设教程湘潭网站建设 技精磐石网络
  • 做设计图任务的网站阿里巴巴旗下跨境电商平台有哪些
  • 站长工具seo综合查询论坛北京宣传片
  • 有没人做阿里巴巴网站维护的缅甸新闻最新消息
  • 网站建设教程吧地方生活门户信息网站源码
  • 手机网站制作公司厦门网络营销推广
  • 网站数据库安全wordpress 交易
  • 新泰网站制作公司做非法网站怎么判刑
  • 音乐网站页面设计wordpress阅读量统计
  • 网站建设工具的实验心得网站建站和维护
  • 网站解析后显示在建设中智能家装
  • 城乡建设部网站 挂证网吧网络维护公司
  • 网站建设的步骤过程文库批量爆破wordpress后台密码
  • 田阳县建设局网站wordpress用户管理插件
  • 有口碑的合肥网站建设泰安神秀网络科技有限公司