高性能计算之并行编程技术PPT课件

上传人:资****亨 文档编号:53076747 上传时间:2018-08-28 格式:PPT 页数:43 大小:2.13MB
返回 下载 相关 举报
高性能计算之并行编程技术PPT课件_第1页
第1页 / 共43页
高性能计算之并行编程技术PPT课件_第2页
第2页 / 共43页
高性能计算之并行编程技术PPT课件_第3页
第3页 / 共43页
高性能计算之并行编程技术PPT课件_第4页
第4页 / 共43页
高性能计算之并行编程技术PPT课件_第5页
第5页 / 共43页
点击查看更多>>
资源描述

《高性能计算之并行编程技术PPT课件》由会员分享,可在线阅读,更多相关《高性能计算之并行编程技术PPT课件(43页珍藏版)》请在金锄头文库上搜索。

1、高性能计算之并行编程技术,六、CPU/GPU/TPU概述,一、并行编程基础知识,五、行计算优化,四、Python并发编程方式,三、MPI程序分析及编程入门,二、MPI编程实例演示,提 纲,一、并行编程基础知识,节点(node): 每个节点由多个处理器构成,可以直接输入输出 互联网络(interconnect network): 所有节点通过互联网络相互连接通信。 内存 (memory): 内存由多个存储模块组成,这些模块或者与节点对称地分布在互联网络的两侧,或者位于各个节点的内部,并行计算机组成部分,一、并行编程基础知识,内存模块位于节点内部,并行计算机体系结构,内存模块与节点分离,一、并行编

2、程基础知识,一、并行编程基础知识,程序:实现特定目标或解决特定问题而用计算机语言编写的命令序列的集合,或者称之为:算法+数据结构。 进程:可并发执行的程序在一个数据集合上的运行过程。 进程是程序的一次执行; 进程可以是和别的计算并发执行的计算; 进程可以定义为一个数据结构及其能在其上进行操作的一个程序; 进程是一个程序及其数据在处理机上顺序执行时所发生的活动; 进程是程序在一个数据集合上的运行过程,是系统进行资源分配和调度的独立单位。 线程:线程是进程中的一个实体,是被系统独立调度和分派的基本单位。线程自己基本不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器、一组寄存器和堆栈),

3、但他与同属于一个进程中的其他线程共享进程所拥有的全部资源。,两个重要概念:进程与线程,一、并行编程基础知识,并行编程通常是指软件代码,它促进在同一时间执行多个计算任务的性能。 For example: 操场上有20个滑梯而不是一个。孩子们不必排队等待轮到自己,因为他们可以同时玩。 使用电脑鼠标,一边听音乐,一边写毕业论文,同时对个人电脑做病毒扫描,这唯一的理由就是并发编程。 在这种情况下,它的多重任务允许多个程序或进程访问CPU而没有等待。这一设置允许使用多任务共享的资源进行密集的I/O处理和有效的信号处理。 并发性也可以通过实施多个计算线程发生(通常采用交错启动和完成点)。这叫做多线程,并且

4、它发生在一个单一的进程或程序中。这就是为什么你可以打印一个文档,同时继续编辑另一个文档。如果没有多线程,UI会太慢,因为系统将无法在同一时间应对多个用户操作。,并行编程概述,一、并行编程基础知识,并行编程模式,主要指并行编程时,程序员将程序各模块并行执行时,模块间的通信方式,目前并行编程模式主要包括以下三种: 共享内存:共享内存是进程间传递数据的一种高效方法。在共享内存模型中,并行进程共享一个进行异步读取的全局地址空间。异步并发访问可能导致条件竞争,因此需要同步机制来避免条件竞争,这些机制包括锁,信号量,管程(monitor)。传统的多核处理器是直接支持共享内存的,所以导致很多利用该特性的语言

5、和库出现,以OpenMP为代表; 消息传递:在消息传递模型中,并行进程是通过消息传递来交换数据的。这些通信可以是异步的,即消息可以在接收者做好准备前发送,也可以是同步的,即只有接受者准备好接收消息时才能发送。消息传递的CSP(Communicating sequential processes)模型使用同步通信channel来连接进程,以MPI,PVM为代表; 数据并行模式:数据并行化关注在数据集上执行的操作。一组任务对数据集进行运算,但是会对不同的分区进行运算,以Fortran为代表。,并行编程模式,一、并行编程基础知识,Massage Passing Interface:是消息传递函数库的

6、标准规范; 由MPI论坛开发.支持Fortran、C和C+; 一种新的库描述, 不是一种语言。,什么是MPI?,一、并行编程基础知识,消息传递并行程序设计 用户必须通过显式地发送和接收消息来实现处理机间的数据交换。 每个并行进程均有自己独立的地址空间,相互之间访问不能直接进行,必须通过显式的消息传递来实现。 这种编程方式是大规模并行处理机(MPP)和机群(Cluster)采用的主要编程方式。 并行计算粒度大,特别适合于大规模可扩展并行算法 由于消息传递程序设计要求用户很好地分解问题,组织不同进程间的数据交换,并行计算粒度大,特别适合于大规模可扩展并行算法. 消息传递是当前并行计算领域的一个非常

7、重要的并行程序设计方式,下面我们以C语言的形式给出一个最简单的MPI并行程序Hello (下页). 该程序在终端打印出Hello World!字样. “Hello World”:一声来自新生儿的问候.,二、MPI编程实例演示,从简单入手!,Hello world (C),#include #include “mpi.h“main(int argc,char *argv ) MPI_Init( ,二、MPI编程实例演示,Hello world (Fortran),二、MPI编程实例演示,program main include mpif.h integer ierrcall MPI_INIT(

8、ierr ) print *, Hello, world! call MPI_FINALIZE( ierr ) end,MPI程序的的编译与运行,mpicc o hello hello.c 生成hello的可执行代码. mpirun np 4 hello 4 指定np的实参,表示进程数,由用户指定. hello 要运行的MPI并行程序.,%小写o,np: The number of process.,二、MPI编程实例演示,SPMD: Single Program Multiple Data(MIMD):,#include “mpi.h“ #include main(int argc,char

9、 *argv ) MPI_Init( ,#include “mpi.h“ #include main(int argc,char *argv ) MPI_Init( ,#include “mpi.h“ #include main(int argc,char *argv ) MPI_Init( ,#include “mpi.h“ #include main(int argc,char *argv ) MPI_Init( ,Hello World! Hello World! Hello World! Hello World!,#include “mpi.h“ #include main(int a

10、rgc,char *argv ) MPI_Init( ,Hello是如何被执行的?,三、MPI程序分析及编程入门,C 必须包含mpi.h. MPI 函数返回出错代码或 MPI_SUCCESS成功标志. MPI-前缀,且只有MPI以及MPI_标志后的第一个字母大写,其余小写. MPI函数的参数被标志为以下三种类型: IN:参数在例程的调用中不会被修正. OUT:参数在例程的调用中可能会被修正. INOUT:参数在一些例程中为IN,而在另一些例程中为OUT.,C语言中MPI函数约定,三、MPI程序分析及编程入门,在写MPI程序时,我们通常需要知道以下两个问题的答案:任务由多少个进程来进行并行计算?

11、我是哪一个进程?,开始写MPI并行程序,三、MPI程序分析及编程入门,开始写MPI并行程序,MPI 提供了下列函数来回答这些问题: 用MPI_Comm_size 获得进程个数pint MPI_Comm_rank(MPI_Comm comm, int *rank);用MPI_Comm_rank 获得进程的一个叫rank的值,该 rank值为0到p-1间的整数,相当于进程的IDint MPI_Comm_size(MPI_Comm comm, int *size);,三、MPI程序分析及编程入门,MPI基本函数,int MPI_Init (int* argc /* in/out */,char* a

12、rgv /* in/out */) 通常应该是第一个被调用的MPI函数 除MPI_Initialized()外,其余所有的MPI函数应该在其后被调用 MPI系统将通过argc,argv得到命令行参数,三、MPI程序分析及编程入门,MPI基本函数,int MPI_Finalize (void) 退出MPI系统,所有进程正常退出都必须调用。表明并行代码的结束,结束除主进程外其它进程. 串行代码仍可在主进程(rank = 0)上运行,但不能再有MPI函数(包括MPI_Init()),三、MPI程序分析及编程入门,MPI基本函数,int MPI_Comm_size (MPI_Comm comm /*

13、in */,int* size /* out */) 获得进程个数 size 指定一个通信子,也指定了一组共享该空间的进程, 这些进程组成该通信子的group. 获得通信子comm中规定的group包含的进程的数量.,三、MPI程序分析及编程入门,MPI基本函数,int MPI_Comm_rank (MPI_Comm comm /* in */,int* rank /* out */) 得到本进程在通信空间中的rank值,即在组中的逻辑编号(该rank值为0到p-1间的整数,相当于进程的ID)。,三、MPI程序分析及编程入门,MPI程序的基本结构,#include “mpi.h“ . . in

14、t main(int argc, char *argv) int myrank, nprocs;MPI_Init( ,三、MPI程序分析及编程入门,更新的Hello World (c),#include #include “mpi.h“main( int argc, char *argv ) int myid, numprocs;MPI_Init( ,三、MPI程序分析及编程入门,mpicc o hello1 hello1.c mpirun -np 4 hello1 I am 0 of 4 I am 1 of 4 I am 2 of 4 I am 3 of 4,更新后的的Hello World

15、 的允许结果,三、MPI程序分析及编程入门,MPI调用借口的总数虽然庞大,但根据实际编写MPI的经验,常用的MPI调用的个数确什么有限。下面是6个最基本的MPI函数。 MPI_Init(); MPI_Comm_size(); MPI_Comm_rank(); MPI_Send(); MPI_Recv(); MPI_Finalize();,MPI_Init(); 并行代码; MPI_Fainalize(); 只能有串行代码;,最基本的MPI,三、MPI程序分析及编程入门,SPMD 编程模式:构成一个程序的所有进程运行的是同一份执行代码. 不同进程根据自己的序号可能执行该代码中的不同分支. MPI

16、 编程中最常用的编程方式. 用户只需要编写、维护一份源代码. MPMD 编程模式:构成一个程序的不同进程运行不同的执行代码. 用户需要编写、维护多份源代码. 主/从编程模式:它是MPMD 编程模式的一个特例, 也是MPMD 编程模式中最常见的方式. 构成一个程序的进程之一负责所有进程间的协调及任务调度, 该进程称为主进程(Master), 其余进程称为从进程(Slave). 通常用户需要维护两份源代码.,MPI编程模式,三、MPI程序分析及编程入门,MPI程序设计方法,明确并行任务 设计单个任务的串行程序 所有任务的统一表示-SPMD并行程序,SPMD,三、MPI程序分析及编程入门,线程(Thread) 进程 (Process) 远程分布式主机 (Distributed Node) 伪线程 (PseudoThread),

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号