mesi相关内容

现代英特尔x86 CPU如何实现商店的总订单

由于其TSO内存模型,x86保证了所有存储的总顺序。我的问题是,有没有人知道这实际上是如何实施的。 我对所有4个围栏是如何实施的印象很好,所以我可以解释当地的秩序是如何保持的。但4个栅栏只会给出程序顺序;它不会给您提供TSO(我知道TSO允许较旧的商店跳到新负载之前,因此只需要4个栅栏中的3个)。 在单个地址上的所有内存操作的总顺序是一致性的责任。但我想知道英特尔(尤其是Skylake)如 ..
发布时间:2022-05-08 19:13:37 其他开发

为什么标准 C# 事件调用模式是线程安全的,没有内存屏障或缓存失效?类似的代码呢?

在 C# 中,这是以线程安全的方式调用事件的标准代码: var handler = 发生了什么事;如果(处理程序!= null)处理程序(这个,e); 编译器生成的 add 方法可能在另一个线程上使用 Delegate.Combine 创建一个新的多播委托实例,然后在编译器生成的字段上设置(使用互锁比较-交换). (注意:对于这个问题,我们不关心在事件订阅者中运行的代码.假设它是线程安全 ..
发布时间:2021-09-07 18:37:26 C#/.NET

缓存一致性-MESI协议

在采用MESI协议(具有l1和l2包含性)的高速缓存中是否可能存在其中l2可以将无效指令发送到l1中已经无效的行的情况. 解决方案 在某些情况下,L2根本不知道L1是否有线路,因为允许L1静默丢弃它. 实际上,如果包含L2,则从L1撤消未修改的线路(容量逐出)时,几乎没有任何理由浪费带宽,因为L2已经具有副本并且没有变化.因此,很可能L2中的许多行在从L1中逐出后仍会停留很长时间.当 ..
发布时间:2021-04-24 21:08:48 其他开发

不同级别的缓存(即L1,L2和L3)之间的缓存一致性(MESI协议)

这是关于 cache 的不同层的缓存一致性协议.我对 L1 的理解(X86_64)是,它仅由一个内核拥有,并且 L2 在2个内核之间,而对于所有内核, L3 在CPU插槽中.我已经阅读了 MESI 协议的功能,有关存储缓冲区,使队列无效,使消息无效等.我的疑问是,这是适用于 L1 MESI 仅>,或者它也适用于 L2 和 L3 .还是在 L2 和 L3 之间有不同的同步缓存. 解决方案 缓 ..
发布时间:2021-04-21 18:39:02 其他开发

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

我想了解Intel Broadwell中MESI的更多详细信息. 假设一个cpu套接字具有6个核心,核心0到核心5,他们每个人都有自己的L1 $和L2 $,并共享L3 $,共享内存中有一个var X,x位于高速缓存行中名为XCacheL,以下是我的问题的详细信息: T1:核心0和核心4和核心5具有x = 100和XCacheL处于 S 状态,因为3个内核具有XCacheL的副本. ..
发布时间:2021-04-21 18:38:25 其他开发

MESI协议.写入高速缓存未命中.为什么需要获取主内存值?

我想知道 MESI 协议的实现与写未命中策略的分配有关.假设我们有写入请求,并且没有其他缓存行副本,但是缓存未命中.此关系图表示,下一步是从中获取价值主存储器(或L2高速缓存),将其存储并将高速缓存行标记为M(已修改).我想然后将新值存储在缓存块中.问题是:为什么我们需要从主存储器中获取数据的步骤?为什么我们不能简单地将新值写入处于I(无效)状态的第一个找到的高速缓存行/替换最旧的高速缓存行并将其 ..
发布时间:2021-04-21 18:34:38 其他开发

现代x86 CPU使用什么高速缓存一致性解决方案?

我对高速缓存一致性系统在现代多核CPU中的功能感到困惑。我已经看到,基于侦听的协议(例如基于MESIF / MOESI的侦听协议)已在Intel和AMD处理器中使用,另一方面,基于目录的协议在多核的情况下似乎效率更高,因为它们不广播而是将消息发送到 什么是AMD或Intel处理器中的现代缓存一致性解决方案?它是基于侦听的协议(例如MOESI和MESIF),还是仅基于目录的协议?是两者的结合( ..
发布时间:2020-10-07 18:34:32 其他开发

MESI在Intel 64和IA-32上的意义是什么

MESI的目的是保留共享内存系统的概念。 但是,有了存储缓冲区,事情变得很复杂: 一旦数据命中了实现MESI的缓存,内存下游便是一致的。 但是,在此上游,每个内核可能对内存位置X中的内容不一致。 这样,从每个内核的角度来看,内存的状态似乎是不同的-它不是一致的。 那么,为什么我们要“部分地”与MESI加强一致性? 编辑:在进一步缩小真正使我感到困惑的地方之后,进行了实质性的编辑。我 ..
发布时间:2020-09-28 06:35:32 其他开发

当CPU将存储缓冲区中的值刷新到L1高速缓存时?

Core A将值x写入到storebuffer中,等待无效的ack,然后将x刷新到高速缓存中.它只等待一个ack还是等待所有ack?以及它如何确定所有CPU中有多少个托架? 解决方案 对我来说,您不清楚“无效确认"是什么意思,但是假设您的意思是源自另一个请求所有权的核心的监听/无效在同一行. 在这种情况下,由于存储缓冲区中的存储尚不全局可见,因此存储缓冲区中的存储通常可以自由地忽略来 ..
发布时间:2020-09-13 19:47:44 其他开发

MESI缓存协议

我正在阅读有关 MESI侦听缓存一致性协议的信息,我猜这是该协议在现代多核x86处理器中使用的代码(如果我记错了,请纠正我).现在,这篇文章在一个地方说了这一点. 将行保持为“已修改"状态的缓存必须监听(拦截)所有 尝试读取(从系统中的所有其他高速缓存中) 相应的主内存位置,然后插入其保存的数据.这是 通常通过强制回退读取(即稍后重试),然后写入来完成 将数据保存到主内存,然后将缓存行更改为 ..
发布时间:2020-05-14 00:23:42 其他开发