系统架构接口

2.1 芯片多处理器(CMP)中的共享内存网络

2.1.1 缓存一致性协议对网络性能的影响2.1.2 缓存一致性协议对片上网络的要求2.1.3 协议级死锁

系统架构接口

在过去 15 年里,单处理器核心计算机芯片已经让位于多核芯片。这些多核和众核系统已成为计算机系统的基石,标志着系统设计和工程实现的方式发生了重大转变。通常认为多核架构拥有较少的处理器计算核心,每个计算核心有更强大的处理能力和更优化的流水线设计;而众核架构拥有更多的处理器计算核心,每个核心的处理能力较弱,但针对大规模并行计算进行了专门的优化。

对于大带宽多核众核设计,处理器和存储器件之间的通信瓶颈可能会造成整个片上系统的数据带宽受限。因此整体性能的提升很大程度上取决于如何解决这一瓶颈。除此之外,多个计算单元和多个核之间的高效通信也是提升众核系统性能的关键因素。

在本章中,我们将探讨片上网络构成关键骨干的三种主要计算机系统类型:高端服务器和嵌入式设备中的共享内存芯片多处理器 (Chip Multiprocessor, CMP),基于消息传递接口(Message Passing Interface, MPI)技术的多处理器系统和应用于移动消费市场的多处理器片上系统(MPSoC)。简要概述了一般架构及其各自的通信要求。片上多核系统主要有CMP和MPSoC两种架构,CMP主要用于高性能通用计算,适合完成大规模并行计算;MPSoC主要针对应用场景具体设计,多应用于嵌入式设备。

2.1 芯片多处理器(CMP)中的共享内存网络

在现代对称多处理器架构(Symmetric Multiprocessor, SMP)SMP设计中,分区全局地址空间(partitioned global address space, PGAS)很常见,也就是说地址的高位决定了内存位于哪个节点。相比之下,消息传递范式要求程序员明确地在节点和地址空间之间移动数据。在大规模并行架构中,同时利用这两种方法的混合方法很常见。在这一节,我们主要讨论共享内存CMP。

和SMP一样,CMP通常也有一个共享的全局地址空间,但和SMP不同的是,CMP可能有不一致的内存访问延迟。在共享内存模型中,通信是通过load、store指令产生的,对程序员并不可见。逻辑上来说所有处理器都访问相同的共享内存,但物理上来说,需要使用缓存来提升性能,但在这种设计下缓存一致性的设计就变得复杂,缓存一致性协议决定了哪些通信是必要的。

下图是一个典型的有64节点的共享内存CMP架构,每个节点都包括一个处理器、私有的L1缓存、以及一个可能是私有或共享的L2缓存,同时可能存在一个所有处理器共享的L3缓存。片上互连需求取决于缓存一致性协议和多级缓存结构两个因素。

2.1.1 缓存一致性协议对网络性能的影响

下图分别展示了基于监听的协议和基于目录的协议中一次由缓存未命中cache miss引起的数据读请求。

监听:发生缓存未命中则发送数据请求到相应的保序点即内存控制器,其次内存控制器将数据请求广播至所有片上节点,然后拥有数据副本的节点响应,将数据发送至请求者节点。目录:发生缓存未命中则发送数据请求到该地址对应的目录基节点,目录基节点根据该数据请求的地址,找到持有该数据的节点并发送请求消息,持有该数据的节点发送数据响应至请求者节点。

在基于广播的协议中,一致性请求会被发往所有的片上节点,导致很高的带宽需求。而数据响应是点对点通信且对响应顺序无要求。因此广播系统可以采用两套物理网络实现:一套互连网络用语实现有序一致性请求通信,另一套网络实现大带宽且无序的数据传输。还可以采用多个VC保证一致性通信有序进行,一致性请求和数据响应分别在独立的VC中传送。 图2.2a展示了广播协议中一次由缓存未命中(cache miss)引起的数据读请求,分为三个阶段:

某处理器节点发生缓存未命中,并发送数据请求到相应的保序点(ordering point),图中为内存控制器。

内存控制器将数据请求广播至所有的片上节点。

拥有所请求的数据副本的节点进行响应,将所请求的数据发送请求者节点。(如果所有节点都没有,则内存控制器由内存读取并发出数据响应) 在基于目录的协议中,使用目录不依赖于隐式的网络有序通信,并且可应用于任意的网络拓扑。基于点对点的消息通信,减少了所需的一致性通信数量具有更好的可扩展性。对于每一个缓存行,目录记录了当前片上系统持有它副本的所有节点,以及这个缓存行的一致性状态信息。因此通过维护一个被各个节点共享的列表,某个缓存数据的一致性请求(如无效化操作)就不需要广播到所有节点,而只需要播送到具有数据副本的节点。 地址空间中的各个地址也可以被交织分配(interleaved)到多个目录节点,其中每个地址都会分配到一个目录节点,这个目录节点称为这个地址的目录基节点。每个目录节点管理若干个地址,每个地址只属于唯一的目录基节点。目录基节点负责管理这些地址对应的缓存一致性信息,并按序处理发生在这些地址上的一致性请求。图2.2b展示了基于目录的协议中一次由缓存未命中引起的数据读请求,分为三个阶段:

某处理器节点发生缓存未命中,并发送数据请求到该地址对应的目录基节点。

目录基节点根据数据请求的地址,找到持有该数据的节点并发送请求消息。

持有该数据的节点发送数据响应至请求者节点。 这个过程中,数据请求不像基于广播协议那样,广播至所有节点,而仅仅播送到单个节点,从而降低了带宽需求。 目录的一致性状态信息保存在内存中,避免频繁访问内存,通常使用片上的目录缓存(directory cache)来存储最近访问过的目录信息。

2.1.2 缓存一致性协议对片上网络的要求

一致性协议需要几种类型的信息:单播(unicast)、多播(multicast)和广播(broadcast)。目录协议中,大多数请求都是单播的,因此对网络的带宽要求比较低,但这类协议不能完全杜绝一对多的多播通信,如目录节点可能会对所有共享某个缓存数据块的节点发送无效化操作;而广播协议对于带宽的要求较高,因为一致性请求是全局广播的,同时还需要收集全部节点的确认消息来保证请求的有序性,数据响应消息是点对点单播通信,且不需要保持有序。

一致性协议通常也需要两种消息大小。第一种用于不传输数据的一致性请求和响应,包括一个内存地址和一个请求/响应一致性命令,不包含数据因此长度较短。第二种用于数据传输,包括一个完整的缓存行(通常为64B)和地址。

2.1.3 协议级死锁

共享内存系统要求网络不存在协议级死锁,下图展示了一种协议级死锁。协议可能需要几个不同的消息类别,一个类别中的请求消息不会导致同一类别中另一个请求消息的产生,但可以触发一个不同类别的消息。当不同类的消息之间存在资源依赖时,就会出现死锁。这里我们描述了三个类别:请求(request)、干预(intervention)、响应(response)。请求消息包括load、store、更新和写回。干预是由目录发送的消息,请求将修改后的数据传输到新的节点。响应包括无效确认、否定确认(表明请求失败)和数据消息。

可以使用多个虚拟通道来避免协议级死锁,如Alpha 21364为每个消息类别分配了一个虚拟通道,不同类的消息在不同的数据通道中独立传输,可以打破请求和响应之间的循环依赖。

推荐链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: