多处理器和多计算机
本章将讨论多处理器和多计算机。
多处理器系统互连
并行处理需要使用高效的系统互连,以便在输入/输出和外设、多处理器和共享内存之间进行快速通信。
分层总线系统
分层总线系统由一个总线层次结构组成,该层次结构连接计算机中的各种系统和子系统/组件。每个总线由多个信号线、控制线和电源线组成。不同的总线,如本地总线、背板总线和I/O总线,用于执行不同的互连功能。
本地总线是在印刷电路板上实现的总线。背板总线是一种印刷电路,在其上使用许多连接器来插入功能板。连接输入/输出设备到计算机系统的总线称为I/O总线。
交叉开关和多端口内存
交换网络在输入和输出之间提供动态互连。小型或中型系统大多使用交叉开关网络。如果可以解决增加的延迟问题,多级网络可以扩展到更大的系统。
交叉开关和多端口内存组织都是单级网络。虽然单级网络的构建成本较低,但可能需要多次传递才能建立某些连接。多级网络具有多个交换盒级。这些网络应该能够将任何输入连接到任何输出。
多级和组合网络
多级网络或多级互连网络是一类高速计算机网络,主要由网络一端上的处理单元和另一端上的存储单元以及连接它们的交换单元组成。
这些网络被应用于构建更大的多处理器系统。这包括Omega网络、蝴蝶网络等等。
多计算机
多计算机是分布式内存MIMD架构。下图显示了多计算机的概念模型:
多计算机是消息传递机器,它们应用分组交换方法来交换数据。在这里,每个处理器都有一个私有内存,但没有全局地址空间,因为处理器只能访问自己的本地内存。因此,通信不是透明的:程序员必须在其代码中显式地放置通信原语。
没有全局可访问的内存是多计算机的一个缺点。这可以通过使用以下两种方案来解决:
- 虚拟共享内存 (VSM)
- 共享虚拟内存 (SVM)
在这些方案中,应用程序程序员假设一个全局可寻址的大型共享内存。如果需要,应用程序进行的内存引用将转换为消息传递范例。
虚拟共享内存 (VSM)
VSM是硬件实现。因此,操作系统的虚拟内存系统在VSM之上透明地实现。因此,操作系统认为它正在一台具有共享内存的机器上运行。
共享虚拟内存 (SVM)
SVM是操作系统级别的软件实现,并得到处理器内存管理单元 (MMU) 的硬件支持。在这里,共享的单元是操作系统内存页面。
如果处理器寻址特定的内存位置,则MMU会确定与内存访问关联的内存页面是否在本地内存中。如果页面不在内存中,在普通的计算机系统中,它将由操作系统从磁盘交换进来。但在SVM中,操作系统从拥有该特定页面的远程节点获取该页面。
多计算机的三代
在本节中,我们将讨论多计算机的三代。
过去的设计选择
在选择处理器技术时,多计算机设计人员选择低成本的中粒度处理器作为构建块。大多数并行计算机都是使用标准的现成微处理器构建的。为多计算机选择了分布式内存,而不是使用共享内存,这将限制可扩展性。每个处理器都有自己的本地内存单元。
对于互连方案,多计算机具有消息传递、点对点直接网络,而不是地址交换网络。对于控制策略,多计算机的设计人员选择异步MIMD、MPMD和SMPD操作。加州理工学院的Cosmic Cube(Seitz,1983)是第一代多计算机中的第一个。
现在和未来的发展
下一代计算机从使用全局共享虚拟内存的中粒度到细粒度多计算机发展而来。第二代多计算机目前仍在使用。但使用更好的处理器(如i386、i860等),第二代计算机已经发展了很多。
第三代计算机是下一代计算机,其中将使用VLSI实现的节点。每个节点可能具有一个14-MIPS处理器、20-Mbytes/s路由通道和16 KB的RAM集成在一个芯片上。
英特尔Paragon系统
以前,同构节点用于制造超立方体多计算机,因为所有功能都由主机提供。因此,这限制了I/O带宽。因此,为了有效地或以高吞吐量解决大型问题,无法使用这些计算机。英特尔Paragon系统旨在克服这一难题。它将多计算机变成了网络环境中具有多用户访问的应用程序服务器。
消息传递机制
多计算机网络中的消息传递机制需要特殊的硬件和软件支持。在本节中,我们将讨论一些方案。
消息路由方案
在采用存储转发路由方案的多计算机中,数据包是最小的信息传输单元。在虫洞路由网络中,数据包进一步细分为微块。数据包长度由路由方案和网络实现确定,而微块长度受网络大小的影响。
在**存储转发路由**中,数据包是信息传输的基本单元。在这种情况下,每个节点都使用数据包缓冲区。数据包通过一系列中间节点从源节点传输到目标节点。延迟与源和目标之间的距离成正比。
在**虫洞路由**中,从源节点到目标节点的传输是通过一系列路由器完成的。同一数据包的所有微块都以流水线方式以不可分割的序列传输。在这种情况下,只有头部微块知道数据包的去向。
死锁和虚拟通道
虚拟通道是两个节点之间的逻辑链接。它由源节点和接收节点中的微块缓冲区以及它们之间的物理通道形成。当为一对分配物理通道时,一个源缓冲区与一个接收缓冲区配对以形成一个虚拟通道。
当所有通道都被消息占用并且循环中的任何通道都没有释放时,将发生死锁情况。为了避免这种情况,必须遵循死锁避免方案。