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