现在的位置: 首页 > 综合 > 正文

并行程序设计基础

2013年01月11日 ⁄ 综合 ⁄ 共 1984字 ⁄ 字号 评论关闭

并行程序设计难的原因

Ø  技术先行,缺乏理论指导

Ø  程序的语法/语义复杂, 需要用户自已处理

任务/数据的划分/分配

数据交换

同步和互斥

性能平衡

Ø  并行语言缺乏代可扩展和异构可扩展, 程序移植困难, 重写代码难度太大

Ø  环境和工具缺乏较长的生长期,缺乏代可扩展和异构可扩展

并行语言的构造方法

3种并行程序设计方法比较:

 

方法

实例

优点

缺点

库例程

MPI, PVM

易于实现, 不需要新编译器

无编译器检查, 分析和优化

扩展

Fortran90

允许编译器检查、分析和优化

实现困难,需要新编译器

编译器注释

SGI powerC, HPF

介于库例程和扩展方法之间, 在串行平台上不起作用.

 

并行性问题

进程的同构性

SIMD: 所有进程在同一时间执行相同的指令

MIMD:各个进程在同一时间可以执行不同的指令

SPMD: 各个进程是同构的,多个进程对不同的数据执行相同的代码(一般是数据并行的同义语),常对应并行循环,数据并行结构,单代码

MPMD:各个进程是异构的, 多个进程执行不同的代码(一般是任务并行,或功能并行,或控制并行的同义语),常对应并行块,多代码

静态并行性和动态并行性:

静态并行性: 程序的结构以及进程的个数在运行之前(如编译时, 连接时或加载时)就可确定, 就认为该程序具有静态并行性.  

动态并行性: 否则就认为该程序具有动态并行性. 即意味着进程要在运行时创建和终止

进程编组

目的:支持进程间的交互,常把需要交互的进程调度在同一组中

一个进程组成员由:组标识符+ 成员序号唯一确定.

划分与分配

原则: 使系统大部分时间忙于计算, 而不是闲置或忙于交互; 同时不牺牲并行性(度).

划分: 切割数据和工作负载

分配:将划分好的数据和工作负载映射到计算结点(处理器)上

分配方式:

显式分配: 由用户指定数据和负载如何加载

隐式分配:由编译器和运行时支持系统决定

就近分配原则:进程所需的数据靠近使用它的进程代码

并行度(Degree of Parallelism, DOP):同时执行的分进程数.

并行粒度(Granularity): 两次并行或交互操作之间所执行的计算负载.

Ø  指令级并行

Ø  块级并行

Ø  进程级并行

Ø  任务级并行

并行度与并行粒度大小常互为倒数: 增大粒度会减小并行度.

增加并行度会增加系统(同步)开销

交互/通信问题

交互的类型

Ø  通信:两个或多个进程间传送数的操作

    通信方式:

共享变量

父进程传给子进程(参数传递方式)

消息传递

Ø  同步:导致进程间相互等待或继续执行的操作

 同步方式:

原子同步

控制同步(路障,临界区)

数据同步(锁,条件临界区,监控程序,事件)

Ø  聚集(aggregation):用一串超步将各分进程计算所得的部分结果合并为一个完整的结果, 每个超步包含一个短的计算和一个简单的通信或/和同步.

聚集方式:

归约

扫描

交互的方式

同步的交互: 所有参与者同时到达并执行交互代码C

异步的交互: 进程到达C后, 不必等待其它进程到达即可执行C

交互的模式

按交互模式是否能在编译时确定分为:

Ø  静态的

Ø  动态的

按有多少发送者和接收者参与通信分为

Ø  一对一:点到点(point topoint)

Ø  一对多:广播(broadcast),播撒(scatter)

Ø  多对一:收集(gather), 归约(reduce)

Ø  多对多:全交换(TatalExchange), 扫描(scan) , 置换/移位(permutation/shift)

 

五种并行编程风范

Ø  相并行(PhaseParallel)

一组超级步(相)

步内各自计算

步间通信、同步

BSP

方便差错和性能分析

计算和通信不能重叠

Ø  分治并行(Divideand Conquer Parallel)

父进程把负载分割并指派给子进程

递归

重点在于归并

分治设计技术(6.2)

难以负载平衡

Ø  流水线并行(PipelineParallel)

一组进程

流水线作业

流水线设计技术

Ø  主从并行(Master-SlaveParallel)

主进程:串行、协调任务

子进程:计算子任务

划分设计技术

与相并行结合

主进程易成为瓶颈

Ø  工作池并行(WorkPool Parallel)

初始状态:一件工作

进程从池中取任务执行

可产生新任务放回池中

直至任务池为空

易与负载平衡

临界区问题(尤其消息传递)

并行程序设计模式

隐式并行模型

Ø  概况:

程序员用熟悉的串行语言编程

编译器或运行支持系统自动转化为并行代码

Ø  特点:

语义简单

可移植性好

单线程,易于调试和验证正确性

效率很低

数据并行模型

Ø  概况:

SIMD的自然模型

局部计算和数据选路操作

Ø  特点:

单线程

并行操作于聚合数据结构(数组)

松散同步

单一地址空间

隐式交互作用

显式数据分布

消息传递模型

Ø  概况:

MPP, COW的自然模型

Ø  特点:

多线程

异步

多地址空间

显式同步

显式数据映射和负载分配

显式通信

共享变量模型

Ø  概况:

PVP, SMP, DSM的自然模型

Ø  特点:

多线程:SPMD,MPMD

异步

单一地址空间

显式同步

隐式数据分布

隐式通信

【上篇】
【下篇】

抱歉!评论已关闭.