并行程序设计基础
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(a) 使用库例程构造并行程序
#pragma local(i) {
id=my_process_id();
# pragma pfor iterate(i=0;N;1)
p=number_of_processes();
for (i=0;i<N;i++) A[i]=b[i]*b[i+1];
for ( i= id; i<N; i=i+p) A[i]=b[i]*b[i+1];
▪ Parallel computing can only be widely successful if parallel software is able to meet expectations of the users, such as:
▪ provide architecture/processor type transparency; ▪ provide network/communication transparency; ▪ be easy-to-use and reliable; ▪ provide support for fault-tolerance; ▪ accommodate heterogeneity; ▪ assure portability; ▪ provide support for traditional high-level languages; ▪ be capable of delivering increased performance; and finally, ▪ to provide parallelism transparency.
8
3 并行性问题
并行块 parbegin S1 S2 S3 …….Sn parend S1 S2 S3 …….Sn可以是不同的代码 并行循环: 当并行块中所有进程共享相同代码时 parbegin S1 S2 S3 …….Sn parend S1 S2 S3 …….Sn是相同代码
简化为 parfor (i=1; i<=n, i++) S(i)
3
Parallel Programming is a Complex Task
▪ The development of parallel applications largely dependent on the availability of adequate software tools and environments.
9
3 并行性问题
SPMD程序的构造方法
用单代码方法说明SPMD
要说明以下SPMD程序: parfor (i=0; i<=N, i++) foo(i)
Leabharlann Baidu
# pragma synchronize
barrier();
# pragma pfor iterate (i=0; N; 1)
for (i= id; i<N; i=i+p) c[i]=A[i]+A[i+1]; 例子: MPI,PVM, Pthreads
for (i=0;i<N;i++)c[i]=A[i]+A[i+1]; }
4
Users’ Expectations from Parallel Programming Environments
▪ Currently, only few expert developers have the knowledge of programming parallel and distributed systems.
方法
实例
优点
缺点
库例程 MPI, PVM 扩展 Fortran90 编译器注释 SGI powerC, HPF
易于实现, 不需要新编 无 编 译 器 检 查 ,
译器
分析和优化
允许编译器检查、分析 实现困难,需要新
和优化
编译器
介于库例程和扩展方法之间, 在串行平台 上不起作用.
7
3 并行性问题
3.1 进程的同构性 ❖SIMD: 所有进程在同一时间执行相同的指令 ❖MIMD:各个进程在同一时间可以执行不同的指令
并行程序设计基础
并行程序设计基础
▪ 并行程序设计概述 ▪ Approaches for Parallel
Programs ▪ Parallel Programming Model ▪ Parallel Programming Paradigm
2
并行程序设计概述 ▪ 并行程序设计难的原因 ▪ 并行程序构造方法 ▪ 并行性问题 ▪ 交互/通信问题
5
2 并行程序构造方法
串行代码段
(c) 加编译注释构造并行程序的方法
for ( i= 0; i<N; i++ ) A[i]=b[i]*b[i+1];
#pragma parallel
for (i= 0; i<N; i++) c[i]=A[i]+A[i+1];
#pragma shared(A,b,c)
(b) 扩展串行语言
例子:SGI power C
my_process_id,number_of_processes(), and barrier()
A(0:N-1)=b(0:N-1)*b(1:N)
c=A(0:N-1)+A(1:N)
例子: Fortran 90
6
2 并行程序构造方法
三种并行程序构造方法比较
▪ Parallel software developers handle issues/challenges such as:
▪ Non-determinism, communication, synchronization, data partitioning and distribution, load-balancing, faulttolerance, heterogeneity, shared or distributed memory, deadlocks, and race conditions.
➢SPMD: 各个进程是同构的,多个进程对不同的数据执 行相同的代码(一般是数据并行的同义语) 常对应并行循环,数据并行结构,单代码 ➢MPMD:各个进程是异构的, 多个进程执行不同的代码 (一般是任务并行,或功能并行,或控制并行的同义语) 常对应并行块,多代码 要为有1000个处理器的计算机编写一个完全异构的并行 程序是很困难的