中图种学学计算机科学与术系 University of Science and Technology of China DEPARTMENT DF COMPUTE三巴 ENCE AND ECHNOLDD 个简单的 OpenMP程存实例 运行结果( setenV OMP NUM THREADS8) Hello World from OMP thread o 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 OMP thread 3 国家高性能计算中心(合肥) 2021/2/3
国家高性能计算中心(合肥) 14 2021/2/3 一个简单的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 OMP thread 3
中图种学学计算机科学与术系 University of Science and Technology of China DEPARTMENT。 F COMPUTE三巴 ENCE AND ECHNOLDD 编译制导 语句格式 #pragma om p directive-name clause newline 制导指令前缀。对 OpenMP制导指子句。在没有其它换行符。表明这条 所有的 OpenMP语令。在制导指令前约束条件下,子句制导语句的终止。 句都需要这样的前缀和子句之间必须可以无序,也可以 缀。 有一个正确的 任意的选择。这 OpenMPi制导指部分也可以没有。 令 国家高性能计算中心(合肥) 2021/2/3 15
国家高性能计算中心(合肥) 15 2021/2/3 编译制导 ▪ 语句格式 #pragma omp directive-name [clause, ...] newline 制导指令前缀。对 所有的OpenMP语 句都需要这样的前 缀。 OpenMP制导指 令。在制导指令前 缀和子句之间必须 有一个正确的 OpenMP制导指 令。 子句。在没有其它 约束条件下,子句 可以无序,也可以 任意的选择。 这一 部分也可以没有。 换行符。表明这条 制导语句的终止
中图种学学计算机科学与术系 University of Science and Technology of China DEPARTMENT。 F COMPUTE三巴 ENCE AND ECHNOLDD 编译制导 作用域 静态扩展 ■文本代码在一个编译制导语句之后,被封装到一个结构块中 孤立语句 n一个 OpenMP的编译制导语句不依赖于其它的语句 动态扩展 包括静态范围和孤立语句 国家高性能计算中心(合肥) 2021/2/3 16
国家高性能计算中心(合肥) 16 2021/2/3 编译制导 ▪ 作用域 ▪ 静态扩展 ▪ 文本代码在一个编译制导语句之后,被封装到一个结构块中 ▪ 孤立语句 ▪ 一个OpenMP的编译制导语句不依赖于其它的语句 ▪ 动态扩展 ▪ 包括静态范围和孤立语句
中图种学学计算机科学与术系 University of Science and Technology of China DEPARTMENT。 F COMPUTE三巴 ENCE AND ECHNOLDD 作用城 动态范围 静态范围 孤立语句 for语句出现在一个封闭的并行域中 critical和 sections语句出现在封闭的并行域之外 #pragma omp parallel void sub1 10 #pragma omp for #pragma omp critical for(C sub10 id sub20 #pragma omp sections b20 国家高性能计算中心(合肥) 2021/2/3
国家高性能计算中心(合肥) 17 2021/2/3 作用域 动态范围 静态范围 for语句出现在一个封闭的并行域中 孤立语句 critical和sections语句出现在封闭的并行域之外 #pragma omp parallel { … #pragma omp for for(…){ … sub1(); … } … sub2(); … } void sub1() { … #pragma omp critical … } void sub2() { … #pragma omp sections … }
中图种学学计算机科学与术系 University of Science and Technology of China DEPARTMENT。 F COMPUTE三巴 ENCE AND ECHNOLDD 并行域结构 并行域中的代码被所有的线程执行 具体格式 #pragma omp parallel clause[]clause].]newline clause= if(scalar expression private(list) shared (list) default(shared none) firstprivate(list) reduction(operator: list) 国家高性能计算中心(合肥) 2021/2/3
国家高性能计算中心(合肥) 18 2021/2/3 并行域结构 ▪ 并行域中的代码被所有的线程执行 ▪ 具体格式 ▪ #pragma omp parallel [clause[[,]clause]…]newline ▪ clause= ▪ if (scalar_expression) ▪ private (list) ▪ shared (list) ▪ default (shared | none) ▪ firstprivate (list) ▪ reduction (operator: list) ▪ copyin (list)