SMP 中的缓存一致性更新
Cache Coherency updation in SMP
采用 SMP(对称多处理)机器,其中有两个单独的处理器。
此处如果两个线程 运行 在两个不同的处理器上并共享一些数据。
此共享数据保存在两个 运行 线程的两个不同处理器的缓存中。
因此,如果线程 1(第一个处理器中的 运行)更新其缓存中共享数据的值,则第二个处理器上的线程 运行 将无法获得更新数据 ?
这个问题对吗?
这个问题是怎么解决的?
已通过缓存一致性硬件解决。
现代多核处理器使用复杂的缓存一致性协议。虽然了解这些协议的复杂性可能没有用,但了解它们背后的基本概念却非常有价值。了解 MESI protocol 是一个很好的起点。
通常,在处理器可以对可缓存内存块执行缓存写入之前,其缓存必须独占该内存。也就是说,没有其他处理器可以缓存它。
因此,如果第一个处理器要写入内存区域,它将使用缓存间协议在其缓存中专门获取该内存。如果第二个处理器然后尝试读取该内存区域,它将不会在其缓存中找到它,并使用缓存间协议与第一个处理器共享最新版本。
如果第二个处理器想要写入该内存区域,它将使用缓存间协议使另一个处理器的缓存副本无效。这将迫使第一个处理器在读取之前重新获取(可能修改过的)版本。
实际细节可能因硬件细节而异。现代多核 CPU 不需要将数据写回主内存以使其对其他内核可见。
采用 SMP(对称多处理)机器,其中有两个单独的处理器。
此处如果两个线程 运行 在两个不同的处理器上并共享一些数据。
此共享数据保存在两个 运行 线程的两个不同处理器的缓存中。
因此,如果线程 1(第一个处理器中的 运行)更新其缓存中共享数据的值,则第二个处理器上的线程 运行 将无法获得更新数据 ?
这个问题对吗? 这个问题是怎么解决的?
已通过缓存一致性硬件解决。
现代多核处理器使用复杂的缓存一致性协议。虽然了解这些协议的复杂性可能没有用,但了解它们背后的基本概念却非常有价值。了解 MESI protocol 是一个很好的起点。
通常,在处理器可以对可缓存内存块执行缓存写入之前,其缓存必须独占该内存。也就是说,没有其他处理器可以缓存它。
因此,如果第一个处理器要写入内存区域,它将使用缓存间协议在其缓存中专门获取该内存。如果第二个处理器然后尝试读取该内存区域,它将不会在其缓存中找到它,并使用缓存间协议与第一个处理器共享最新版本。
如果第二个处理器想要写入该内存区域,它将使用缓存间协议使另一个处理器的缓存副本无效。这将迫使第一个处理器在读取之前重新获取(可能修改过的)版本。
实际细节可能因硬件细节而异。现代多核 CPU 不需要将数据写回主内存以使其对其他内核可见。