多核程序设计.ppt
《多核程序设计.ppt》由会员分享,可在线阅读,更多相关《多核程序设计.ppt(30页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、多核程序设计多核程序设计现在学习的是第1页,共30页OpenMP编程简介编程简介p一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。p一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)。pOpenMP具有良好的可移植性,支持多种编程语言pOpenMP能够支持多种平台,包括大多数的类UNIX系统以及Windows NT系统(Windows 2000,Windows XP,Windows Vista等)。p用C/C+语言来实现OpenMP的多线程编程。http:/www.openmp.orgCurrent spec is OpenMP 2.5 250 Pages(
2、combined C/C+and Fortran)现在学习的是第2页,共30页2022/9/262OpenMP多线程编程基础多线程编程基础pOpenMP的编程模型以线程为基础,通过编译指导语句来显示地指导并行化,为编程人员提供了对并行化的完整的控制。pOpenMP程序的执行模型采用Fork-Join的形式nFork,创建新线程或者唤醒已有线程;Join,即多线程的汇合nFork-Join执行模式在开始执行时,只有一个叫主线程的运行线程存在。n主线程在运行中,需要进行并行计算时,派生出线程执行并行任务。n在并行执行时,主线程和派生线程共同工作。n在并行代码结束后,派生线程退出或挂起,控制流程回到
3、单独的主线程中。现在学习的是第3页,共30页2022/9/263OpenMP多线程编程基础多线程编程基础p共享内存多线程应用程序的Fork-Join模型如图n主线程运行中,遇到并行编译指导语句,根据环境变量派生出线程n某个派生线程遇到另一个编译指导语句,又派生出另外一组线程。n新线程组在通过一个隐含的同步屏障后,汇合成原有的线程。MasterThreadParalllRegionNestedParallelRegion现在学习的是第4页,共30页2022/9/264OpenMP多线程编程基础多线程编程基础pOpenMP同时支持C/C+语言和Fortran语言,可选择任意一种语言及支持OpenM
4、P的编译器编写OpenMP程序。pOpenMP应用程序的三个组成部分n编译指导语句n运行时库函数n环境变量:通过环境变量的方式可以灵活控制程序的运行。p例如:通过环境变量OMP_NUM_THREADS值控制运行的线程的数目现在学习的是第5页,共30页2022/9/265OpenMP多线程编程基础多线程编程基础p编译指导语句n在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语义。具体形式如下:#pragma omp clause,clause所有编译指导语句都以#pragma omp开始,后面跟具体的功能指令。其中directive部分就包含了具体的编译指
5、导语句,包括parallel,for,parallel for,section,sections,single,master,critical,flush,ordered和atomic。可选子句clause给出了相应的编译指导语句的参数。现在学习的是第6页,共30页2022/9/266OpenMP多线程编程基础多线程编程基础p运行时库函数n使用运行时函数库所包含的函数,必须在相应的源文件中包含OpenMP头文件,即#include“omp.h”n四个最常用的OpenMP库函数int omp_get_num_threads(void)返回当前使用的线程个数。int omp_set_num_thr
6、eads(int NumThreads)在进入并行区域前,该函数设置将要使用的线程个数。int omp_get_thread_num(void)返回当前线程号,值在0(主线程)到线程总数减1之间。int omp_get_num_procs(void)返回可用的处理核(处理器)个数。支持超线程技术的处理核或处理器将被算作两个处理核(或两个处理器)。现在学习的是第7页,共30页2022/9/267使用使用Visual Studio 2005编写编写OpenMP程序程序p当前的Visual Studio.Net 2005完全支持OpenMP 2.0标准,通过新的编译器选项/openmp来支持Open
7、MP程序的编译和链接。#include“omp.h”现在学习的是第8页,共30页2022/9/268环境变量的设置环境变量的设置现在学习的是第9页,共30页2022/9/269OpenMP程序编写步骤程序编写步骤p生成Console项目;p配置项目,使之支持OpenMP;p编写代码,加入#include“omp.h”;p编写源程序;p配置环境变量OMP_NUM_THREADS,确定线程数目;p执行程序。现在学习的是第10页,共30页2022/9/2610用用Visual Studio 2005编写简单的编写简单的OpenMP程序程序#include“stdafx.h”#include“omp.
8、h”int _tmain(int argc,_TCHAR*argv)printf(“Hello from serial.n”);printf(“Thread number=%dn”,omp_get_thread_num();/串行执行#pragma omp parallel /开始并行执行printf(“Hello from parallel.Thread number=%dn”,omp_get_thread_num();printf(“Hello from serial again.n”);return 0;Example 1:Modify the“Hello World”serial co
9、de to run multithreaded using OpenMP 现在学习的是第11页,共30页2022/9/2611用用用用Visual Studio 2005Visual Studio 2005编写简单的编写简单的编写简单的编写简单的OpenMPOpenMP程序程序程序程序pOpenMP程序使用到的环境变量OMP_NUM_THREADS设置为4p三次执行的结果现在学习的是第12页,共30页2022/9/2612OpenMP编程技术编程技术循环并行化循环并行化p在C/C+语言中,循环并行化编译指导语句的格式#pragma omp parallel for clauseclausefo
10、r(index=first;test_expression;increment_expr)body of the loop;或或#pragma omp parallel#pragma omp for for(index=first;test_expression;increment_expr)body of the loop;n使用这个编译指导语句能将for循环中的工作分配到一个线程组中,线程组中的每一个线程将完成循环中的一部分内容。nfor循环语句要紧跟在parallel for的编译指导语句后面,编译指导语句的功能区域一直延伸到for循环语句的结束部分。n编译指导语句后面的子句(claus
11、e)用来控制编译指导语句的具体行为。现在学习的是第13页,共30页2022/9/2613OpenMP编程技术编程技术循环并行化循环并行化p循环并行化语句的限制n循环并行化的语句必须具有如下的形式for(index=start;index end;increment_expr)其中小于号()也可以被其他的比较操作符替代,即可以替换成,=。n循环语句块应该是单入口与单出口的p不能使用break语句,也不能使用goto和return从循环中跳出,会使循环次数无法确定。但可以使用continue,其不影响循环执行的次数。现在学习的是第14页,共30页2022/9/2614OpenMP编程技术编程技术循
12、环并行化循环并行化p简单循环并行化(实验1)n例将两个向量相加,并将结果保存到第三个向量中,for(int i=0;in;i+)zi=xi+yi;n此向量加法没有数据相关性,循环过程的计算也没有循环依赖性(即某一次循环的结果依赖于其他次循环的结果)可以使用循环并行化编译指导语句直接对循环进行并行化。#pragma omp parallel for for(int i=0;in;i+)zi=xi+yi;n例 for(int i=0;in;i+)zi=zi-1+xi+yi;n此循环具有循环依赖性,进行并行化时必须考虑,不能简单进行。现在学习的是第15页,共30页2022/9/2615循环并行化编译
13、指导语句的子句循环并行化编译指导语句的子句p循环并行化编译指导语句的子句n数据作用域子句p作用域用来控制某一个变量是否是在各线程之间共享或者是某一个线程所私有。p数据作用域子句用shared表示一个变量在各线程之间共享,用private表示一个变量是某个线程私有的。p在OpenMP中,默认的变量作用域是共享的。n用来控制线程调度的子句(schedule子句)n动态控制是否并行化子句(if子句)n进行同步的子句(ordered子句)n控制变量在串行部分与并行部分传递的子句(copyin子句)现在学习的是第16页,共30页2022/9/2616循环并行化循环并行化循环嵌套循环嵌套p循环嵌套(实验2
14、)n循环并行化编译指导语句可以加在任意一个循环之前,则对应的最近的循环语句被并行化,其它部分保持不变。实际上并行化是作用于嵌套循环中的某一个循环。int i,j;#pragma omp parallel for private(j)for(i=0;i2;i+)for(j=6;j10;j+)printf(“i=%d j=%dn”,i,j);并行化作用于外层循环int i,j;for(i=0;i2;i+)#pragma omp parallel for private(j)for(j=6;j10;j+)printf(“i=%d j=%dn”,i,j);并行化作用于内层循环 在执行过程中,并行执行的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 多核 程序设计
限制150内