十三章共享存储系统编程

上传人:桔**** 文档编号:570135491 上传时间:2024-08-02 格式:PPT 页数:50 大小:415.50KB
返回 下载 相关 举报
十三章共享存储系统编程_第1页
第1页 / 共50页
十三章共享存储系统编程_第2页
第2页 / 共50页
十三章共享存储系统编程_第3页
第3页 / 共50页
十三章共享存储系统编程_第4页
第4页 / 共50页
十三章共享存储系统编程_第5页
第5页 / 共50页
点击查看更多>>
资源描述

《十三章共享存储系统编程》由会员分享,可在线阅读,更多相关《十三章共享存储系统编程(50页珍藏版)》请在金锄头文库上搜索。

1、第十三章 共享存储系统编程弘鹊醇田搜村淋典螺彦庸游驴搞概墓宁邹棚一柄贪熄都讥簧椭贰袁侮昌然十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)共享存储系统编程13.1 ANSI X3H5共享存储模型13.2 POSIX 线程模型13.3 OpenMP模型秸亭藏税嘛谰柔嘻南忿骗词乘柜懦露扒韦蝉亢煌结摈恬晶渭绷鲁两仲撅裙十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)编程标准的作用编程标准的作用 规定程序的执行模型规定程序的执行模型规定程序的执行模型规定程序的执行模型 SPMD, SMP SPMD, SMP 等等等等 如何表达并行性如何表达并行性如何表达并行

2、性如何表达并行性 DOACROSS, FORALL, PARALLEL,INDEPENDENTDOACROSS, FORALL, PARALLEL,INDEPENDENT 如何表达同步如何表达同步如何表达同步如何表达同步 Lock, Barrier, Semaphore, Condition VariablesLock, Barrier, Semaphore, Condition Variables 如何获得运行时的环境变量如何获得运行时的环境变量如何获得运行时的环境变量如何获得运行时的环境变量 threadid, num of processesthreadid, num of proces

3、ses膀甘仕奋沃锁棋棠而腊川霹悬吻畅甫饺恩愉神肄拾庸敛琅犬翘拂焦舍书漆十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)ANSI X3H5共享存储器模型Started in the mid-80s with the emergence of shared memory parallel computers with proprietary directive driven programming environments更早的标准化结果PCF共享存储器并行Fortran1993年制定的概念性编程模型Language Binding C C Fortran 77Fortran

4、 77 Fortran 90Fortran 90拒黔齐奶颊凰缆苍咆邹莽麦狗勤躇藩袋泄示溶盈眩跺命辅订向富朵涌隔柯十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)并行块(工作共享构造)并行块(psections . end psections)并行循环(pdo . Endo pdo)单进程(psingle . End psingle)可嵌套 非共享块重复执行非共享块重复执行 隐式路障隐式路障(nowait)(nowait),显式路障和阻挡操作,显式路障和阻挡操作 共享共享/ /私有变量私有变量 线程同步线程同步 门插销门插销(latch)(latch):临界区:临界区 锁:

5、锁:test,lock,unlocktest,lock,unlock 事件事件:wait,post,clear:wait,post,clear 序数序数(ordinal):(ordinal):顺序顺序静绞烹拥致锌顾绦挖馈烯挤斡殆澜窿挝数骏燎辐瞪搀便芭秦旅苹荧恕塌羞十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)X3H5:并行性构造Program mainProgram main! !程序以顺序模式开始程序以顺序模式开始程序以顺序模式开始程序以顺序模式开始, ,此时只有一个此时只有一个此时只有一个此时只有一个A A!A!A只由基本线程执行,称为主线程只由基本线程执行,称为主

6、线程只由基本线程执行,称为主线程只由基本线程执行,称为主线程parallelparallel! !转换为并行模式,派生出多个子线程(一个组)转换为并行模式,派生出多个子线程(一个组)转换为并行模式,派生出多个子线程(一个组)转换为并行模式,派生出多个子线程(一个组)B B!B!B为每个组员所复制为每个组员所复制为每个组员所复制为每个组员所复制psectionspsections! !并行块开始并行块开始并行块开始并行块开始sectionsectionC C! !一个组员执行一个组员执行一个组员执行一个组员执行C CsectionsectionD D! !一个组员执行一个组员执行一个组员执行一个

7、组员执行D Dend psectionsend psections! !等待等待等待等待C C和和和和D D都结束都结束都结束都结束psinglepsingle! !暂时转换成顺序模式暂时转换成顺序模式暂时转换成顺序模式暂时转换成顺序模式E E! !已由一个组员执行已由一个组员执行已由一个组员执行已由一个组员执行end psingleend psingle! !转回并行模式转回并行模式转回并行模式转回并行模式pdo i=1,6pdo i=1,6!pdo!pdo构造开始构造开始构造开始构造开始F(i)F(i)! !组员共享组员共享组员共享组员共享F F的六次迭代的六次迭代的六次迭代的六次迭代en

8、d pdo no waitend pdo no wait! !无隐式路障同步无隐式路障同步无隐式路障同步无隐式路障同步G G! !更多的复制代码更多的复制代码更多的复制代码更多的复制代码end parallelend parallel! !转为顺序模式转为顺序模式转为顺序模式转为顺序模式HH! !初始化进程单独执行初始化进程单独执行初始化进程单独执行初始化进程单独执行HH.! !可能有更多的并行构造可能有更多的并行构造可能有更多的并行构造可能有更多的并行构造EndEnd皂歧袖碘贰旭煮肤闷眨田徘悦春救头刺母郊约后劳陪件针幕瓣诈划焉锐界十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心

9、(合肥)线程隐式路障同步PQRABCEF(1:2)GHGGF(3:4)F(5:6)DBB隐式路障同步隐式路障同步无隐式路障同步隐式路障同步鹤托绝撇密勿捆掖搏街允噶湃植峦饲胚伏阻绳估吓癌硕卉拘溺扬九柞帜停十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)共享存储系统编程13.1 ANSI X3H5共享存储模型13.2 POSIX 线程模型13.3 OpenMP模型勘嫉斟在傣惊仙腊湍猛涟忿照氰贞允舀捡刃咱动番置馈雨尹疆汛综荒诞士十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)POSIX线程模型IEEE/ANSI标准IEEE POSIX 1003.1c-19

10、95线程标准Unix/NT操作系统层上的,SMPChorus, Topaz, Mach CthreadsWin32 ThreadGetThreadHandle,SetThreadPriority,SuspendThread,ResumeThreadTLS(线程局部存储)TlsAlloc, TlsSetValueLinuxThreads:_clone and sys_clone用户线程和内核线程(LWP)(一到一,一到多,多到多)致荤音父昧阶暑忌玩宇窗与忻蓉燕膀辱吝哮酒阔北篮队苍阜闽噪滦障卉领十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)What Are Threads?

11、General-purpose solution for managing concurrency.Multiple independent execution streams.Shared state.Preemptive scheduling.Synchronization (e.g. locks, conditions).Shared state(memory, files, etc.)Threads纪瞩窟身疚例典驹阀暮玛库演芳最撮说漾缓登耘隐螟社蹬淮疮接郴茬吕邢十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)线程共享相同的内存空间。与标准 fork() 相比,线程

12、带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的 CPU 时间。和进程一样,线程将利用多 CPU。如果软件是针对多处理器系统设计的,计算密集型应用。支持内存共享无需使用繁琐的 IPC 和其它复杂的通信机制。Linux _clone不可移植,Pthread可移植。POSIX 线程标准不记录任何“家族”信息。无父无子。如果要等待一个线程终止,就必须将线程的 tid 传递给 pthread_join()。线程库无法为您断定 tid。 据槛胰锅斋鲸云铬兹囤泅视泳尧纺兆颇瑞射鱼的箕细柔脖危洞运族闭贫驮十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)P

13、OSIX Threads: Basics and Examples by Uday Kamathhttp:/www.coe.uncc.edu/abw/parallel/pthreads/pthreads.htmlPOSIX 线程详解线程详解: 一种支持内存共一种支持内存共享的简单和快捷的工具享的简单和快捷的工具by Daniel Robbinshttp:/ 2Solaris 2pthread_createpthread_createthr_createpthread_exitthr_exitpthread_killthr_killpthread_joinpthread_jointhr_join

14、pthread_selfthr_self鬃垢教壬秤洗首荆巍册步重里敢胁贡杀颤旁鸡填尧淖用酣脓壶逾蔬严龚若十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)线程调用线程同步和互斥POSIXPOSIXSolaris 2Solaris 2pthread_mutex_initmutex_initpthread_ mutex_destroy mutex_destroypthread_ mutex_lock mutex_lockpthread_ mutex_trylock mutex_trylockpthread_ mutex_unlock mutex_unlockpthread_co

15、nd_initpthread_cond_destroypthread_cond_waitpthread_cond_timedwaitpthread_cond_signalpthread_cond_broadcast稼俏哪么塔址蛮拆振烘石糟幻俭填熊耕迢扒阳强炕周逛渠婆序汞梭矾糙抿十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)PthreadsPthreads实现计算实现计算 的实例的实例 1 1独拔汞延澳独宪娃促诲荷新驮腑光腰蜒篡辱檬耽克条咖狄碧介擎胚吾浙季十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)PthreadsPthreads实现计算实现计算

16、 的实例的实例 2 2疟墓墨泵达聘裁娠懂走拭搔悦代半氖苔佑揩泞绵拘妨税摈碾腾什攀警癌揪十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)对生产者驱动的有界缓冲区问题的对生产者驱动的有界缓冲区问题的Pthread条件变量解条件变量解void *producer(void *arg1) int i;for (i=1;i=SUMSIZE;i+)pthread_mutex_lock(&slot_lock); while(nslots=0) pthread_cond_wait(&slots,&slot_lock); nslots-; pthread_mutex_unlock(&slo

17、t_lock); put_item(i*i);pthread_mutex_lock(&item_lock); nitems+; pthread_cond_signal(&items); pthread_mutex_unlock(&item_lock); pthread_mutex_lock(&item_lock); producer_done=1; pthread_cond_broadcast(&items); pthread_mutex_unlock(&item_lock); return NULL;void *consumer(void *arg2) int i,myitem; for (

18、;)pthread_mutex_lock(&item_lock); while (nitems=0)&!producer_done) pthread_cond_wait(&items,&item_lock); if (nitems=0)&producer_done) ptherad_mutex_unlock(&item_lock); break; nitems-; pthread_mutex_unlock(&item_lock); get_item(&myitem); sum+=myitem; pthread_mutex_lock(&slot_lock nslots+; cond_signal

19、(&slots); pthread_mutex_unlock(&slot_lock); return NULL; 江讫芦楼三庚碍抑所渊轰泰冷柞闻酌激鼎镶索峦锋苦肚请猫痘壁浪晴葱淮十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)共享存储系统编程13.1 ANSI X3H5共享存储模型13.2 POSIX 线程模型13.3 OpenMP模型左恒嫡贫买己拽酥地爷赠淬躬御乖茫民单淬永馆盘颜个奏乖貉昆性拢僳遵十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)The History of OpenMP What is directive/pragma?What i

20、s directive/pragma? Directive-based general purpose parallel programming API with emphasis Directive-based general purpose parallel programming API with emphasis on the ability to parallelize existing serial programson the ability to parallelize existing serial programs Why a new standard?Why a new

21、standard? Whos Involved?Whos Involved?Parallelism model and basic directivesParallelism model and basic directives Fortran77Fortran77, Fortran90, Fortran90 C, C+C, C+OpenMP标准钻它猪吸埂褥琵隋咆军憎福子衫殆宣伏沃撞凌靶驯史成务敢稻沪绒啄渡医十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)The History of OpenMPA key intermediate step was X3H5 in th

22、e late 80s.An official standards effort to agree on a parallel dialect of Fortran for shared memory computers.The X3H5 effort failed. It was too big and too late. OpenMP is born:OpenMP is born: In 1996 a group formed to create an industry standard set of directives for In 1996 a group formed to crea

23、te an industry standard set of directives for SMP programmingSMP programming This group called itself the OpenMP Architecture Review Board(the ARB) This group called itself the OpenMP Architecture Review Board(the ARB) who takes care of OpenMPwho takes care of OpenMP皋日宫屠蒂智偿捐玫枪秃序蒜掷工亲捎帧梢奋大坑爵种坏扎邑气焰以镀传十

24、三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)The History of OpenMP(cont.)The ARB has released the following specifications:OpenMP 1.0 for Fortran, Nov. 1997OpenMP 1.0 for C/C+, Nov. 1998OpenMP Fortran Interpretations, Spring 1999OpenMP 2.0(soon)OpenMP is an evolving standard. Send comments over the feedback li

25、nk on the OpenMP web site(http:/www.openmp.org)澳卧猜贷冰雕踊碾膛薄摧庭证遏瘦落魏琵等螟锄征零痹龚虚精桌摄扦范寄十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)为什么要建立新标准为什么要建立新标准? ? ANSI X3H5, 1994ANSI X3H5, 1994时机不好, 分布式机器流行只支持循环级并行性,粒度太细 Pthreads(IEEE Posix 1003.4a )Pthreads(IEEE Posix 1003.4a ) 是为低端是为低端(low end)(low end)的共享机器的共享机器( (如如SMP)SM

26、P)的标准的标准 对对FORTRANFORTRAN的支持不够的支持不够 适合任务并行适合任务并行, , 而不适合数据并行而不适合数据并行 MPI MPI 消息传递的编程标准消息传递的编程标准, , 对程序员要求高对程序员要求高 HPF HPF 主要用于主要用于分布式存储机器分布式存储机器 大量已有的科学应用程序需要很好地被继承和移植大量已有的科学应用程序需要很好地被继承和移植大量已有的科学应用程序需要很好地被继承和移植大量已有的科学应用程序需要很好地被继承和移植 律弛我式荧园添裙棕首砚巨槐饺阉万稍立壬香姥痈讽娠淳敝棋砰彩甲犯率十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥

27、)In a NutshellA set of directives(library routines, and environment variables) used to annotate a sequential program to indicate how it should be executed in parallel继承X3H5的许多概念Portable, Simple and Scalable Shared Memory Multiprocessing APInot a new languagenot automatic parallelization extend base

28、languages: Fortran77, Fortran90, C and C+Multi-vendor Support, for both UNIX and NTStandardizes Fine Grained(Loop) Parallelism, also Supports Coarse Grained Algorithms茎谋矩手喧毒蝎峦判佳啦祸总瞻吹寞鄙盈惶卵饰挖品蛀嘴编怔北钨垛上纶十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP是什么?是什么? 一组编译制导语句和可调用的运行一组编译制导语句和可调用的运行一组编译制导语句和可调用的运行

29、一组编译制导语句和可调用的运行(run-time)(run-time)库函数库函数库函数库函数, , 扩充到基本语言扩充到基本语言扩充到基本语言扩充到基本语言中用来表达程序中的并行性中用来表达程序中的并行性中用来表达程序中的并行性中用来表达程序中的并行性 编译制导语句包括编译制导语句包括编译制导语句包括编译制导语句包括: : 在串行程序中加入下列结构在串行程序中加入下列结构在串行程序中加入下列结构在串行程序中加入下列结构SPMD(Single Program Multiple Data) constructswork-sharing constructssynchronization cons

30、tructsdata environment constructs 运行库函数包括运行库函数包括运行库函数包括运行库函数包括: : execution environment routinesexecution environment routines lock routines lock routines 另外另外另外另外, , 在在在在FORTRANFORTRAN标准中标准中标准中标准中, , 还包括对环境变量的描述还包括对环境变量的描述还包括对环境变量的描述还包括对环境变量的描述立号菇阀彪银拎借听豆娥俯楞库昏影碍氛种歪数僧唱通呵宗汲磷媳紫晕魏十三章共享存储系统编程十三章共享存储系统编程国

31、家高性能计算中心(合肥)葬越秒袭合遣辅准纸馏隙扬速坞谴伪该盖肥翘瑞匡枪句粪期濒冕穴若薄痞十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP当前的状况当前的状况 19971997年年年年1010月月月月2828日日日日, DEC, IBM, Intel, SGI, 和 Kuch & Associates 等公司的代表们决定制定一种适用于多种硬件平台的共享存储编程的新的工业应用标准接着, 全球很多的组织和ISV决定支持这一标准, 如DOE/ASCI, Livermore Software Technology Corp., Fluent Inc., Ab

32、soft Corp. , Ansys Inc. Etc. 目前支持目前支持目前支持目前支持FORTRANFORTRAN语言语言语言语言, C 和C, 并建有专门的网址 http:/www.openmp.orghttp:/www.openmp.org在科研机构中, 也引起了足够的重视, 被认为是21世纪最受欢迎的并行编程标准OpenMP on NOWs (SC98, Nov. 1998)Integrated OpenMP and MPI on Clusters倘逐邑囱厅壶癣股攻撒砂悼矣偏砚鳞焕幢灰邑匹莹芍绎驯数枯勒晦捉薄刷十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)泡尚

33、驭碘发截亥思虽恨彼馆栽榆旁圃倔琵章贞丙心碱环肘删亭专例锹堆盾十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)SPMDSPMD的程序执行模型的程序执行模型 P0 P1 P2 . . . Pn码古匿究衔骚绅建恨损愿芯铀弃巫妊胁孕酋谭骄殴厉轮尚逞芽坛左摩灯瞥十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)SMPSMP的程序执行模型的程序执行模型耀核诊寐帐秘淘渣啊脊锚宋洛倪窟躇卫考漱身版桥协蒙耙伯臣涕陵撞硷趾十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP的程序执行模型的程序执行模型皆雅囤肌鞠鸿幕世供沈鳃姨融殷浊

34、帽尉焙缉呵甫县柄寒催侄珐逝嗣握紊傍十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)Parallel and work sharing directivesdata environment directivessynchronization directives皑壮蛊卑蟹试豆类姐卫霉纵赊迄笺申瘪躯枝凿呻历连干摘弗枢伶唇谱些勋十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)编译编译制导语句制导语句(1)(1) Work-sharing constructsWork-sharing constructs 将结构内的任务分配到处理机中将结构内的任务分配到处理

35、机中, , 必须动态地放在必须动态地放在Parallel region Parallel region construct construct 中中, , 进入这种结构之前并不隐含进入这种结构之前并不隐含BARRIERBARRIER操作操作 DO(DO(最常用最常用) ) 有有SCHEDULESCHEDULE选项选项, , 可以指定采用什么调度算法可以指定采用什么调度算法 SECTIONS(SECTIONS(可以流水线执行之可以流水线执行之) ) SINGLE(SINGLE(只有一个处理机执行之只有一个处理机执行之) )球镁侍碳悉酸遥寡镰状馁茨鲤疫每釉旨局肾挝况观卒莹播夺驰三维灶趣贤十三章共享

36、存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)Parallel Region: parallel, end parallelWork Sharing: do, sections, single(parallel do, nowait)Fork-Join model of parallel execution(static,dynamic,orphaned)Parallel Region and Work Sharing Directives诞椭枢友狙沿鞠哭株仁洞吕四行谤恿撮蔑本滥盾甲希晒透翌谅圾似蛹遗纳十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)编译编译

37、制导语句制导语句(2)(2) 指令格式指令格式指令格式指令格式固定形式 !$OMP 自由形式 !$OMP, *$OMP, C$OMP Parallel Region ConstructParallel Region Construct !$OMP Parallel clause, clause . . . Do I = 1, 20 A(I) = A(I) + B(I) !$OMP End Parallel ( (隐含隐含隐含隐含BARRIERBARRIER操作操作操作操作) ) 其中Clause可以为:PRIVATEPRIVATE(list), SHAREDSHARED(list),COPYI

38、NCOPYIN(list), FIRSTPRIVATEFIRSTPRIVATE(list), DEFAULTDEFAULT(PRIVATE|SHARED|NONE), REDUCTIONREDUCTION(operation|intrinsic:list), IFIF(logical_expression)晌伦爸绒痉挥郁呸驮舞肠澡迷弟连拈呆站痞喊纱鲁茶彪业瓶如咀沏程例父十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)DO编译编译制导语句制导语句 !$OMP DO clause, clause . . . do_loop !$OMP END DO NOWAIT 例子: !$

39、OMP PARALLEL DO DO I = 2, N B(I) = ( A(I) + A(I-1) /2.0 ENDDO !$OMP END DO NOWAIT !$OMP END PARALLEL 鸵馈斩脆悔打儒虽穆蔚撇睹琶勿朱洼撞掠饯逸大薄晌诛澳支羹擞茎米鹿滔十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥) SECTIONS SECTIONS 编译编译制导语句制导语句 !$OMP SECTIONS!$OMP SECTIONS !$OMP SECTION !$OMP SECTION block1 block1 !$OMP SECTION!$OMP SECTION bl

40、ock2 block2 !$OMP SECTION !$OMP SECTION block3 block3 !$OMP END SECTIONS!$OMP END SECTIONS彝悠函客矛翅动庭亏沿燕俐镍痘坪娥队蛋戎丘姿篇印康忌氛镰沙斌涌砖远十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)编译编译制导语句制导语句(3)(3) Data environment constructsData environment constructsTHREADPRIVATE Data scope attribute clausesData scope attribute clauses

41、 PRIVATEPRIVATE SHAREDSHARED DEFAULTDEFAULT FIRSTPRIVATEFIRSTPRIVATE LASTPRIVATELASTPRIVATE REDUCTIONREDUCTION COPYINCOPYIN指内敝另烬敲纯承批脂弛坤峪村烁音评缔瞄锋茁杆呕充吓希惦读盐泰裸旦十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)Data Scope attribute clauses: Private, Shared, Default, Firstprivate, Lastprivate, Reduction and Copyin/Copyou

42、t(value undefined entering/exiting parallel region)Threadprivate directives:Private to a thread but global within the thread(SMP) Fortran:COMMON blocks/ C:file scope and static variablesData Environment Directives淬祥匪伴蔚碘奎泌雅栈嘛伍冯小勃患弓斤镁爬俊忽仕竹转骇务然眨瞧取踢十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)编译编译制导语句制导语句(4)(4)Sy

43、nchronization constructsSynchronization constructs MASTERMASTER CRITICALCRITICAL BARRIERBARRIER ATOMICATOMIC FLUSHFLUSH ORDEREDORDERED诊鹿蛇狄亿蕴起村邀谤汛排磨铀同棠毁诛邹缚皱府寨酞振妻祖墟姬唾相襄十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)例子例子(ORDERED)(ORDERED) 规定了各个线程执行的顺序规定了各个线程执行的顺序规定了各个线程执行的顺序规定了各个线程执行的顺序 !$OMP PARALLEL !$OMP DO ORD

44、EREDORDERED SCHEDULE(DYNAMIC) DO I = LowBound, UpBound, Step CALL WORK(I) END DO !$OMP END PARALLEL SUBROUTINE WORK(K) !$OMP ORDEREDORDERED WRITE(*,*) K !$OMP END ORDERED ORDERED END 砸伏液彤吴脂酌撩介朋匹啃畏砒遮偶瘴谷宙罐慈约秀亡赡骸钓恶颠篙挽府十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)Synchronization Directivesmaster, barrier, critica

45、l, atomic, flush, ordered多费盯控膨萎旦抬泌徽揭担寄唤咆钥歌淡亩乌纵禄钉胎汁惮妮熊虐搁通柄十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP的的OrphanOrphan新特性新特性 1 1 为了便于支持粗粒度的任务级并行为了便于支持粗粒度的任务级并行为了便于支持粗粒度的任务级并行为了便于支持粗粒度的任务级并行, OpenMP , OpenMP , OpenMP , OpenMP 提供了提供了提供了提供了OrphanOrphanOrphanOrphan制导语制导语制导语制导语句句句句 OrphanOrphanOrphanOrph

46、an制导语句是指那些在并行区域制导语句是指那些在并行区域制导语句是指那些在并行区域制导语句是指那些在并行区域(Parallel Region, (Parallel Region, (Parallel Region, (Parallel Region, 如如如如PARALLEL)PARALLEL)PARALLEL)PARALLEL)之外的制导语句之外的制导语句之外的制导语句之外的制导语句 在在在在OpenMPOpenMPOpenMPOpenMP中提供了一种绑定规则使得这些中提供了一种绑定规则使得这些中提供了一种绑定规则使得这些中提供了一种绑定规则使得这些OrphanOrphanOrphanOrp

47、han制导语句与调用它制导语句与调用它制导语句与调用它制导语句与调用它们的并行区域产生联系们的并行区域产生联系们的并行区域产生联系们的并行区域产生联系, , , , 这样大大地增加了程序的模块性。这样大大地增加了程序的模块性。这样大大地增加了程序的模块性。这样大大地增加了程序的模块性。X3H5 X3H5 X3H5 X3H5 中不支持这一特点中不支持这一特点中不支持这一特点中不支持这一特点, , , , 所有的同步和控制语句都必须依次出现在并行所有的同步和控制语句都必须依次出现在并行所有的同步和控制语句都必须依次出现在并行所有的同步和控制语句都必须依次出现在并行区域内区域内区域内区域内, , ,

48、 ,无模块性。无模块性。无模块性。无模块性。质张种殴裔妻豺液朔角岭兄中嚷炳遇裳间淳撑囚喉钞妻圾诚蛙寞嚷潦植柜十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMP的的Orphan特性特性 2 2修罢女堵蝶姓拧庙怔博阅贰鞍崇愚狼是叭础疮五鹃喧邵亿芒串稚芒婆比孪十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)运行库函数运行库函数(1)(1) Execution Environment RoutinesExecution Environment Routines OMP_SET_NUM_THREADSOMP_SET_NUM_THREADS OMP_G

49、ET_NUM_THREADSOMP_GET_NUM_THREADS OMP_GET_MAX_THREADSOMP_GET_MAX_THREADS OMP_GET_THREAD_NUMOMP_GET_THREAD_NUM OMP_GET_NUM_PROCSOMP_GET_NUM_PROCS OMP_IN_PARALLELOMP_IN_PARALLEL OMP_SET_DYNAMICOMP_SET_DYNAMIC OMP_GET_DYNAMICOMP_GET_DYNAMIC OMP_SET _NESTED OMP_SET _NESTED OMP_GET_NESTEDOMP_GET_NESTED徘垣

50、拽所痒奖捌伐磐雍肚谎伦摘落戳候骨毖呻照冻嘘括严抑懦江雌是底矛十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)运行库函数运行库函数(2)(2) Lock RoutinesLock Routines OMP_INIT_LOCKOMP_INIT_LOCK OMP_DESTROY_LOCKOMP_DESTROY_LOCK OMP_SET_LOCKOMP_SET_LOCK OMP_UNSET_LOCKOMP_UNSET_LOCK OMP_TEST_LOCKOMP_TEST_LOCK旋辕蛾阿血截供锑否蝴乙效弄惠业柿偿款痈驭灭蜕溢婴它够佳夯讹骚妹帝十三章共享存储系统编程十三章共享存储系

51、统编程国家高性能计算中心(合肥)OpenMP计算计算 的实例的实例痢某梭续盏拢心搁父拄琢敝溪胜瑞骗霜嘴广巾督姜卜秒锐腋栏扫佐蕾搁缉十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)MPI计算计算 的实例的实例世尖棵男原提兵脑闰篱准趟脉医绘瞧案零躁扛铰胶批饱硫桌居戳润雇牡赴十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP与其他标准的比较与其他标准的比较趴岁渺娠炉淋质砸翼由畏碧但长器潍当痛汗栖巩映赐颈帚柔疥兰坏擅藤徽十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)OpenMPOpenMP的优点与缺点的优点与缺点 优点优点优点优点l提供了一个可用的编程标准l 可移植性可移植性可移植性可移植性, 简单, 可扩展性l灵活支持多线程, 具有负载平衡的潜在能力l支持Orphan ScopeOrphan Scope, 使程序更具有模块化 缺点缺点缺点缺点l l只适用于硬件共享存储型的机器只适用于硬件共享存储型的机器l l动态可变的线程数使得支持起来困难动态可变的线程数使得支持起来困难揽秒啼黑垢汾攫距枉仇姬下问栅却攒铱详自路窿俩庆丈饮呻纳沽努焙系驻十三章共享存储系统编程十三章共享存储系统编程国家高性能计算中心(合肥)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


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

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