第2章并行编程基础精选文档.ppt
《第2章并行编程基础精选文档.ppt》由会员分享,可在线阅读,更多相关《第2章并行编程基础精选文档.ppt(82页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第2章 并行编程基础本讲稿第一页,共八十二页第第2章章 并行编程基础并行编程基础2.1 2.1 并行编程综述并行编程综述2.2 2.2 进程、任务和线程进程、任务和线程2.3 2.3 并行性问题并行性问题2.4 2.4 交互交互/通信问题通信问题2.5 2.5 并行程序中的语义问题并行程序中的语义问题本讲稿第二页,共八十二页并行编程基础并行编程基础并行编程综述并行编程综述并行编程缘何艰难并行编程缘何艰难1、并行软件一直落后的主要原因是并行编程比起顺序编程来是一个更复杂的智并行软件一直落后的主要原因是并行编程比起顺序编程来是一个更复杂的智力活动。它包含了顺序编程中的所有问题,还要加上在智力上更具
2、挑战性的力活动。它包含了顺序编程中的所有问题,还要加上在智力上更具挑战性的许多其他问题。许多其他问题。2、顺序编程只有一个基本模型(冯诺依曼模型),而、顺序编程只有一个基本模型(冯诺依曼模型),而并行编程中却有许多不同并行编程中却有许多不同的模型。的模型。3、开发顺序程序的软件环境工具,如编译器、调试程序、以及特征分析器,要、开发顺序程序的软件环境工具,如编译器、调试程序、以及特征分析器,要比并行程序的先进得多。比并行程序的先进得多。4、比起并行编程来,有更多的人一直在从事顺序编程而且已有长得多的时间。、比起并行编程来,有更多的人一直在从事顺序编程而且已有长得多的时间。对顺序编程由于已积累了大
3、量知识,包括过去所发现的错误以及所得到的教对顺序编程由于已积累了大量知识,包括过去所发现的错误以及所得到的教训,因此更为成熟。训,因此更为成熟。本讲稿第三页,共八十二页2.1 并行编程综述并行编程进展并行编程进展面向超级计算机的编程模型正集中趋向于两种模型:面向超级计算机的编程模型正集中趋向于两种模型:1 1)适用于)适用于PVPPVP、SMPSMP、DSMDSM的单地址空间的的单地址空间的共享变量共享变量模型模型;2 2)适用于)适用于MPPMPP和机群的多地址空间的和机群的多地址空间的消息传递模型消息传递模型。SIMD模型原已从主流超级计算机中淡出,但对于如同语言、图模型原已从主流超级计算
4、机中淡出,但对于如同语言、图象和多媒体处理的专用嵌入式那些应用仍非常有用。象和多媒体处理的专用嵌入式那些应用仍非常有用。-尤其是多核芯片的问世,以尤其是多核芯片的问世,以SIMD模型模型为基础,未来的通用计算机编为基础,未来的通用计算机编程将带来很大的改进程将带来很大的改进。本讲稿第四页,共八十二页并行编程综述并行编程进展并行编程进展 高层并行编程模型正集中趋向于高层并行编程模型正集中趋向于4种标准模型:种标准模型:1 1)数据并行数据并行(如(如HPFHPF)2 2)消息传递消息传递(如(如PVMPVM和和MPIMPI)3 3)共享变量共享变量(如(如ANSI X3H5ANSI X3H5)4
5、 4)蕴式并行模型蕴式并行模型,用户只需编写顺序程序,其中的蕴式并行性由,用户只需编写顺序程序,其中的蕴式并行性由并行化编译器(如并行化编译器(如KapKap)进行析取。)进行析取。图图1吞吐率处理吞吐率处理 减少单个并行应用的响应时间减少单个并行应用的响应时间 增加多个独立顺序作业的系统吞吐率增加多个独立顺序作业的系统吞吐率本讲稿第五页,共八十二页并行编程基础并行编程基础并行编程环境并行编程环境 并行处理系统的组成部分并行处理系统的组成部分 图图2并行编程环境工具:并行编程环境工具:作业管理工具作业管理工具调试工具调试工具性能工具性能工具本讲稿第六页,共八十二页并行编程基础并行编程基础 并行
6、编程方法并行编程方法 目前在实际的并行计算中广泛使用的并行编程模型有目前在实际的并行计算中广泛使用的并行编程模型有4种:种:蕴蕴式并行模型、数据并行、式并行模型、数据并行、消息传递、共享变量消息传递、共享变量 这些并行编程模型均已在实际的并行编程系统中得到实现,绝这些并行编程模型均已在实际的并行编程系统中得到实现,绝大部分为扩展的大部分为扩展的Fortran或扩展或扩展C。对于顺序编程有三种扩展并行性的方法:对于顺序编程有三种扩展并行性的方法:库子程序、新语言构造库子程序、新语言构造、编译器命令编译器命令。本讲稿第七页,共八十二页并行编程基础并行编程基础 库子程序:库子程序:除了在顺序语言中可
7、用的标准库外,除了在顺序语言中可用的标准库外,加入一组新的库函数,加入一组新的库函数,以支持并行化和交互操作。以支持并行化和交互操作。这种库的实例包括这种库的实例包括:消息传递消息传递(MPI)和和 多线程库多线程库(POSIX Pthreads)。新构造:新构造:扩展程序设计语言扩展程序设计语言使其具有某些新构造,以支持并行化和交使其具有某些新构造,以支持并行化和交互。例如互。例如Fortran 90中密集数报操作。中密集数报操作。编译器命令:编译器命令:程序设计语言不变,但程序设计语言不变,但加入称为编译器命令加入称为编译器命令(或(或pragmas)的格式化注解的格式化注解。本讲稿第八页
8、,共八十二页三种并行化方式举例三种并行化方式举例:for(i=0;iN;i+)Ai=bi*bi+1;for(i=0;iN;i+)ci=Ai+Ai+1;(a)(a)串行代码段串行代码段三种并行化方式举例三种并行化方式举例本讲稿第九页,共八十二页并行编程基础并行编程基础所有所有3 3个程序均执行相同的如图个程序均执行相同的如图a a所示的串行所示的串行C C代码的计算。代码的计算。(1)图图b说明了说明了库方法库方法 其中两个循环被分配到其中两个循环被分配到P个过程并行执行个过程并行执行。由两个库函数:。由两个库函数:my_process_id()和和number_of_processes()开发
9、并行性。开发并行性。路障路障barrier()函数保证在第函数保证在第1个循环后,所有进程同步,个循环后,所有进程同步,这样第这样第2个循个循环将使用在第一个循环中已更新的数组环将使用在第一个循环中已更新的数组A的正确值。的正确值。本讲稿第十页,共八十二页 id=my_process_id();p=number_of_processes();for(i=id;iN;i=i+p)Ai=bi*bi+1;barrier();for(i=id;iN;i=i+p)ci=Ai+Ai+1;(b)(b)使用使用库例程库例程的等效并行代码的等效并行代码三种并行化方式三种并行化方式本讲稿第十一页,共八十二页并行编
10、程基础并行编程基础(2)若使用新的语言构造)若使用新的语言构造 使用新的语言构造使用新的语言构造,上述的这些并行操作就可变得相当简单,如图上述的这些并行操作就可变得相当简单,如图c所示。所示。Fortran 90的的数组赋值构造数组赋值构造A(0:N-1)=b(0:N-1)*b(1:N)可在可在1条数条数组赋值语句中完成组赋值语句中完成N个元素乘法和赋值个元素乘法和赋值。在两个数组赋值之间,不。在两个数组赋值之间,不需要显式同步,因为需要显式同步,因为Fortran 90语句是语句是松散同步松散同步:在下一语句开:在下一语句开始执行前,前一语句中的操作必须都已完成。始执行前,前一语句中的操作必
11、须都已完成。本讲稿第十二页,共八十二页my_process_id(),number_of_processes(),and;barrier();A(0:N1)=b(0:N1)*b(1:N);C=A(0:N1)+A(1:N);(c)Fortran 90 (c)Fortran 90 中使用中使用数组操作数组操作的等效代码的等效代码三种并行化方式三种并行化方式本讲稿第十三页,共八十二页并行编程基础并行编程基础(3)图图d编译器命令方法编译器命令方法 由并行由并行pragma指明下一语句(以块形式出现)应并行执行。指明下一语句(以块形式出现)应并行执行。由共由共享享(shared)pragma说明说明3
12、个数组变量为并行进程共享,而局部个数组变量为并行进程共享,而局部pragma则用来指明每个进程有一个局部的变量。则用来指明每个进程有一个局部的变量。SGI的的pfor pravgma命令系统命令系统以并行方式执行下一循环。而由同步以并行方式执行下一循环。而由同步pragma产生一个路障同步。产生一个路障同步。本讲稿第十四页,共八十二页#pragma parallel#pragma shared(A,b,c)#pragma local(i)#pragma pfor iterate(i=0;N;1)for(i=0;iN;i+)Ai=bi*bi+1;#pragma synchronize#pragm
13、a pfor iterate(i=0;N;1)for(i=0;iN;i+)ci=Ai+Ai+1;(d)SGI power C(d)SGI power C中使用中使用pragmapragma的等效代码的等效代码三种并行化方式三种并行化方式本讲稿第十五页,共八十二页并行编程基础并行编程基础 下表中总结了下表中总结了3 3种方法的优缺点。由于容易实现,种方法的优缺点。由于容易实现,库例程是目前使用最库例程是目前使用最广泛的方法广泛的方法所有并行化和交互功能由附加到顺序所有并行化和交互功能由附加到顺序C C或或FortranFortran的一组程的一组程序实现。因此就无需实现新的编译器。然而由于没有编
14、译器支持,用户序实现。因此就无需实现新的编译器。然而由于没有编译器支持,用户就丧失了编译时间分析、错误检查和优化的机会。就丧失了编译时间分析、错误检查和优化的机会。方法实例优点缺点库例程MPI,PVM,Cray Craft易于实现,不需要新编译器无编译器检查、分析和优化新构造Fortran90,Cray Craft允许编译器检查、分析和优化实现困难,需要新编译器命令HPF,Cray Craft介于库例程和新构造方法之间,在串行平台上不起作用本讲稿第十六页,共八十二页2.2 进程、任务和线程进程、任务和线程抽象进程的定义抽象进程的定义定义定义2.1 一个进程一个进程P是一个是一个4元组元组P=(
15、p,C,D,S)其中其中p是程序(或代码),是程序(或代码),C是控制状态,是控制状态,D为数据状态,为数据状态,S为进程为进程P的的状态。状态。进程是动态的,其中它不单是指代码和数据是动态的,而且还包含进程是动态的,其中它不单是指代码和数据是动态的,而且还包含正在执行的思想。正在执行的思想。本讲稿第十七页,共八十二页进程、任务和线程进程、任务和线程 任何进程与一个程序相关,作为一个例子,考虑如下的任何进程与一个程序相关,作为一个例子,考虑如下的C代码:代码:main()()int i=0;fork();fork();printf(“Hello!n”);我们可如下编译此程序(假设它在文件我们可
16、如下编译此程序(假设它在文件hello.c中)中):cc-o Hi hello.c,并可用简单命令:并可用简单命令:Hi 执行它。执行它。本讲稿第十八页,共八十二页进程、任务和线程进程、任务和线程 操作系统将操作系统将创建一个输出创建一个输出hellohello的进程的进程。除了由用户提供的显式。除了由用户提供的显式代码外,进程还使用运行时间支持、库例程以及系统函数。上述进程称为代码外,进程还使用运行时间支持、库例程以及系统函数。上述进程称为Printf(),它是(),它是C语言标准语言标准I/O库中的例程,以及库中的例程,以及fork(),它是它是Unix系统的一个调系统的一个调用。用。控制
17、和数据状态控制和数据状态 大多数程序基于大多数程序基于命令式机器模型命令式机器模型,其中新概念,其中新概念是是状态更新状态更新。一个命令式程序可看成是一个状态机(或一个自动机),它将程序从初一个命令式程序可看成是一个状态机(或一个自动机),它将程序从初始状态映射到一个或多个最后状态。始状态映射到一个或多个最后状态。本讲稿第十九页,共八十二页进程、任务和线程进程、任务和线程 定义定义2.22.2 一个程序使用两个变量集:一个程序使用两个变量集:数据变量数据变量由程序员声明用来保存数据值的变量;由程序员声明用来保存数据值的变量;控制变控制变量量是保存控制信息的变量,它们不需要显式说明。换是保存控制
18、信息的变量,它们不需要显式说明。换言之,控制变量保存的是有关下一步应执行什么操作言之,控制变量保存的是有关下一步应执行什么操作的信息。的信息。数据变量集和控制变量集两者的合集形成了程序变数据变量集和控制变量集两者的合集形成了程序变量集。量集。本讲稿第二十页,共八十二页进程、任务和线程进程、任务和线程 定义定义2.32.3 在任何时候,一个程序的每个数据或控制变量需与一在任何时候,一个程序的每个数据或控制变量需与一个值配为一对,该值可能是一个未定义的特殊值。在时间个值配为一对,该值可能是一个未定义的特殊值。在时间t t时所时所有(数据变量、数据值)的配对集定义了有(数据变量、数据值)的配对集定义
19、了时间时间t t的程序数据状态的程序数据状态。类似地,时间类似地,时间t t的所有(控制变量,控制值)配对集定义了时间的所有(控制变量,控制值)配对集定义了时间t t的程序控制状态。因此,的程序控制状态。因此,时间时间t t的程序状态是的程序状态是t t时间的数据状态和时间的数据状态和控制状态的和。控制状态的和。或者我们可以说或者我们可以说t t时的程序状态是所有(程序变时的程序状态是所有(程序变量、值)的配对集。量、值)的配对集。本讲稿第二十一页,共八十二页进程、任务和线程进程、任务和线程 定义定义2.42.4 程序从初始状态启动。程序从初始状态启动。当执行了程序的一个原子操作后,程序当执行
20、了程序的一个原子操作后,程序就从当前状态转为下一状态就从当前状态转为下一状态。程序不断执行原子操作并不断更新其状。程序不断执行原子操作并不断更新其状态,直至终止。此时程序处在最后状态。态,直至终止。此时程序处在最后状态。这样一个命令式程序可视为是这样一个命令式程序可视为是产生一个或多个序列的原子操作产生一个或多个序列的原子操作,它们将状态机从初始状态转换到最后状态。它们将状态机从初始状态转换到最后状态。当一个程序进入一个被确认不会终结的状态时,则说该程序进当一个程序进入一个被确认不会终结的状态时,则说该程序进入了入了发散状态。发散状态。本讲稿第二十二页,共八十二页进程、任务和线程进程、任务和线
21、程 我们可把控制变量当作程序计数器。对具有单控制线程的进程来讲,我们可把控制变量当作程序计数器。对具有单控制线程的进程来讲,它只有一个控制变量:程序计数器;它只有一个控制变量:程序计数器;而对有多控制线程的进程而言,它而对有多控制线程的进程而言,它有有多个控制变量多个控制变量,每个线程有一个每个线程有一个,它含有该线程的程序计数器值;,它含有该线程的程序计数器值;对于对于多子进程情况,整个进程可有若干个控制变量,多子进程情况,整个进程可有若干个控制变量,每个子进程有一个。每个子进程有一个。在用户程序中,在用户程序中,数据变量可用蕴式或显式方式说明。数据变量可用蕴式或显式方式说明。例如,例如,U
22、nixUnix进程的数据变量含有隐藏的文件指针进程的数据变量含有隐藏的文件指针stdinstdin、stdoutstdout以及以及stderrstderr各自用作标准输入、标准输出和标准错误,它们可显式地各自用作标准输入、标准输出和标准错误,它们可显式地加以说明。加以说明。本讲稿第二十三页,共八十二页进程状态进程状态在任何时间,进程具有某个状态:在任何时间,进程具有某个状态:图图4 开始时,进程不存在(为开始时,进程不存在(为不存在状态不存在状态)。当它的创建者,父进程执)。当它的创建者,父进程执行进程创建操作后,它才出现。一个新创建的子进程准备执行,但仅行进程创建操作后,它才出现。一个新创
23、建的子进程准备执行,但仅在被调度后,它方可开始在被调度后,它方可开始运行运行(执行其代码)。在进程运行中可能发生(执行其代码)。在进程运行中可能发生以下几种情况:以下几种情况:由于页面失挂或其他情况,它无法继续执行时,就被挂起,从而进由于页面失挂或其他情况,它无法继续执行时,就被挂起,从而进入入挂起状态挂起状态。本讲稿第二十四页,共八十二页进程状态进程状态在任何时间,进程具有某个状态:在任何时间,进程具有某个状态:一个正在运行进程可能被具有更高优先级的另一进程抢占,或者它可一个正在运行进程可能被具有更高优先级的另一进程抢占,或者它可能已用完分配给它的能已用完分配给它的CPUCPU时间片(到时)
24、。不论是哪种情况,进程本身时间片(到时)。不论是哪种情况,进程本身能(准备)继续执行,但它被强制放弃能(准备)继续执行,但它被强制放弃CPUCPU资源并转换其状态成为资源并转换其状态成为就绪就绪。最后,一个正在运行的进程能终止本身,或是正常地在它完成代码最后,一个正在运行的进程能终止本身,或是正常地在它完成代码执行后,或是异常地(夭折)终止,并停止存在。执行后,或是异常地(夭折)终止,并停止存在。另一个经常使用的操作是另一个经常使用的操作是进程切换进程切换,它是指将一个正常运行的进程转换,它是指将一个正常运行的进程转换成或是成或是挂起挂起或是或是就绪就绪状态,并调度下一个就绪的进程运行。状态,
25、并调度下一个就绪的进程运行。本讲稿第二十五页,共八十二页进程状态进程状态 在实际的操作系统和并行编程环境中,由于还有附加在实际的操作系统和并行编程环境中,由于还有附加的其他状态,因而情况更为复杂。的其他状态,因而情况更为复杂。以上提及的进程概念很适合于需要使用并行语言的用以上提及的进程概念很适合于需要使用并行语言的用户。对于那些要实现进程并行概念者,就需要更为详细的户。对于那些要实现进程并行概念者,就需要更为详细的进程观。进程观。在实现进程并行运行时,还必须考虑以下各方面:在实现进程并行运行时,还必须考虑以下各方面:执执行方式、地址空间、现场进程描述符和进程控制。行方式、地址空间、现场进程描述
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第2章 并行编程基础精选文档 并行 编程 基础 精选 文档
限制150内