2.1 数据并行的研究 |
数据并行编程风格的一种定义(用于HPF标准[8])是由一种并行环境所代表的一种风格:
通过这个我们说明一个单程序,其对数组定义操作,数组元素由编译器分配到各个处理器。实现可以允许处理器同步地操作,但许多程序结构将迫使同步-例如所有数组元素求和的计算。一个数据并行编译器(或环境)将提供某些基本的功能,以使大范围的算法有效地执行。一种数据并行语言将提供大多数--如果不是全部的--下列功能:
全数组元素的操作 例如 a = b + 2*c, 其中a,b和c是数组。
部分数组 指出一个数组的子集的能力:例如一行或一列。
条件操作 根据数组元素或逻辑值的判断条件,对数组元素某个集合的操作能力。这允许一些操作,象在数组内对非零元素取反。
归并 例如把一个数组中的全部元素相加求和的操作。
移位 沿着一个数组的给定的维移动元素。这对模板操作是很重要的,这应用在图象处理中,例如求解微分方程。
一般的通讯 例如从一个向量发送数据到一个三维数组的指定元素。
并行前缀/后缀操作 例如一个正在运行的全部操作。
对数据分配的控制 控制数据怎样在处理器间分配,控制对象的对准以减小通讯。
注意这些是高级操作,能被有效地实现。用编译器并行化在某个数组元素上定义操作的等量循环是更难的。
随着数据并行语言的研究,上面所列的越来越多的特点成为可得到的。最早的数据并行语言大约在1973年,关于ILLIAC IV[4]机器的。例如,IVTRAN[9]是以FORTRAN为基础,有一个并行DO结构(DO FOR ALL),其和IF同时使用表示并行中的条件操作。它也可以表示对给定的维进行计算,以暗示编译器数据怎样分配才能有最小的通讯。在同一年,一台数据并行ALFOL 60出现,是基于Glypnir[10]语言,它也有类数组表达式和一种并行IF语句。但是,并行对象被称为Super Words(swords),为匹配机器尺寸(处理器数)其被限制。后来,在1979年,基于Pascal的Actus[11],为定义一个更完全的操作集加入环和去尾移动(rotate,shift)以及归并操作。
最近,一些数据并行语言已出现,他们是一些语言的很好扩展。例如,并行Pascal[12](NASA MPP,1983),增强的Fortran-Plus[13](AMT DAP,1990)和Connection Machine C*[14](Thinking Machines.1990)。
虽然在九十年代初,出现一些语言,但是他们有太多的方言,并且也有依赖机器的一些特点。这意味着用户被局限于某个生产商,而且未来的用户不愿意学习一个特别的语言。在我们努力介绍一些标准时,HPF讨论组成立了,其肩负着定义一个数据并行Fortran标准的任务。
Copyright: NPACT |