文章目录
- 并行与分布式 第7章 体系结构 上
- 7.1 多处理器结构
- 7.1.1 多处理器存储结构分类
- 7.1.2 非共享存储多处理器
- 7.1.3 共享存储多处理器
- 7.1.4 多核结构
- 7.2 Cache一致性问题
- 7.2.1数据共享引发的问题
- 7.2.2 Cache一致性协议
- 7.2.3 监听协议的实现
- 7.2.4目录式协议
并行与分布式 第7章 体系结构 上
7.1 多处理器结构
7.1.1 多处理器存储结构分类
非共享存储多处理器
- 每个处理器内存私有,逻辑上独立编址不共享,无Cache一致性问题
- 属于松散耦合系统,支持消息传递编程模型,如OpenMPI。
- 多个处理器存在于多个计算机中,实质是多进程MIMD问题
- 集群工作站(Cluster of Workstations,COW)/大规模并行处理机
(Massively Parallel Processing,MPP)
共享存储多处理器
- 所有处理器内存共享,逻辑上统一编址共享,有Cache一致性问题
- 属于紧密耦合系统,支持共享存储编程模型。如OpenMP
- 多个处理器存在于同一个计算机中,实质是多线程MIMD问题
7.1.2 非共享存储多处理器
工作站机群(COW)
• 每个节点是一套完整的计算机系统(SMP或Workstation),拥有本地
磁盘和独立完整的OS;
• 使用低成本的商用互联网络实现节点间的互联
• 作业通常由大量服务组成,服务有各自的私有地址空间
• 服务间采用RPC或Resful API互相调用,通过消息队列来协调工作流程
• 企业级应用,廉价、大规模、扩展性,MapReduce@Hadoop
三高系统目标
- 高可用:结构鲁棒性(多活实例)、数据可靠(热备与副本)、可重构系统(多点协同) (节点宕机与链路断路实验)
- 高性能:负载均衡(反向代理)、弹性计算(webservice)、低延迟(消息队列,分布式缓存) (峰值性能暴力测试)
- 高可信:数据加密,身份认证,权限控制
大规模并行处理机(MPP)
• 使用高宽带低延时的通信网络实现节点间的互联
• 具有较好的可扩放性,支持数百/千万级别的处理器规模
• 作业通常由大量进程组成,进程有各自的私有地址空间
• 进程采用消息传递机制,常采用阻塞报文交互方式
• 一个OS管理所有的硬件 超算
7.1.3 共享存储多处理器
集中式共享存储多处理器
• CSM:Centralized Shared-Memory Multiprocessor
• SMP:Symmetric Shared-Memory Multiprocessor
• UMA:Uniform Memory Access Multiprocessor
• 处理器访问存储器的时间是一样的(均匀的)
分布式共享存储多处理器
• DSM: Distributed Shared-Memory Multiprocessor
• AMP:Asymmetric Shared-Memory Multiprocessor
• NUMA:Non-Uniform Memory Access Multiprocessor
• 处理器访问存储器的时间是不一样的(非均匀)
7.1.4 多核结构
原有的多处理器是指多个CPU,每个CPU是单核的。多核技术是对多处理器技术的进一步扩展,多核技术是指在一枚处理器中集成两个或多个完整的计算内核,从而提高计算能力的技术。多核CPU采用了与原来的单CPU相同的硬件体系结构,显著提升计算能力的同时无需进行硬件技术的变更。
多核架构的研究内容
- 片内处理核心的个数
- Cache层次和容量分布
- 互连结构
- 晶体管使用的平衡度
典型多核结构:专用L1-Cache结构
早期多核处理器的一种组织架构,现在在嵌入式芯片中仍能见到。在这种组
织方式中,只有一级片内Cache,每个核带有自己的专用L1 Cache,分成指令Cache和数据Cache。这种组织的一个典型实例是ARM11 MPCore。
典型多核结构:专用L2-Cache结构
专用L2 Cache多核系统结构无片内共享Cache,在这种结构里,片内有
足够的可用面积容纳多个L2 Cache。这种组织的一个典型实例是AMD Opteron。
典型多核结构:共享L2-Cache结构
共享L2 Cache多核系统结构采用了和专用L2 Cache多核结构类似的存储空间分配,不同的是该处理器架构拥有共享L2 Cache,Intel的Core Duo处理器就是这种结构。
典型多核结构:共享L3-Cache结构
共享L3 Cache多核系统结构出于性能上的考虑,分离出一个独立的三级
Cache,每个CPU计算内核除了拥有专用的一、二级Cache外,还共享L3
Cache; Intel Core i7就是这种结构。
基于Cache结构的优点
- 全局数据在共享Cache级上不需要复制,内核间通信开销低
- 层次化Cache系统化减少整个系统的不命中概率,局部线程能使用更多的Cache空间
- Cache在芯片晶体管面积中占比增大,可以显著降低系统功耗
7.2 Cache一致性问题
7.2.1数据共享引发的问题
共享数据在共享存储多处理器结构中,只供一个处理器使用的数据称为私有数据,多个处理器共同使用的数据称为共享数据,各个处理器通过对共享数据的读写来实现通信。
缓存一致性问题
• 数据进入Cache,可减少平均访存时间和减轻对存储器的带宽要求。
• 私有数据进入Cache,不会引入新的问题
• 共享数据进入Cache,则同一存储块在多个处理器的Cache中有副本,当某个处理器对其Cache中的副本修改后,该副本与其他副本中的数据不一致,称为多处理机的Cache一致性问题
7.2.2 Cache一致性协议
Cache一致性协议的分类
- 写作废协议(Write invalidate)vs 写更新协议
·发生WtHit时,把所有其他副本全部作废,还是将新数据同步更新到所有副本 - 写直达协议 vs 替换写回协议
• 发生RdMiss/WtMiss时,去存储器获得最新数据,还是从远程cache获得最新数据 - 按写分配协议(经过cache)vs 不按写分配协议(绕过cache)
• 发生wt时,先调入本地cache再wt,还是直接到数据所在处wt
Cache一致性协议的两种实现方式
监听式协议
• 基于总线传递信息:1vN
• 存储器中数据块的共享状态信息分散保存在各个Cache中,物理上分布的各个存储器拼合成逻辑上统一的大存储器,物理上分布的cache状态信息拼合成逻辑上统一的Cache Hot状态。
目录式协议
• 基于互联网络传递信息:1v1
• 存储器中数据块的共享状态信息集中保存在本地目录中,物理上分布的各
个存储器拼合成逻辑上统一的大存储器,物理上分布的目录拼合成逻辑上
统一的大目录。
写更新 vs 写作废
• 占用总线进行状态信息传输的次数、内容和数据量
• 占用总线进行数据传输的次数、内容和数据量
• 对同一个数据,从对它的写操作到它的读操作之间的延迟
7.2.3 监听协议的实现
监听协议的实现保存信息
• 替换写回法Cache的修改位可直接实现一致性(修改位置1的必然是系统中唯一最新副本)
• Cache原有的有效位可以直接实现作废操作
• Cache原有的Tag可直接实现监听(地址Tag比对)
• 给每个Cache块增设一个共享位(独占为0共享为1)
监听协议的实现传递信息
RdMiss/WtMiss/Invalidate
监听协议状态、操作、时序
• 每个Cache控制器内嵌入有限状态机
• 操作包括:改变Cache状态,通过总线访问存储器,通过总线发送Cache作废
• 写访问串行化通过总线控制权的竞争来保证
每个cache包含四个部件
• Cache控制器
• Cache地址表(lookup table)
• Cache数据表(data table)
• Cache状态表
每个cache中的数据块只有三种状态:
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写)
Cache控制器有两个探针
• 一个探针监听本地CPU
• 一个探针监听共享总线
每个CPU只与本地cache控制器交互
• CPU不连入共享总线,所有远程访问均经过本地cache控制器实现
本地Cache控制器监听本地CPU的数据请求地址
本地Cache控制器通过总线监听其他远程Cache
监听式协议小结
• 两种情况下cache块写回存储器:发生M块替换,以及M变S之前
• 两种情况下Invalidate:收到Invalidate,以及收到WtMiss
• 调入新块时,优先从远程cache调,没有才从存储器调;多个远程cache可能都有share状态的副本,多个cache要竞争
• 直接利用系统中已经存在的总线和Cache状态位,实现容易,成本 较低
• 一个cache在总线上广播,其他cache监听,系统规模变大时,广播 操作将成为系统瓶颈,因此该协议的可扩放性较差
7.2.4目录式协议
目录:一种逻辑上集中的数据结构。对于存储器中的每一个可以调入Cache的数据块,在目录中设置一条目录项,用于记录该块的状态以及哪些Cache中有副本等相关信息。 对于任何一个数据块,都可以快速地在唯一的一个位置中找到相关的信息。
物理上分布式:适用分布式共享存储多处理器,目录与存储器均分布在各节点中,每个目录中仅保存对应本地存储器的cache状态信息,对不同目录的访问可以在不同节点上并行
分布式共享存储多处理器(增加目录)
节点分类及关系
• 请求节点A(发出访问请求地址K)
• 目录节点B(维护地址K对应的唯一存储器的目录,不分本地还是远程)
• 远程节点C(其cache中拥有对应副本,逻辑上的远程)
宿主
- 请求节点A通过K可以解析出唯一目录节点B,K高位为存储器节点索引,K低位为存储器节点内偏移,所有存储器采用高位交叉编址,对存储单元矩阵按列优先的方式进行编址,同一个存储器中的高log2m位都是相同的
- 目录节点B通过查询目录状态信息,可能从自己的存储器中取出数据向A提供服务,也可能会从共享集中选中一个远程节点C,从其Cache中取回副本然后向A提供数据服务
系统各部件状态
- 目录为存储器中的每个存储块记录状态,共有三种状态
• Uncached(所有cache中无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读模式)
• Exclusive(其拥有者cache具有唯一副本且存储器中的值是旧值,dirty,读写模式)
每个cache为本地缓存的数据块记录状态,共有三种状态
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读模式)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写模式)
每个cache为本地缓存的数据块记录状态,共有三种状态:
• Invalid(无副本)
• Shared(至少1副本且存储器中的值是最新值,clean,只读模式)
• Modified(唯一副本且存储器中的值是旧值,dirty,读写模式)
目录状态信息
• 目录状态信息是一种数据结构,用于记录哪些cache拥有数据块的副本。
• 最常用的实现技术是采用位向量:为被缓存的设置是每个主存块设置一个位向量,向量中的每一位对应于一个处理器,其长度与处理器的个数成正比。由位向量指定的处理机的集合称为共享集G。
• 处理器个数N,每个本地存储块个数m,则信息量m x N x N,O(N^2) • 可以仅对进入cache的块设置目录(动态法),也可以让目录项的位向量长度固定(静态法)
本地Cache控制器监听本地CPU的数据请求地址,根据该地址查询本地数据cache
远程节点C响应目录节点B
目录节点B响应A
目录节点B响应C
目录结构分为3类
• 全映像:每一个目录项都包含一个位向量,N个处理机,位向量N位,每一位对应于一个处理机,目录所占用的空间与N^2成正比。
• 有限映像:每一个目录项存放一个处理机号码,共有m个目录项,m为常数,N个处理机,则号码位数log_2^N,目录所占空间Nm log_2^N。(替换策略)
• 链式目录:每一个目录项存放一个指针链表项,链表的长度随着副本数的增减动态变化,平均长度m为常数级,N个处理机,目录所占空间Nm log_2^N。(单向链表 双向链表)
目录式协议小结
• 目录式协议中,cache的基本状态,cache块的状态转换规则,与
监听式协议在实质上是相同的
• 当对cache块进行写操作时,该cache块必须处于独占状态
• 对于任何一个处于共享态的块,目录节点的存储器的内容是更新过的最新值
• 监听式协议中的“消息广播”,改为“点对点通信”
• 当出现某cache块被替换写回时,被写回的旧块有唯一目录节点B1,被调入的新块有唯一目录节点B2,cache和B1、B2都是单线联系,B1和B2在逻辑上是不同的节点,当然地址分布重合也可能导致B1和B2落在相同的物理节点中