跳到主要内容

并行与存储器层次结构

多核多处理器(也称为多核处理器或CMP)的设计使得在一个物理芯片上能够集成多个处理器核心。这些核心能够并行执行代码, 从而提高整体处理能力和效率。然而, 这种并行性也带来了一些挑战, 特别是当涉及到共享资源, 如内存和缓存时。

缓存是处理器为了提高访问速度而设计的一种快速存储器。由于处理器访问缓存的速度比访问主存快得多, 因此缓存通常用来存储处理器最近访问过的数据和指令。然而, 当多个处理器核心共享缓存或主存时, 就可能出现数据一致性的问题。

数据一致性问题

当两个或多个处理器核心同时访问和修改同一内存位置时, 如果没有适当的同步机制, 就可能导致数据不一致。这是因为每个处理器核心都有自己的缓存, 并且可能同时缓存了同一内存位置的不同副本。如果两个核心都修改了自己的缓存副本而没有通知其他核心, 那么其他核心在后续访问该内存位置时可能得到错误(或过时)的数据。

存储系统一致性原则

存储器一致性有三个关键的性质, 它们在多处理器系统中确保了数据的正确性和程序的可预测性。

读后写一致性

当一个处理器(如处理器P)对一个内存位置(如X)执行写操作后, 紧接着又对该位置执行读操作, 并且在这两次操作之间没有其他处理器对该位置执行写操作, 那么读操作必须返回之前写操作所写入的值。

这保证了处理器内部指令执行的顺序性, 即使在单处理器系统中也很重要, 因为它确保了程序按照程序员预期的顺序执行。

存储器一致性

当一个处理器(如处理器P)对一个内存位置(如X)执行读操作, 并且这个读操作是在另一个处理器如处理器Q)对该位置的写操作之后, 且在这两个操作之间没有其他处理器对该位置执行写操作, 那么读操作必须返回之前写操作所写入的值。这确保了多个处理器之间的数据可见性。如果没有这种一致性保证, 处理器可能会读取到旧的、不一致的数据值, 导致程序行为错误。

写操作的串行化

第三个性质强调了对同一地址的所有写操作必须有一个全局一致的顺序, 即使在不同的处理器上并发执行。这意味着, 无论从哪个处理器的角度观察, 写入操作的顺序都是确定且一致的。这是确保数据一致性的关键, 因为它避免了写操作的乱序执行可能带来的不可预测状态。这避免了“写-写”竞态条件, 确保了不同处理器之间的写操作不会相互干扰, 也不会导致数据状态的不确定性和不可预测性。

实现一致性的基本方案

在支持cache一致性的多处理器系统中, 数据的迁移(migration)和复制(replication)是两种关键技术, 用于提高访问共享数据的性能。这些技术通过减少访问远程共享数据的延迟、减少对共享存储器带宽的需求以及降低读取共享数据时的竞争现象, 来优化系统性能。

  • 迁移(Migration):当某个处理器需要频繁访问原本存储在远端或共享存储器中的数据时, 该数据会被迁移到该处理器的本地Cache中。这一过程减少了远程内存访问的延迟, 同时也减轻了共享存储器带宽的压力, 因为后续对该数据的访问可以直接在本地Cache中完成, 无需再次访问主存。

  • 复制(Replication):当多个处理器需要同时读取同一个共享数据项时, 系统可以在每个处理器的本地cache中都复制一份这个数据项。这样, 每个处理器都可以在自己的cache中直接读取数据, 而无需等待其他处理器完成读取或访问远程存储器, 从而减少了访问延迟和读取共享数据时的竞争现象。

为了维护多个处理器之间cache的一致性, 系统需要实现一种称为cache一致性协议(cache coherence protocol)的机制。这个协议负责跟踪所有共享数据块的状态, 并确保所有处理器都看到一致的数据视图

Cache一致性协议

监听协议:是实现多处理器Cache一致性最常用的方法之一。

在这种协议下, 每个Cache控制器都会监听系统总线或专用的互联网络上的活动, 以便及时发现对共享数据的访问请求和更新。

根据监听到的信息, Cache控制器会更新其内部维护的共享数据块的状态, 并在必要时采取相应的动作, 如更新本地Cache中的数据副本、废弃过时的数据副本(Invalidation), 或者广播自己的写操作到其他Cache以保持一致性。

常见的监听协议包括MESI(Modified, Exclusive, Shared, Invalid)和其变体MOESI(Modified, Owner, Exclusive, Shared, nvalid), 这些协议通过维护数据块的多个状态来精确控制数据的读写操作, 确保所有处理器看到的数据是一致的。

监听协议的优势在于它能够动态响应系统中的访问请求, 减少了集中式管理的复杂性和潜在瓶颈, 但其缺点是随着处理器数量的增加, 总线或网络上的通信开销可能会增大, 影响性能。因此, 在大规模多处理器系统中, 可能还会采用更为复杂的分布式一致性协议, 如分布式目录协议, 来进一步优化性能和可扩展性。


存储器的层次结构是计算机系统中不可或缺的一部分, 它通过合理地将数据和程序分布在不同的存储层级中, 实现了高效地存取数据, 从而提高了计算机系统的性能和运行速度。

随着技术的不断发展, 存储器的层次结构也在不断优化和完善, 以适应更加复杂和多样化的计算需求。

请作者喝奶茶:
Alipay IconQR Code
Alipay IconQR Code
本文遵循 CC CC 4.0 BY-SA 版权协议, 转载请标明出处
Loading Comments...