并行架构的融合
并行机器已经开发出几种不同的架构。在本节中,我们将讨论不同的并行计算机架构及其融合的性质。
通信架构
并行架构通过通信架构增强了传统的计算机架构概念。计算机架构定义了关键的抽象(如用户系统边界和硬件软件边界)和组织结构,而通信架构定义了基本的通信和同步操作。它还解决了组织结构问题。
![抽象层](/parallel_computer_architecture/images/layers_of_abstraction.jpg)
编程模型是最顶层。应用程序是用编程模型编写的。并行编程模型包括 −
- 共享地址空间
- 消息传递
- 数据并行编程
共享地址编程就像使用公告板一样,一个人可以通过在特定位置发布信息与一个或多个人进行交流,该位置由所有其他个人共享。个人活动通过记录谁在做什么任务来协调。
消息传递就像电话呼叫或信件,特定接收者从特定发送者接收信息。
数据并行编程是一种有组织的合作形式。在这里,几个人同时对数据集的不同元素执行操作并在全球范围内共享信息。
共享内存
共享内存多处理器是并行机器中最重要的一类。它为多道程序工作负载提供了更好的吞吐量,并支持并行程序。
![共享内存多处理器](/parallel_computer_architecture/images/shared_memory_multiprocessor.jpg)
在这种情况下,所有计算机系统都允许一个处理器和一组 I/O 控制器通过某种硬件互连访问一组内存模块。通过添加内存模块可以增加内存容量,通过向 I/O 控制器添加设备或添加额外的 I/O 控制器可以增加 I/O 容量。可以通过等待更快的处理器可用或添加更多处理器来增加处理能力。
所有资源都围绕中央内存总线组织。通过总线访问机制,任何处理器都可以访问系统中的任何物理地址。由于所有处理器与所有内存位置的距离都相等,因此所有处理器在内存位置上的访问时间或延迟都相同。这称为对称多处理器。
消息传递架构
消息传递架构也是并行机的一个重要类别。它以显式 I/O 操作的形式提供处理器之间的通信。在这种情况下,通信是在 I/O 级别而不是内存系统上组合的。
在消息传递架构中,用户通信通过使用操作系统或库调用来执行,这些调用执行许多较低级别的操作,其中包括实际的通信操作。因此,编程模型与物理硬件级别的通信操作之间存在距离。
发送和接收是消息传递系统中最常见的用户级通信操作。发送指定本地数据缓冲区(要传输)和接收远程处理器。接收指定发送进程和将放置传输数据的本地数据缓冲区。在发送操作中,标识符或标签附加到消息,接收操作指定匹配规则,如来自特定处理器的特定标签或来自任何处理器的任何标签。
发送和匹配接收的组合完成了内存到内存的复制。每一端都指定其本地数据地址和成对的同步事件。
融合
硬件和软件的发展已经淡化了共享内存和消息传递阵营之间的明确界限。消息传递和共享地址空间代表两种不同的编程模型;每种模型都为共享、同步和通信提供了透明的范例。然而,基本的机器结构已经向一个共同的组织融合。
数据并行处理
另一类重要的并行机被称为 − 处理器阵列、数据并行架构和单指令多数据机。编程模型的主要特点是可以对大型常规数据结构(如数组或矩阵)的每个元素并行执行操作。
数据并行编程语言通常通过查看一组进程(每个处理器一个进程)的本地地址空间来实施,从而形成一个显式全局空间。由于所有处理器都相互通信,并且存在所有操作的全局视图,因此可以使用共享地址空间或消息传递。
基本设计问题
仅开发编程模型无法提高计算机的效率,仅开发硬件也无法做到这一点。但是,计算机架构的发展可以改变计算机的性能。我们可以通过关注程序如何使用机器以及提供哪些基本技术来理解设计问题。
在本节中,我们将讨论通信抽象和编程模型的基本要求。
通信抽象
通信抽象是编程模型和系统实现之间的主要接口。它就像指令集一样,提供了一个平台,使同一个程序可以在许多实现上正确运行。此级别的操作必须简单。
通信抽象就像硬件和软件之间的契约,允许彼此灵活地改进而不影响工作。
编程模型要求
并行程序有一个或多个线程对数据进行操作。并行编程模型定义了线程可以命名哪些数据,可以对命名数据执行哪些操作,以及操作遵循的顺序。
为了确认程序之间的依赖关系得到执行,并行程序必须协调其线程的活动。