导航

线程级并行

Posted on 2022-08-04 11:42  wuqiu  阅读(208)  评论(0编辑  收藏  举报

多处理机CACHE一致性

  1. 概念 :

CPU 将运算结果写入Cache,再由Cache将数据写入存储器。这在单处理机运行的时候本没有太大区别。但在引入多处理机之后就有了问题,一个处理机对Cache中数据做了修改而另一个却没有,存储器要怎么分辨哪一个才是正确的、最新的、要保存的数据呢?

存储器的一致性

  1. 概念 : 如果对某个数据项的任何读操作均可得到其最新写入的值,则认为这个存储系统是一致的。

  2. 存储器系统行为的两个不同方面:

a. 读操作得到的是什么值 b. 什么时候才能将已写入的值返回给读操作

  1. 存储器一致性的条件 :

处理器 : P Q 存储器单元 : X

a. P 写入 X 之后再对 X 进行读取,在这期间没有其他处理器对 X 进行写,则 P 读到的值总是前面写进去的值。

b. P 对单元 X 进行写之后,另一处理器 Q 对单元 X 进行读, 读和写之间无其他写,则 Q 读到的值应为 P 写进去的值。

c. 对同一单元的写是串行化的,即任意两个处理器对同一单元的两次写,从各个处理器的角度来看顺序都是相同的。

Cache 一致性协议

在一致的多处理机中,Cache 提供两种功能

a. 共享数据的迁移 : 减少了对远程共享数据的访问延迟,也减少了对共享存储器带宽的要求。

b. 共享数据的共享 : 不仅减少了访问共享数据的延迟,也减少了访问共享数据所产生的冲突。

关键 : 跟踪记录共享数据块的状态

两类协议

  1. 目录式协议 : 物理存储器中数据块的状态被保存在一个称为目录的地方

  2. 监听式协议

a. 每个Cache除了包含物理存储器中块的数据拷贝之外,也保存着各个块的共享信息状态

b. Cache通常连在共享存储器的总线上,当某个Cache需要访问存储器时,它会把请求放到总线上,然后其他一直监听着总线的Cache就看看自己有没有这个要改动的数据块,要是有的话就改一改。

两种方法

  1. 写作废协议

一个处理器准备将X写入的时候,其他处理器中X的副本被全部作废,然后写入X并跟新主存储器。

写作废是针对Cache块进行操作,作废的是块...

  1. 写更新协议

一个处理器准备将X写入的时候,通过广播使其他Cache中所有对应于该数据项的副本进行更新。

两种方法的性能差异体现 :

  1. 在对同一个数据进行多次写操作的中间无读操作的情况下,写更新协议需进行多次写广播操作,而写作废只需要一次作废操作。

  2. 在对同一Cache块的多个字的进行写操作的情况下,写更新协议对每一个写操作都要进行一次广播,而写作废协议仅在该块的第一次写时进行作废操作即可

写作废是针对Cache块进行操作,而写更新则是针对字(或字节)进行。

  1. 考虑从一个处理器A进行写操作后到另一个处理器B能读到该写入数据之间的延迟时间。写更新协议的延迟时间较小。

监听协议的实现

监听协议的基本实现技术

关键有三个方面 :

  1. 处理器之间通过一个可以实现广播的互联机制相连。

通常采用总线

  1. 当一个处理器的Cache 响应本地 CPU 的访问,如果它涉及全局操作,其Cache控制器就要在获得总线控制权后,在总线上发出相应的消息。

  2. 所有的Cache都在监听总线,它们检测总线上的地址在它们的cache中是否有副本。如果有就动一动。

监听协议举例

目录式协议

什么是目录?

一种逻辑上集中的数据结构。记录着存储器中所有可以调入Cache中的数据块的状态以及哪些Cache中有它的副本等相关信息。

依靠这个目录,我就可以避免广播操作。

位向量的定义

是用来记录哪些Cache中有副本的,每一位对应了一个处理器,长度与处理器个数成正比,由位向量指定的处理机的集合称为共享集S。

分布式目录

目录法的实现方案

最简单的一种 : 对于存储器中的每一块都在目录中设置一项。目录中的信息量与M*N成正比。

M : 存储器中存储块的总数量 N : 处理器的个数

M = K * N K是每个处理机中存储块的数量。

目录中的信息量即为 K×N×N ,所以如果K保持不变,则目录中的信息量就与N2成正比。

存储块的状态

  1. 未缓冲 ( uncached ):

该块尚未被调入Cache,所有处理器的Cache中都没有这个块的副本。

  1. 共享 ( shared ) :

该块在一个或多个处理器上有副本,且这些副本与存储器中该块相同。

  1. 独占 ( exclusive ) :

仅有一个处理器有这个块的副本,且该处理器已经对其进行了写操作,所以其内容是最新的,而存储器中该块的数据已过时。这个处理及称为该块的拥有者

三种节点

信息状态综合

CACHE块的状态转换

远程CACHE块的状态转换

存储块的状态转换

目录的三种结构

  1. 全映像目录

每一个目录项都包含一个N位(N为处理机的个数)的位向量,其每一位对应于一个处理机。

优点 : 处理比较简单,速度也比较快。

缺点 : 存储空间开销大,可扩放性差。

  1. 有限映像目录

优点 : 提高其可扩放性和减少目录所占用的空间

缺点 : 当同一数据的副本个数大于m时,必须做特殊处理。当目录项中的m个指针都已经全被占满,而某处理机又需要新调入该块时,就需要在其m个指针中选择一个,将之驱逐,以便腾出位置,存放指向新调入块的处理机的指针 。

  1. 链式目录

优点 : 既不限制副本的个数,又保持了可扩展性。

缺点 : 复杂