2 历史介绍 |
自从计算机时代开始就要求更强有力的计算系统。由于计算机技术--从计算机制造到电子技术,到开关技术,到固体电路,到集成电路,到ECL等的进步,这些得到了部分的满足。在高性能科学的市场上,对于向量处理器和奇异的电路技术(GaAs)已有显著的提高。较高价格的高容量扇区已集中在集成和经济规模。最近的RISC处理器设计与传统的主框设计及超计算机相比,是很高性能的。对新处理器,这主要是短设计周期的结果。
另一个趋势试图在一个计算系统使用n个处理器,并希望达到n倍的速度。从七十年代起研究并行计算机设计,到今天的许多“大规模”设计。术语“大规模并行“经常被松散地使用,意思是从二十左右到数以千计的处理器。
我们现在介绍后面要使用的一些术语。按着存储器存储方式,把高性能并行计算机体系结构分为:
共享存储
通过使用一种共享总线或网络,每个处理器可以直接存取存储器。由于总线或网冲突络,这种设计是不可扩展的。
虚拟共享存储器
每个处理器有局部处理器,但通过使用全局地址可以存取远程(remote)存储器。这个存取在一个交互网络上通过低延迟的消息发送被完成。因为存取远程的存储器需要较长的时间,所以有非一致性存储器存取。
分布存储
每个存储器通过局部地址空间存取局部存储器,存储器通过网络连接。对远程存储器的存取只能通过某些消息传递系统。
这些分类可能某种程度的重叠,但它是一个有用的分类。
在MIMD(Multiple Instruction Multiple Data)和SIMD(Single Instruction Multiple Data)硬件之间的区别是明显的。在前者,n个处理器独立地执行n个指令。一个SPMD机器使每个处理器同步地操作并服从单一的中心控制器的命令。
人们希望使用大多数并行机有效地解决一定范围的问题,所以购买它们。这是可能的,必须把一个给定的任务分布到机器上,以便每个处理器能始终忙于各个子问题。同时希望尽可能小的数据在处理器之间移动,因为和计算相比通讯是耗时的。经常在并行和通讯之间有一个折中。所以任何编程环境对数据的分配和通讯给以适当的控制,是重要的。
由于高级并行硬件及其与单处理器/单存储器结构的不同,只使用传统的编程语言并希望得到好的性能。两类编程模式已出现并得到用户(特别在较大的机器上)的广泛接受:
消息传递
在这种模式中,以一种标准编程语言书写的程序在每个处理器上执行,每个处理器能存取和其他处理器相连的存储器。一些消息传递环境已存在[5]。一般的环境是使用一个通讯库,在每个结点运行的程序调用这个通讯库。为在结点之间传输数据,编程者能使用这个库提供的发送和接受程序。一般地还有更复杂的集合操作。
数据并行
在这种模式中,一个单个程序控制所有处理器的分配和操作及数据分配。一种数据并行语言典型地支持数组操作,并允许全部数组用于表达式。在可得到处理器上,这个编译器负责产生分配数组元素的代码。每个处理器负责数组元素的子集,这些子集存储在它的局部存储器。
(当然有其他同样有效的方法:例如由Henri Bal[6]等人的设计,最近由FrancoisBodin等人发表的文章[7]。两篇文章包含许多有用的引用。)消息传递的应用只可能在MIMD硬件上,数据并行应用可以在MIMD和SIMD硬件上运行。一个容易混淆的术语是SPMD(Single Program MultipleData),其在过去的意思不同于现在。我们将使用术语SPMD表明一种编程风格,即同样的程序在MIMD系统的每个结点上执行,为通讯该系统使用一个消息传递库。
本文的目的是讨论数据并行编程,特别是HPF(High Performance Fortran), 现在我们集中讨论这些问题。
Copyright: NPACT |