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