PC13中科大并行计算教学

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

国家高性能计算中心(合肥)第十三章共享存储系统编程国家高性能计算中心(合肥)共享存储系统编程13.1ANSIX3H5共享存储模型13.2POSIX线程模型13.3OpenMP模型国家高性能计算中心(合肥)编程标准的作用规定程序的执行模型SPMD,SMP等如何表达并行性DOACROSS,FORALL,PARALLEL,INDEPENDENT如何表达同步Lock,Barrier,Semaphore,ConditionVariables如何获得运行时的环境变量threadid,numofprocesses国家高性能计算中心(合肥)ANSIX3H5共享存储器模型Startedinthemid-80’swiththeemergenceofsharedmemoryparallelcomputerswithproprietarydirectivedrivenprogrammingenvironments更早的标准化结果—PCF共享存储器并行Fortran1993年制定的概念性编程模型LanguageBindingCFortran77Fortran90国家高性能计算中心(合肥)并行块(工作共享构造)并行块(psections...endpsections)并行循环(pdo...Endopdo)单进程(psingle...Endpsingle)可嵌套非共享块重复执行隐式路障(nowait),显式路障和阻挡操作共享/私有变量线程同步门插销(latch):临界区锁:test,lock,unlock事件:wait,post,clear序数(ordinal):顺序国家高性能计算中心(合肥)X3H5:并行性构造Programmain!程序以顺序模式开始,此时只有一个A!A只由基本线程执行,称为主线程parallel!转换为并行模式,派生出多个子线程(一个组)B!B为每个组员所复制psections!并行块开始sectionC!一个组员执行CsectionD!一个组员执行Dendpsections!等待C和D都结束psingle!暂时转换成顺序模式E!已由一个组员执行endpsingle!转回并行模式pdoi=1,6!pdo构造开始F(i)!组员共享F的六次迭代endpdonowait!无隐式路障同步G!更多的复制代码endparallel!转为顺序模式H!初始化进程单独执行H...!可能有更多的并行构造End国家高性能计算中心(合肥)线程隐式路障同步PQRABCEF(1:2)GHGGF(3:4)F(5:6)DBB隐式路障同步隐式路障同步无隐式路障同步隐式路障同步国家高性能计算中心(合肥)共享存储系统编程13.1ANSIX3H5共享存储模型13.2POSIX线程模型13.3OpenMP模型国家高性能计算中心(合肥)POSIX线程模型IEEE/ANSI标准—IEEEPOSIX1003.1c-1995线程标准—Unix/NT操作系统层上的,SMPChorus,Topaz,MachCthreadsWin32ThreadGetThreadHandle,SetThreadPriority,SuspendThread,ResumeThreadTLS(线程局部存储)—TlsAlloc,TlsSetValueLinuxThreads:__cloneandsys_clone用户线程和内核线程(LWP)(一到一,一到多,多到多)国家高性能计算中心(合肥)WhatAreThreads?General-purposesolutionformanagingconcurrency.Multipleindependentexecutionstreams.Sharedstate.Preemptivescheduling.Synchronization(e.g.locks,conditions).Sharedstate(memory,files,etc.)Threads国家高性能计算中心(合肥)线程共享相同的内存空间。与标准fork()相比,线程带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的CPU时间。和进程一样,线程将利用多CPU。如果软件是针对多处理器系统设计的,计算密集型应用。支持内存共享无需使用繁琐的IPC和其它复杂的通信机制。Linux__clone不可移植,Pthread可移植。POSIX线程标准不记录任何“家族”信息。无父无子。如果要等待一个线程终止,就必须将线程的tid传递给pthread_join()。线程库无法为您断定tid。国家高性能计算中心(合肥)POSIXThreads:BasicsandExamplesbyUdayKamath~abw/parallel/pthreads/pthreads.htmlPOSIX线程详解:一种支持内存共享的简单和快捷的工具byDanielRobbins国家高性能计算中心(合肥)国家高性能计算中心(合肥)线程调用—线程管理POSIXSolaris2pthread_createthr_createpthread_exitthr_exitpthread_killthr_killpthread_jointhr_joinpthread_selfthr_self国家高性能计算中心(合肥)线程调用—线程同步和互斥POSIXSolaris2pthread_mutex_initmutex_initpthread_mutex_destroymutex_destroypthread_mutex_lockmutex_lockpthread_mutex_trylockmutex_trylockpthread_mutex_unlockmutex_unlockpthread_cond_initpthread_cond_destroypthread_cond_waitpthread_cond_timedwaitpthread_cond_signalpthread_cond_broadcast国家高性能计算中心(合肥)Pthreads实现计算的实例1国家高性能计算中心(合肥)Pthreads实现计算的实例2国家高性能计算中心(合肥)对生产者驱动的有界缓冲区问题的Pthread条件变量解void*producer(void*arg1){inti;for(i=1;i=SUMSIZE;i++){pthread_mutex_lock(&slot_lock);while(nslots=0)pthread_cond_wait(&slots,&slot_lock);nslots--;pthread_mutex_unlock(&slot_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);returnNULL;}void*consumer(void*arg2){inti,myitem;for(;;){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_locknslots++;cond_signal(&slots);pthread_mutex_unlock(&slot_lock);}returnNULL;}国家高性能计算中心(合肥)共享存储系统编程13.1ANSIX3H5共享存储模型13.2POSIX线程模型13.3OpenMP模型国家高性能计算中心(合肥)TheHistoryofOpenMPWhatisdirective/pragma?Directive-basedgeneralpurposeparallelprogrammingAPIwithemphasisontheabilitytoparallelizeexistingserialprogramsWhyanewstandard?Who’sInvolved?ParallelismmodelandbasicdirectivesFortran77,Fortran90C,C++OpenMP标准国家高性能计算中心(合肥)TheHistoryofOpenMPAkeyintermediatestepwasX3H5inthelate80’s.AnofficialstandardsefforttoagreeonaparalleldialectofFortranforsharedmemorycomputers.TheX3H5effortfailed.Itwastoobigandtoolate.OpenMPisborn:In1996agroupformedtocreateanindustrystandardsetofdirectivesforSMPprogrammingThisgroupcalleditselftheOpenMPArchitectureReviewBoard(theARB)whotakescareofOpenMP国家高性能计算中心(合肥)TheHistoryofOpenMP(cont.)TheARBhasreleasedthefollowingspecifications:OpenMP1.0forFortran,Nov.1997OpenMP1.0forC/C++,Nov.1998OpenMPFortranInterpretations,Spring1999OpenMP2.0(soon)OpenMPisanevolvingstandard.SendcommentsoverthefeedbacklinkontheOpenMPwebsite()国家高性能计算中心(合肥)为什么要建立新标准?ANSIX3H5,1994时机不好,分布式机器流行只支持循环级并行性,粒度太细Pthreads(IEEEPosix1003.4a)是为低端(lowend)的共享机器(如SMP)的标准对FORTRAN的支持不够适合任务并行,而不适合数据并行MPI消息传递的编程标准,对程序员要求高HPF主要用于分布式存储机器大量已有的科学应用程序需要很好地被继承和移植国家高性能计算中心(合肥)InaNutshellAsetofdirectives(libraryroutines,andenvironmentvariables)usedtoannotateasequentialprogramtoindicatehowitshouldbeexecutedinparallel—继承X3H5的许多概念Portable,SimpleandScalableSharedMemoryMultiprocessingAPInotanewlan

1 / 50
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功