Memory Consistency and Cache Coherence——内存连贯性和cache一致性 (1)

并行包括指令级并行,数据级并行,线程级并行。指令级并行主要是在一个CPU内利用流水线,乱序执行,指令多发射等技术实现。线程级并行主要利用多核cpu。指令级并行对程序员是透明的,完全靠硬件实现。

     多处理器体系结构主要有两类,第一类是对称多处理器(SMP),特点是核心数目较少,通常不超过8个,这些处理器共享一个集中式存储器,所有处理器平等访问存储器。SMP也称为一致存储器访问(UMA)多处理器。另外一类是物理分布式处理器,称为分布式共享存储器(DSM)。为了支持更多的处理器,存储器必须分散在处理器之间,而不应当是集中式的;否则,存储器系统就无法在不大幅延长访问延迟的情况下为大量处理器提供带宽支持。将存储器分散在节点之间,既增加了带宽,也缩短了到本地存储器访问的延迟,DSM处理器也称为非一致存储器访问(NUMA)。

Memory Consistency and Cache Coherence——内存连贯性和cache一致性 (1)

NUMA架构

采用对称共享存储器的计算机通常支持对共享数据与专用数据的缓存。专用数据提供单个处理器使用,共享数据提供多个处理器使用,基本上通过共享数据来实现处理器间的通信。共享数据的缓存引入了缓存一致性问题。

为多个处理器保持缓存一致的协议称为缓存一致性协议,主要实现方式有目录式和监听式,主要讲解监听式,因为大多数SMP处理器采用监听式。采用微处理器的多处理器和缓存通过总线连接到单个共享存储器,所以监听协议的应用越来越多。总线提供一种非常方便的广播介质,用于实现监听。

写入失效协议:在处理器写入某一数据项之前,获取对该数据的独占访问,在执行写入操作时,使其他处理器缓存的副本失效。如果两个处理器同时写入同一数据,其中一个将会在竞赛中获胜,从而导致另一个处理器副本失效。另一处理器要完成写入操作,必须获得此数据的新副本。

实现失效协议的关键在于使用总线或其他广播介质来执行失效操作。在多核心处理器中,总线可能是专用缓存(Intel core i7中的L1和L2)和共享外部缓存(i7中的L3)之间连接。为了执行一项失效操作,处理器需要获得总线访问,并在总线上广播其失效地址。所有处理器持续监听该总线,观测这些地址。处理器检查总线上的地址是否在自己的缓存中。如果在则使处理器相应的缓存数据失效。

在写入一个共享块时,执行写入操作的处理器必须获取总线访问权限来广播其失效。如果两个处理器尝试同时写入共享块,当他们争用总线时,会串行安排它们广播失效操作的尝试。第一个获得总线访问权限的处理器会使它正写入块的所有其他副本失效。如果这些处理器尝试写如同一块,则由总线实现这些操作的串行化。这一机制有一层隐含意思:在获得总线访问权之前,无法实际完成共享数据项的写入操作。所有一致性机制都需要某种方法来串行化对同一缓存块的访问,具体方式是可以串行化对通信介质的访问,也可以是对另一共享结构访问串行化。

除了使被写入缓存块的副本失效之外,还需要在缓存发生缺失时定位数据项。直写缓存比较容易,所有的数据写入操作都会发到存储器,所以总是可以从存储器中找到最新值。写会缓存查找最新值要困难些,因为最新数据项可能放在专用缓存中(另外一个cpu缓存独占),而不是共享缓存或存储器中。写回缓存可以为缓存缺失和写入操作使用相同的监听机制:每个处理器都监听放在共享总线上的所有地址。如果处理器发现自己有被请求块的脏副本,它会回应该缓存块的读取请求,并终止对存储器(或L3缓存)的缓存的访问。由于必须从另一个处理器的专用缓存(L1或L2)提取缓存块,所以增加了复杂性,这一提取过程要长于从L3缓存提取的时间。由于写回缓存对存储器带宽要求低所以支持更多更快的处理器。