欢迎来到天天文库
浏览记录
ID:40202196
大小:1.63 MB
页数:76页
时间:2019-07-25
《并行计算共享存储并行程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第八章共享存储并行程序设计共享存储多处理机系统:存储器任一单元均可被任一处理器访问到。单地址空间是指存储器中每一个位置在整个的存储器地址范围内有一个唯一的地址。通常,共享存储程序设计比消息传递程序设计更加容易、方便,因为进程间的数据交换可利用共享存储器来实现。但共享存储程序设计需要程序设计者使用特殊的机制(如临界段等)来协调各个进程对共享数据的访问。主要内容共享存储多处理机系统的程序设计方法共享数据的创建和访问并行程序设计语言和并行结构的描述OpenMP----利用编译制导实现的并行程序设计Pthread----基于多线程的并行程序设计一、共享存储多处理机系统的程序设计方法常用
2、的程序设计方法并发进程的创建并发线程的创建使用单总线相连的共享存储多处理机这种体系结构只适应于较少处理器的系统总线的带宽限制了其上的处理器的通信效率使用交叉开关网的共享存储多处理机该体系结构极大地增加了处理器与存储器通信的带宽但这种结构的系统造价昂贵共享存储器系统分UMA和NUMA访问模式1.共享存储系统中常用的程序设计方法使用全新的并行程序设计语言扩充现有的顺序程序设计语言的语法,以构成新的并行程序设计语言对现有的顺序程序设计语言使用例程库使用带有并行编译制导预处理器的顺序程序设计语言—这种编译制导用来说明共享变量和程序中可并行的部分使用重量级进程使用线程2.并发进程的创建操
3、作系统常常是基于进程概念的处理机时间被多进程共享时,进程往往分时占用处理机时间;当进程由于某些原因(如等待一个I/O操作)被阻塞时,操作系统会提供将其调出的运行机制;并发进程概念用于并行程序设计,而它实现了真正的进程的并发。2.并发进程的创建在UNIX操作系统中,使用FORK-JOIN结构描述并发进程的结构在FORK-JOIN结构中:FORK语句用来创建新进程JOIN语句用来等待指定进程的终止FORK-JOIN结构FORK-JOIN结构与消息传递系统中的spawn/exit相同UNIX系统调用UNIX系统利用fork()创建新进程,对于join的实现则是利用wait()和exi
4、t()来实现的。SPMD模式::pid=fork();//fork()-创建一个新进程子进程和父进程执行的代码段if(pid==0)exit(0);//exit()-终止一个进程elsewait(0);//wait()-挂起进程直到收到://其子进程终止的信号UNIX系统调用主、从进程执行代码不同的情况下的SPMD模式::pid=fork();//fork()-创建一个新进程if(pid==0){从进程执行的代码段}else{主进程执行的代码段}if(pid==0)exit(0);//exit()-终止一个进程elsewait(0);//wait()-挂起进程直到收到://其子
5、进程终止的信号3.并发线程的创建利用fork创建的进程是一个重量级进程,它是一个完全独立的程序,有自己的变量栈、堆栈和存储器空间;所有线程共享进程的同一存储器空间和进程的全局变量。进程与线程的差别从静态角度看,进程对应一个独立的程序;而线程对应一个程序中不同的、可并行执行的过程。进程在时间和空间上的开销都很昂贵进程除拥有自己的存储器空间、变量和堆栈外,要从其父进程进行的完全拷贝;而所有线程共享进程的同一存储器空间和进程的全部变量线程的创建时间比进程少3个数量级线程的同步比进程更高效:进程同步需要系统操作的支持;而线程的同步只需通过访问共享变量来实现主要内容共享存储多处理机系统的
6、程序设计方法共享数据的创建和访问并行程序设计语言和并行结构的描述OpenMP----利用编译制导实现的并行程序设计Pthread----基于多线程的并行程序设计二、共享数据的创建和访问共享存储程序设计的主要特征是使各个处理器能够直接访问共享存储器来实现数据交换和其它通信及同步操作共享数据的创建在基于共享存储的并发进程系统中,系统为实现共享数据往往提供一批系统调用(系统例程)在多线程模型中,则不需要显式地创建共享数据,在主程序(主线程)的顶部声明的变量是全局变量,可被所有线程使用二、共享数据的创建和访问共享数据的访问如果进程(线程)要重写共享数据,则需认真考虑。假设两个进程要将共
7、享数据项x的值增1。对应低级语言代码为:读x单元的内容计算x+1将结果写回x单元高级语言代码为:x++;或x=x+1;进程1readxcomputex+1writetox进程2readxcomputex+1writetox若两进程执行每一步操作的时间关系不同,则有可能使操作的结果不相同。进程同时执行与不同时执行访问共享数据可归结为共享资源的访问的问题共享资源的访问临界区、临界段(criticalsection)临界区是一种能够保证每次仅允许一个进程访问某个特定的共享资源的代码段。即:在任何时
此文档下载收益归作者所有