并行算法实践 - USTC

上传人:创****公 文档编号:136633323 上传时间:2020-06-30 格式:PPT 页数:61 大小:289KB
返回 下载 相关 举报
并行算法实践 - USTC_第1页
第1页 / 共61页
并行算法实践 - USTC_第2页
第2页 / 共61页
并行算法实践 - USTC_第3页
第3页 / 共61页
并行算法实践 - USTC_第4页
第4页 / 共61页
并行算法实践 - USTC_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《并行算法实践 - USTC》由会员分享,可在线阅读,更多相关《并行算法实践 - USTC(61页珍藏版)》请在金锄头文库上搜索。

1、并行算法实践,上篇 并行程序设计导论,国家高性能计算中心(合肥),2,2020/6/29,并行算法实践 上篇 并行程序设计导论,单元I 并行程序设计基础 单元II 并行程序编程指南 单元III 并行程序开发方法,国家高性能计算中心(合肥),3,2020/6/29,单元II 并行程序编程指南,第四章 MPI编程指南 第五章 PVM编程指南 第六章 HPF编程指南 第七章 OpenMP编程指南,国家高性能计算中心(合肥),4,2020/6/29,第七章 OpenMP编程指南,7.1 OpenMP概述 7.2 OpenMP编程风络 7.3 OpenMP编程简介 7.4 运行库例程与环境变量 7.5

2、OpenMP计算实例,国家高性能计算中心(合肥),5,2020/6/29,OpenMP概述,OpenMP应用编程接口API是在共享存储体系结构上的一个编程模型 包含编译制导(Compiler Directive)、运行库例程(Runtime Library)和环境变量(Environment Variables) 支持增量并行化(Incremental Parallelization),国家高性能计算中心(合肥),6,2020/6/29,OpenMP体系结构,国家高性能计算中心(合肥),7,2020/6/29,什么是OpenMP,什么是OpenMP 应用编程接口API(Application

3、Programming Interface ) 由三个基本API部分(编译指令、运行部分和环境变量)构成 是C/C+ 和Fortan等的应用编程接口 已经被大多数计算机硬件和软件厂家所标准化 OpenMP不包含的性质 不是建立在分布式存储系统上的 不是在所有的环境下都是一样的 不是能保证让多数共享存储器均能有效的利用,国家高性能计算中心(合肥),8,2020/6/29,OpenMP的历史,1994年,第一个ANSI X3H5草案提出,被否决 1997年,OpenMP标准规范代替原先被否决的ANSI X3H5,被人们认可 1997年10月公布了与Fortran语言捆绑的第一个标准规范 1998年

4、11月9日公布了支持C和C+的标准规范 目前Fortran77、Fortran90、C、C+语言的实现规范已经完成。 资源网站:http:/www.openmp.org http:/phase.hpcc.jp/Omni/,国家高性能计算中心(合肥),9,2020/6/29,OpenMP的目标,标准性 简洁实用 使用方便 可移植性,国家高性能计算中心(合肥),10,2020/6/29,OpenMP并行编程模型,基于线程的并行编程模型(Programming Model) OpenMP使用Fork-Join并行执行模型,国家高性能计算中心(合肥),11,2020/6/29,OpenMP程序结构,基

5、于Fortran语言的OpenMP程序的结构 PROGRAM HELLO INTEGER VAR1, VAR2, VAR3 !Serial code !Beginning of parallel section. Fork a team of threads. !Specify variable scoping !$OMP PARALLEL PRIVATE(VAR1, VAR2) SHARED(VAR3) !Parallel section executed by all threads !All threads join master thread and disband !$OMP END

6、 PARALLEL !Resume serial code END,国家高性能计算中心(合肥),12,2020/6/29,OpenMP程序结构,基于c/c+语言的OpenMP程序的结构 #include main () int var1, var2, var3; /*Serial code*/ /*Beginning of parallel section. Fork a team of threads*/ /*Specify variable scoping */ #pragma omp parallel private(var1, var2) shared(var3) /*Parallel

7、 section executed by all threads*/ /*All threads join master thread and disband*/ /*Resume serial code */ ,国家高性能计算中心(合肥),13,2020/6/29,一个简单的OpenMP程序实例,基于C/C+语言的OpenMP程序结构的一个具体实现 #include omp.h int main(int argc, char* argv) int nthreads, tid; int nprocs; char buf32; /* Fork a team of threads */ #prag

8、ma omp parallel private(nthreads, tid) /* Obtain and print thread id */ tid = omp_get_thread_num(); printf(Hello World from OMP thread %dn, tid); /* Only master thread does this */ if (tid=0) nthreads = omp_get_num_threads(); printf(Number of threads %dn, nthreads); return 0; ,国家高性能计算中心(合肥),14,2020/

9、6/29,一个简单的OpenMP程序实例,运行结果 (setenv OMP_NUM_THREADS 8) Hello World from OMP thread 0 Number of threads 8 Hello World from OMP thread 4 Hello World from OMP thread 5 Hello World from OMP thread 6 Hello World from OMP thread 7 Hello World from OMP thread 2 Hello World from OMP thread 1 Hello World from

10、OMP thread 3,国家高性能计算中心(合肥),15,2020/6/29,编译制导,语句格式,国家高性能计算中心(合肥),16,2020/6/29,编译制导,作用域 静态扩展 文本代码在一个编译制导语句之后,被封装到一个结构块中 孤立语句 一个OpenMP的编译制导语句不依赖于其它的语句 动态扩展 包括静态范围和孤立语句,国家高性能计算中心(合肥),17,2020/6/29,作用域,国家高性能计算中心(合肥),18,2020/6/29,并行域结构,并行域中的代码被所有的线程执行 具体格式 #pragma omp parallel clause,clausenewline clause=

11、if (scalar_expression) private (list) shared (list) default (shared | none) firstprivate (list) reduction (operator: list) copyin (list),国家高性能计算中心(合肥),19,2020/6/29,共享任务结构,共享任务结构将它所包含的代码划分给线程组的各成员来执行 并行for循环 并行sections 串行执行,国家高性能计算中心(合肥),20,2020/6/29,for编译制导语句,for语句指定紧随它的循环语句必须由线程组并行执行; 语句格式 #pragma

12、omp for clause,clause newline clause= Schedule(type ,chunk) ordered private (list) firstprivate (list) lastprivate (list) shared (list) reduction (operator: list) nowait,国家高性能计算中心(合肥),21,2020/6/29,for编译制导语句,schedule子句描述如何将循环的迭代划分给线程组中的线程 如果没有指定chunk大小,迭代会尽可能的平均分配给每个线程 type为static,循环被分成大小为 chunk的块,静态

13、分配给线程 type为dynamic,循环被动态划分为大小为chunk的块,动态分配给线程,国家高性能计算中心(合肥),22,2020/6/29,Sections编译制导语句,sections编译制导语句指定内部的代码被划分给线程组中的各线程 不同的section由不同的线程执行 Section语句格式: #pragma omp sections clause,clause newline #pragma omp section newline #pragma omp section newline ,国家高性能计算中心(合肥),23,2020/6/29,Sections编译制导语句,clau

14、se= private (list) firstprivate (list) lastprivate (list) reduction (operator: list) nowait 在sections语句结束处有一个隐含的路障,使用了nowait子句除外,国家高性能计算中心(合肥),24,2020/6/29,Sections编译制导语句,#include #define N 1000 int main () int i; float aN, bN, cN; /* Some initializations */ for (i=0; i N; i+) ai = bi = i * 1.0; #pr

15、agma omp parallel shared(a,b,c) private(i) #pragma omp sections nowait #pragma omp section for (i=0; i N/2; i+) ci = ai + bi; #pragma omp section for (i=N/2; i N; i+) ci = ai + bi; /* end of sections */ /* end of parallel section */ ,国家高性能计算中心(合肥),25,2020/6/29,single编译制导语句,single编译制导语句指定内部代码只有线程组中的一个线程执行。 线程组中没有执行single语句的线程会一直等待代码块的结束,使用nowait子句除外 语句格式: #pragma omp single clause,clause newline clause= private(list) firstprivate(list) nowait,国家高性能计算中心(合肥),26,2020/6/29,组合的并行共享任务结构,parallel for编译制导语句 parallel sections编译制导语句,国家高性能计算中心(合肥),27,2020/6/

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

当前位置:首页 > 高等教育 > 大学课件

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