计算机理论模型

计算机理论模型.png

多CPU架构

多CPU架构.png

缓存一致性协议

在多处理器系统中,每个处理器都有自己的高速缓存,而它们又共享同一主内存(MainMemory)。基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是 也引入了新的问题:缓存一致性(CacheCoherence)。当多个处理器的运算任务都涉及同一块主内存区域时,将可能导致各自的缓存数据不一致的情况,如果真的发生这种情况,那同步回到主内存时以谁的缓存数据为准呢?为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSIMESI(IllinoisProtocol)、MOSI、Synapse、Firefly及DragonProtocol,等等

缓存一致性协议.png

MESI

MESI.png

小知识

缓存行大小为64Bytes;

以Long型占8个字节为例,一个缓存行可以放8个Long型变量。

当一个线程修改了缓存行中某一个变量,其他线程整个缓存行都会失效。

而如果这个缓存行中有一些变量是我们不希望被频繁从主内存同步的,我们想让这样的变量好好的呆在CPU缓存中,就只在更新时从主内存同步,而不是因为其他变量的原因被同步。我们可以怎样做呢?

我们可以这样:比如有一个Long型变量A,我们可以在这个变量前后都定义7个不使用的Long变量(只是为了占用缓存行)。这样就可以让变量A不受影响了。

定义7个是因为缓存行一共64字节,一个缓存行最多能放8个long类型变量