MESI协议中的L3$角色是什么

2024-02-20

我想了解intel Broadwell中MESI的更多细节。

假设一个cpu插槽有6个核心 core 0 到 core 5 , 他们每个人都有自己的 L1$ 和 L2$ 并共享 L3$ , 共享内存中有一个var X,x位于cache line 称为 XCacheL ,以下是我的问题的详细信息:

T1:核心 0、核心 4 和核心 5 具有 x = 100 和 XCacheL 是S共享状态,因为 3 个核心具有 XCacheL 的副本。

T2:Core 0需要修改x,因此Core 0广播无效信号,Core 4和Core 5接收信号 ,使它们的 XCacheL 副本无效,Core 0 将 x 修改为 200 XCacheL 现在的状态是M修改的 。

T3:核心 4 需要读取 x,但其 XCacheL 副本在 T2 中无效,因此会触发读取未命中,将发生以下情况:

● Processor makes bus request to memory
● Snooping cache puts copy value on the bus
● Memory access is abandoned
● Local processor caches value
● Local copy tagged S
● Source (M) value copied back to memory
● Source value M -> S

所以在T3之后,XCacheL是核心0和核心4状态:S哈雷德 , 和I在 core 5 中已验证,并且 L3$ 和主存具有最新的有效 XCacheL 。

T4:核心5需要读取x,因为它的XCacheL副本是I在 T2 中无效,但此时 RacheL 拥有 L3$ 中的正确副本,核心 5 是否需要像核心 4 那样触发读取未命中?!

我的猜测是:不需要,因为 L3$ 具有有效的 XCacheL, 因此,核心 5 可以到达 L3$,并在核心 5 中获得从 L3$ 到 L1$ 的正确 XCacheL,因此核心 5 不会触发读取未命中。


你是对的,在 T4 步骤中,核心 #5 的负载将在 L3 中达到,因此不会发生内存访问。核心 #5 获取该行的另一个副本,处于共享状态。


您的步骤顺序对于像 Broadwell 这样的 CPU 来说毫无意义,因为所有内核都共享对片上 DRAM 控制器的访问。

环形总线连接核心(每个核心都有一片 L3 缓存)和系统代理(PCIe 链路和与其他核心的连接)和本地代理(内存控制器)。看https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_(client)#Die_Stats https://en.wikichip.org/wiki/intel/microarchitectures/broadwell_(client)#Die_Stats显示环形总线的框图。

各个内核不直接驱动“内存总线”,甚至不直接驱动 2 或 4 条 DRAM 总线之一。内存控制器仲裁对 DRAM 的访问,并具有一些缓冲来重新排序/组合访问。 (一切访问内存的操作都会经过它,包括 DMA,因此它可以做任何它喜欢做的事情,只要它给出以某种合理的顺序发生的加载/存储的外观。)

加载请求在 L3 缓存中丢失之前不会发送到系统代理。看https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198 https://superuser.com/questions/1226197/x86-address-space-controller/1226198#1226198查看四核桌面的图示(它更简单,只是将内存控制器连接到系统代理,使其与 CPU 集成内存控制器之前的北桥完全相同。)


由于 Broadwell 使用包容性 L3 缓存,L3 标签可以告诉它哪个核心(如果有)具有修改或独占副本,即使 L3 本身中的行不可共享。 (即,线路的数据在 L3 中可能无效,但标签仍在跟踪哪个核心拥有私有副本)。看intel core i7处理器使用哪种缓存映射技术? https://stackoverflow.com/questions/49092541/which-cache-mapping-technique-is-used-in-intel-core-i7-processor

这让 L3 标签充当窥探过滤器以减少广播。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MESI协议中的L3$角色是什么 的相关文章

  • 为什么x86分页没有特权环的概念?

    早在 1982 年 当 Intel 发布 80286 时 他们在分段方案中添加了 4 个特权级别 环 0 3 由全局描述符表 GDT 和局部描述符表 LDT 中的 2 位指定 在 80386 处理器中 Intel 添加了分页功能 但令人惊讶
  • 当我打开在 Xcode 4 中创建的 Google 地图项目时,Xcode 5 会警告我的架构设置

    我刚刚更新到新发布的 Xcode 5 我正在开发一个使用 Google 地图 iOS SDK 的 iOS 应用程序 当我在 Xcode 4 中开发时 我改变了我的Architectures在我的项目设置中进行设置 按照 Google 的步骤
  • Spring Boot,使用 EhCache 进行缓存

    我需要在我的应用程序中缓存一些数据 我正在考虑使用 Ehcache 我有几个问题 Ehcache需要另外一台服务器吗 我需要其他客户端来使用 Ehcache 吗 Ehcache 如何与多个实例配合使用 是否有可能使用 Ehcache 创建类
  • 使用 Hibernate 作为 ORM 机制的 Web 应用程序中的 L1 和 L2 缓存有什么区别?

    我只想要一些有关使用 L1 缓存和 L2 缓存的标准用途的一般信息 我很好奇 因为我正在研究使用赤土陶器作为二级缓存的系统 并且我发现它也有一级缓存 L1 缓存是每个 Hibernate 会话都存在的缓存 并且该缓存不在线程之间共享 该缓存
  • Intel 64 和 IA-32 上的 MESI 有何意义

    MESI 的要点是保留共享内存系统的概念 然而 对于存储缓冲区 事情就变得复杂了 一旦数据到达 MESI 实现的缓存 下游内存就会保持一致 然而 在此之前 每个核心可能对内存位置 X 中的内容存在分歧 具体取决于每个核心的本地存储缓冲区中的
  • 避免 AngularJS 部分视图在 IE 中缓存

    我正在开发一个 ASP NET MVC 应用程序 它也有一些 angularJS 我有一个主页 其中有不同的选项卡 当您单击它们时 它们会加载角度部分视图 主页是这样的 div class widget div div class widg
  • 如何知道寄存器是否是“通用寄存器”?

    我试图了解寄存器必须具备什么标准才能被称为 通用寄存器 我相信通用寄存器是一个可以用于任何用途的寄存器 用于计算 将数据移入 移出等 并且是一个没有特殊用途的寄存器 现在我读到了ESP寄存器是通用寄存器 我猜是ESP寄存器可以用于任何事情
  • 大会,你好世界问题

    我正在 Linux 上学习 asm noobuntu 10 04 我得到了以下代码 http asm sourceforge net intro hello html http asm sourceforge net intro hello
  • 没有 FPU 的处理器中的浮点计算

    是否可以在没有浮点单元的嵌入式处理器中执行浮点运算 是的 您只需要在软件中完成即可 你的编译器可能会提供支持 http gcc gnu org onlinedocs gccint Soft float library routines ht
  • 使用 NSCache 实现缓存过期

    我正在使用 NSCache 在我的应用程序中实现缓存 我想为其添加过期时间 以便在一段时间后它将获取新数据 有哪些选择以及最好的方法是什么 我应该查看访问缓存时的时间戳并使之无效吗 缓存是否应该通过使用固定间隔计时器自动使自身失效 缓存是否
  • CPU寄存器和多任务处理

    我目前正在学习汇编 我很困惑 CPU 寄存器如何与多任务一起工作 所以在多任务系统中 CPU可以随时暂停某个程序的执行并运行另一个程序 那么在这一步中寄存器值是如何保存的呢 寄存器是压入堆栈还是以其他方式 CPU 寄存器如何与多任务一起工作
  • 是否从页面缓存中的脏页面进行文件读取?

    当字节写入文件时 内核不会立即将这些字节写入磁盘 而是将这些字节存储在页缓存中的脏页中 回写缓存 问题是 如果在脏页刷新到磁盘之前发出文件读取 则将从缓存中的脏页提供字节 还是首先将脏页刷新到磁盘 然后进行磁盘读取以提供字节 将它们存储在进
  • F# 正确使用序列缓存

    我正在尝试将 Seq cache 与我制作的函数一起使用 该函数返回最多为 N 的素数序列 不包括数字 1 我无法弄清楚如何将缓存的序列保留在范围内 但仍然使用它在我的定义中 let rec primesNot1 n 2 n gt Seq
  • 如何保持长时间运行的NHibernate Session数据一致?

    我在 ASP NET 会话中缓存了 NHibernate 会话 我遇到过一种情况 用户编辑了一个对象 因此它位于 ISession 的第一级缓存中 然后另一个用户编辑了同一个对象 此时 用户 1 仍然可以看到其编辑的原始版本 而用户 2 可
  • AVX-512 指令编码 - {er} 含义

    在 Intel x86 指令集参考中 有许多 AVX 512 指令在指令中具有可选的 er 例如 VADDPD 的一种形式定义为 EVEX NDS 512 66 0F W1 58 r VADDPD zmm1 k1 z zmm2 zmm3 m
  • 如何在 Laravel 5 中通过键获取所有缓存项的列表?

    Laravel 中的 Cache 类具有 get itemKey 等方法来从缓存中检索项目 以及 Remember itemKey myData1 myData2 来将项目保存在缓存中 还有一个方法可以检查缓存中是否存在某个项目 Cache
  • 如何用C语言编写程序来测量缓存的速度?

    编写一个程序并尝试比较 如果可以的话测量 从主存和缓存访问数据的时间 如果可以的话 那么如何衡量每一级缓存的速度呢 您需要想出一个启发式方法 强制 100 或非常接近 缓存未命中 希望您有缓存失效操作码 和 100 缓存命中 万岁 这适用于
  • 缓存一致性是否始终可以防止读取过时的值?失效队列允许吗?

    在 MESI 协议中 仅当将缓存行保持在独占 修改状态时才写入缓存行 要获取独占状态 您可以向持有同一高速缓存行的所有核心发送无效请求 但是是否存在一种微架构 其中某些内核会在实际使缓存线无效之前做出确认响应 如果确实如此 那不是违反了缓存
  • 是否可以在Linux上将C转换为asm而不链接libc?

    测试平台为Linux 32位 但也欢迎 Windows 32 位上的某些解决方案 这是一个c代码片段 int a 0 printf d n a 如果我使用 gcc 生成汇编代码 gcc S test c 然后我会得到 movl 0 28 e
  • 过期时自动重新填充缓存

    我当前缓存方法调用的结果 缓存代码遵循标准模式 如果存在 则使用缓存中的项目 否则计算结果 在返回之前将其缓存以供将来调用 我想保护客户端代码免受缓存未命中的影响 例如 当项目过期时 我正在考虑生成一个线程来等待缓存对象的生命周期 然后运行

随机推荐

  • 如何使用Java上传图像Url上传到Fire Storage并同时将其保存在fireStore中

    这是我的代码 我可以在 Toast 消息中检索图像 Url 但无法将其保存在 firestore 中 请告诉我是否有其他方法可以做到这一点 或者是我存储 URL 的问题 public class register extends AppCo
  • 空手道加特林:如何模拟空手道功能,除了那些标有@ignore的场景

    我有一个功能可以定义加特林测试的工作流程 加特林测试正在运行 但如何设置空手道选项来忽略标记为 ignore 使用系统属性 例如 Dkarate options tags ignore 没有帮助 mvn clean test compile
  • Unity - 将脚本文件移动到其他目录而不会丢失引用

    由于可以从另一个脚本访问 我必须将 GameManager Script 移动到更高的目录 但是 如果我尝试将脚本从一个文件夹移动到另一个目录 所有引用都会消失 我的意思是 所有脚本的所有引用 从头开始重新配置所有脚本确实很困难 就像从头开
  • 如何在 C# 窗口应用程序中以编程方式创建按钮?

    在 Form1 Load 方法中 我应该编写什么代码来创建一个简单的按钮 private void Form1 Load object sender System EventArgs e 这样在 加载 时就会显示按钮 正如你所说 它是Win
  • SAS中是否有相当于R函数表的?

    在 R 中 函数table使用交叉分类因素构建列联表 是否有一个等效的 SAS PROC 可以重现此 R 函数的结果 Example x lt data frame x rep 1 2 times 5 y rep 1 2 each 5 ou
  • 可以将 FileOutputStream 转换为字节数组吗?

    我想将 FileOutputStream 转换为字节数组 以便在两个应用程序之间传递二进制数据 请问有人可以帮忙吗 要将文件转换为字节数组 请使用 ByteArrayOutputStream 类 此类实现一个输出流 其中数据写入字节数组 当
  • 编译时检查右移是否是有符号类型的算术运算

    我想知道在对有符号类型进行操作时检查右移是否是算术的最便携的方法是什么 例如是否 2 gt gt 1 is 1 在编译时 我的想法是在编译时以某种方式检查这一点并能够检测到这一点 这样我就可以编译该函数的不同版本 取决于运算符是否 gt g
  • 如何连接QLineEdit focusOutEvent

    我设计了一个带有QLineEdit在 PyQt4 中 在 Designer 的帮助下 我转换了 ui to py using pyuic4 我创建了另一个 py文件并导入和子类化Ui Class 我想执行一些任务QLineEdit失去焦点
  • 使用 IValueConverter 进行动态样式绑定

    我正在尝试设置一种样式 该样式在App xaml 在加载用户控件时动态地加载 并且只是由于某种原因不应用样式 即没有发生错误 只是不应用样式 我确信这是因为我定义了错误的绑定 但我无法弄清楚我需要做什么不同才能让它工作 App xaml 样
  • IText 编辑或删除 PDF 上的图层

    H All 我正在使用 IText 在 PDF 上添加文本图层 现在我想编辑PDF上的现有图层 图层也是仅由IText创建的 看来 IText 没有这样的方法支持 我想到的另一种方法是删除现有图层并在其位置上放置新图层 看来 IText 也
  • bash 迄今为止的字符串

    bash 中是否有机会将字符串转换为日期 例如 我有一个时间格式 Y m dS H M S 此类字符串的一个示例是 2009 06 24S12 34 56 我需要在 bash 中将此字符串转换为日期 unix 时间戳 我怎样才能做到这一点
  • html中的自动完成css类在vs代码中不起作用

    html 中 css 类名称的自动补全功能停止工作 我尝试了很多扩展 但没有任何效果 HTML 中 CSS 类名称的 IntelliSense HTML CSS 支持 另外 基尔是我的settings json workbench colo
  • Angular 2 Form 异步验证 ajax 在每次按键时调用

    我正在玩 Angular 2 表单异步验证 一切都工作正常 但后来我意识到在输入字段内的每个按键上都会对服务器进行 ajax 调用 这对服务器不利 我尝试了很多方法但没有任何效果 所以请帮助我如何处理这个问题 form FormGroup
  • 循环类似命名的 UI 元素 - 也许通过从其名称获取变量?

    我使用 Interface Builder 向视图添加了许多标签 我还有一个要显示的值数组 有没有比使用此代码更好的方法来设置标签 lblTotal1 text NSString stringWithFormat i Seconds int
  • MongoDB - 去除字段中的非数字字符

    我有一个电话号码字段 其中使用了各种随机分隔符 例如 932 555 1515 951 555 1255 952 555 1414 我想遍历已经存在的每个字段并删除非数字字符 那可能吗 无论它是存储为整数还是数字字符串 我都不在乎 它将仅用
  • 从用户输入中读取数学表达式

    我需要能够读取用户输入并将其分解以供以后使用 用户可以输入整数或小数和运算 但我不知道如何读取它 用户输入的示例是4 8 3 12 or 3 2 3 or 12 16 4 or 2 3 64 96 现在我正在使用这样的东西 public c
  • 在 Android AudioTrack 中使用缓冲区

    我试图弄清楚如何使用缓冲区音轨 http developer android com reference android media AudioTrack html有效地传输音乐 我知道您可以使用以下命令对音频进行排队write http
  • Mercurial - 比较本地和远程存储库?

    在Git中 有这样的命令 git remote show
  • 从数据集中完全删除一行

    我的网格视图上有一个删除按钮 单击删除按钮时 该行应该是 完全从会话中删除 我目前正在做以下事情 protected void gvMainLog RowCommand Object sender GridViewCommandEventA
  • MESI协议中的L3$角色是什么

    我想了解intel Broadwell中MESI的更多细节 假设一个cpu插槽有6个核心 core 0 到 core 5 他们每个人都有自己的 L1 和 L2 并共享 L3 共享内存中有一个var X x位于cache line 称为 XC