多核程序设计PPT课件_第1页
多核程序设计PPT课件_第2页
多核程序设计PPT课件_第3页
多核程序设计PPT课件_第4页
多核程序设计PPT课件_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2007年6月12日浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。p一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)。pOpenMP具有良好的可移植性,支持多种编程语言pOpenMP能够支持多种平台,包括大多数的类UNIX系统以及Windows NT系统(Windows 2000,Windows XP,Windows Vista等)。浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/pOpenMP的编程模型以线程为基础,通过编译指导语句来显示地指导并行

2、化,为编程人员提供了对并行化的完整的控制。p采用Fork-Join的形式MasterThreadParalllRegionNestedParallelRegion浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p编译指导语句n在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语义。#pragma omp clause , clause其中directive部分就包含了具体的编译指导语句,包括parallel, for, parallel for, section, sections, single, master, critic

3、al, flush, ordered和atomic。n将串行的程序逐步地改造成一个并行程序,达到增量更新程序的目的,减少程序编写人员一定的负担。p运行时库函数nOpenMP运行时函数库原本用以设置和获取执行环境相关的信息,它们当中也包含一系列用以同步的API。n支持运行时对并行环境的改变和优化,给编程人员足够的灵活性来控制运行时的程序运行状况。浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p当前的Visual Studio .Net 2005完全支持OpenMP 2.0标准,通过新的编译器选项 /openmp来支持OpenMP程序的编译和链接。浙浙 江江 大大 学

4、学 英英 特特 尔尔 技技 术术 中中 心心http:/#include “stdafx.h”#include “omp.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

5、from serial again.n”);return 0;浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/pOpenMP程序使用到的环境变量OMP_NUM_THREADS设置为4p三次执行的结果浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p循环并行化编译指导语句的格式#pragma omp parallel for clauseclausefor( index = first ; test_expression ; increment_expr)body of the loop;p循环并行化语句的限制n循环并行化的语句必须具有如下

6、的形式for (index = start ; index end ; increment_expr)n循环语句块应该是单出口与单入口的p循环嵌套n循环并行化编译指导语句可以加在任意一个循环之前,则对应的最近的循环语句被并行化,其它部分保持不变。浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p通过循环并行化编译指导语句使得一段代码能够在多个线程内部同时执行。p并行区域编译指导语句的格式与使用限制#pragma omp parallel clauseclauseblockpparallel编译指导语句的执行过程#pragma omp parallelfor(int

7、i=0;i5;i+) printf(hello world i=%dn,i);程序的执行结果:hello world i=0hello world i=1hello world i=2hello world i=3hello world i=4#pragma omp parallel forfor(int i=0;i5;i+) printf(hello world i=%dn,i);程序的执行结果:hello world i=0hello world i=3hello world i=1hello world i=4hello world i=2浙浙 江江 大大 学学 英英 特特 尔尔 技技

8、术术 中中 心心http:/p线程私有数据与threadprivate,copyin子句n使用threadprivate子句用来标明某一个变量是线程私有数据,在程序运行的过程中,不能够被其他线程访问到。n使用copyin子句对线程私有的全局变量进行初始化。int counter=0;/using threadprivate#pragma omp threadprivate(counter) void inc_counter()counter+; int _tmain(int argc, TCHAR * argv)#pragma omp parallel for(int i=0;i10000;i

9、+)inc_counter();printf(counter=%dn,counter);int global=0;#pragma omp threadprivate(global)int _tmain(int argc, TCHAR * argv)global=1000;#pragma omp parallel copyin(global)printf(global=%dn,global);global=omp_get_thread_num();printf(global=%dn,global);printf(parallel againn);#pragma omp parallelprint

10、f(global=%dn,global);浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p并行区域之间的工作共享p工作队列n工作队列的基本工作过程即为维持一个工作的队列,线程在并行执行的时候,不断从这个队列中取出相应的工作完成,直到队列为空为止。p根据线程号分配任务n由于每一个线程在执行的过程中的线程标识号是不同的,可以根据这个线程标识号来分配不同的任务。p使用循环语句分配任务#pragma omp parallelprintf(outside loop thread=%dn,omp_get_thread_num();#pragma omp forfor(int

11、i=0;i4;i+)printf(inside loop i=%d thread=%dn,i,omp_get_thread_num();浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p工作分区编码(sections)#pragma omp parallel sections#pragma omp sectionprintf(section 1 thread=%dn,omp_get_thread_num();#pragma omp sectionprintf(section 2 thread=%dn,omp_get_thread_num();#pragma omp

12、sectionprintf(sectino 3 thread=%dn,omp_get_thread_num();程序运行结果为:section 1 thread=0section 2 thread=1sectino 3 thread=0浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/pOpenMP支持两种不同类型的线程同步机制n互斥锁n事件通知机制p数据竞争int i; int max_num=-1;#pragma omp parallel forfor(i=0;imax_num)max_num=ari;p互斥锁机制n在OpenMP中,提供了三种不同的互斥锁机制用来

13、对一块内存进行保护,它们分别是临界区(critical),原子操作(atomic)以及由库函数来提供同步操作。浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p在程序需要访问可能产生竞争的内存数据的时候,都需要插入相应的临界区代码。p临界区编译指导语句的格式如下所示:#pragma omp critical (name)blockint i; int max_num_x=max_num_y=-1;#pragma omp parallel forfor(i=0;imax_num_x)max_num_x=arxi; #pragma omp critical (max_a

14、ry)if(aryimax_num_y)max_num_y=aryi;浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/p原子操作是OpenMP编程方式给同步编程带来的特殊的编程功能,通过编译指导语句的方式直接获取了现在多处理器计算机体系结构的功能。通过#pragma omp atomic编译指导语句提供。p只能作用在语言内建的基本数据结构。#pragma omp atomicx =expr或者#pragma omp atomicx+/or x-, -x, +xint counter=0;#pragma omp parallelfor(int i=0;i10000;i

15、+)#pragma omp atomic /atomic operationcounter+;printf(counter = %dn,counter);浙浙 江江 大大 学学 英英 特特 尔尔 技技 术术 中中 心心http:/pOpenMP通过一系列的库函数支持更加细致的互斥锁操作p编译指导语句进行的互斥锁支持只能放置在一段代码之前,作用在这段代码之上。p程序员必须自己保证在调用相应锁操作之后释放相应的锁,否则就会造成多线程程序的死锁。函数名称描述void omp_init_lock(omp_lock_t *)初始化一个互斥锁void omp_destroy_lock(omp_lock_t*) 结束一个互斥锁的使用并释放内存void omp_set_lock(omp_lock_t *)获得一个互斥锁void omp_unset_lock(omp_lock_t *)释放一个互斥锁int omp_test_lock(omp_lock_t *)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论