zoukankan      html  css  js  c++  java
  • 写缓冲器与无效化队列

    写缓冲器与无效化队列


    为什么需要写缓冲器和无效化队列

    MESI解决了数据一致性问题,但是性能有了瓶颈,处理器在写内存操作时,必须要等到接收到其他处理器的invalidate acknowledge/read response之后才能将数据写入高速缓存,为了避免这种情况,设计时引入了写缓冲器(store buffer/write buffer)

    写缓冲器的特点

    1. 大小等于一级缓存的缓存行宽度
    2. 一个处理器不能读取另一个处理器的store buffer
      storebuffer invalidate queue

    处理器在执行写操作时
    如果相应的缓存条目为M或E处理器直接将数据写入缓存行,
    如果为S会先将数据存入store buffer并发送invalidate消息,
    如果为I相应的写未命中(write miss)处理器将数据存入store buffer并发送read invalidate,
    如果其他处理器的高速缓存都没有存这个数据,那么只能从主内存读取数据,因此写未命中(write miss)的开销比较大

    处理器将数据写入store buffer之后就认为写操作已完成,不等待其他处理器返回invalidate acknowledge/read response 继续执行其他指令,处理器接收到其他处理器返回的invalidate acknowledge消息的时候会将写缓冲器对应的条目写入缓存行中,不用等待回复消息提高了处理器的执行效率

    引入无效化队列(invalidate Queue)
    处理器接收到invalidate消息后不删除消息而是将消息存入invalidate queue之后就回复invalidate acknowledge减少写操作执行处理器的等待时间(并不是所有的处理器都有invalidate queue)

    写缓冲器和无效队列带来了新的问题---内存重排序和可见性问题

  • 相关阅读:
    用shareSDK实现的简单分享
    可实现随意切换的button同时随切换改变title的颜色
    创建UITabBarController
    git 常用命令
    实现友盟分享
    IOS 打印语句
    ios 的frame,bound,center
    IOS绘图
    iPhone App 上架流程
    ios 常用字符串的操作
  • 原文地址:https://www.cnblogs.com/isnotnull/p/13849494.html
Copyright © 2011-2022 走看看