共享存儲系統(tǒng)編程課件_第1頁
共享存儲系統(tǒng)編程課件_第2頁
共享存儲系統(tǒng)編程課件_第3頁
共享存儲系統(tǒng)編程課件_第4頁
共享存儲系統(tǒng)編程課件_第5頁
已閱讀5頁,還剩95頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第十三章共享存儲系統(tǒng)編程國家高性能計算中心(合肥)第十三章共享存儲系統(tǒng)編程國家高性能計算中心(合肥)1共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國2編程標準的作用規(guī)定程序的執(zhí)行模型

SPMD,SMP等如何表達并行性DOACROSS,FORALL,PARALLEL,INDEPENDENT

如何表達同步Lock,Barrier,Semaphore,ConditionVariables如何獲得運行時的環(huán)境變量threadid,numofprocesses國家高性能計算中心(合肥)編程標準的作用規(guī)定程序的執(zhí)行模型國家高性能計算中心(合肥)3ANSIX3H5共享存儲器模型Startedinthemid-80’swiththeemergenceofsharedmemoryparallelcomputerswithproprietarydirectivedrivenprogrammingenvironments更早的標準化結(jié)果—PCF共享存儲器并行Fortran1993年制定的概念性編程模型LanguageBindingCFortran77Fortran90國家高性能計算中心(合肥)ANSIX3H5共享存儲器模型Startedinthe4并行塊(工作共享構(gòu)造)并行塊(psections...endpsections)并行循環(huán)(pdo...Endopdo)單進程(psingle...Endpsingle)可嵌套非共享塊重復執(zhí)行隱式路障(nowait),顯式路障和阻擋操作共享/私有變量線程同步門插銷(latch):臨界區(qū)鎖:test,lock,unlock事件:wait,post,clear序數(shù)(ordinal):順序國家高性能計算中心(合肥)并行塊(工作共享構(gòu)造)國家高性能計算中心(合肥)5X3H5:并行性構(gòu)造Programmain !程序以順序模式開始,此時只有一個

A !A只由基本線程執(zhí)行,稱為主線程

parallel !轉(zhuǎn)換為并行模式,派生出多個子線程(一個組)

B !B為每個組員所復制

psections !并行塊開始

section C !一個組員執(zhí)行C section D !一個組員執(zhí)行D endpsections !等待C和D都結(jié)束

psingle !暫時轉(zhuǎn)換成順序模式

E !已由一個組員執(zhí)行

endpsingle !轉(zhuǎn)回并行模式

pdoi=1,6 !pdo構(gòu)造開始

F(i) !組員共享F的六次迭代

endpdonowait !無隱式路障同步

G !更多的復制代碼

endparallel !轉(zhuǎn)為順序模式

H !初始化進程單獨執(zhí)行H ... !可能有更多的并行構(gòu)造End國家高性能計算中心(合肥)X3H5:并行性構(gòu)造Programmain !程序以6線程隱式路障同步PQRABCEF(1:2)GHGGF(3:4)F(5:6)DBB隱式路障同步隱式路障同步無隱式路障同步隱式路障同步國家高性能計算中心(合肥)線程隱式路障同步PQRABCEF(1:2)GHGGF(3:47共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國8POSIX線程模型IEEE/ANSI標準—IEEEPOSIX1003.1c-1995線程標準—Unix/NT操作系統(tǒng)層上的,SMPChorus,Topaz,MachCthreadsWin32ThreadGetThreadHandle,SetThreadPriority,SuspendThread,ResumeThreadTLS(線程局部存儲)—TlsAlloc,TlsSetValueLinuxThreads:__cloneandsys_clone用戶線程和內(nèi)核線程(LWP)(一到一,一到多,多到多)國家高性能計算中心(合肥)POSIX線程模型IEEE/ANSI標準—IEEEPOSI9WhatAreThreads?General-purposesolutionformanagingconcurrency.Multipleindependentexecutionstreams.Sharedstate.Preemptivescheduling.Synchronization(e.g.locks,conditions).Sharedstate(memory,files,etc.)Threads國家高性能計算中心(合肥)WhatAreThreads?General-purpo10線程共享相同的內(nèi)存空間。與標準fork()相比,線程帶來的開銷很小。內(nèi)核無需單獨復制進程的內(nèi)存空間或文件描述符等等。這就節(jié)省了大量的CPU時間。和進程一樣,線程將利用多CPU。如果軟件是針對多處理器系統(tǒng)設(shè)計的,計算密集型應用。支持內(nèi)存共享無需使用繁瑣的IPC和其它復雜的通信機制。Linux__clone不可移植,Pthread可移植。POSIX線程標準不記錄任何“家族”信息。無父無子。如果要等待一個線程終止,就必須將線程的tid傳遞給pthread_join()。線程庫無法為您斷定tid。國家高性能計算中心(合肥)線程共享相同的內(nèi)存空間。國家高性能計算中心(合肥)11POSIXThreads:BasicsandExamplesbyUdayKamath/~abw/parallel/pthreads/pthreads.htmlPOSIX線程詳解:一種支持內(nèi)存共享的簡單和快捷的工具byDanielRobbins/developerWorks/linux/thread/posix_thread1/index.shtml國家高性能計算中心(合肥)POSIXThreads:BasicsandExam12國家高性能計算中心(合肥)國家高性能計算中心(合肥)13線程調(diào)用—線程管理POSIX Solaris2pthread_create thr_createpthread_exit thr_exitpthread_kill thr_killpthread_join thr_joinpthread_self thr_self國家高性能計算中心(合肥)線程調(diào)用—線程管理POSIX Solaris2國家高14線程調(diào)用—線程同步和互斥POSIX Solaris2pthread_mutex_init mutex_initpthread_mutex_destroy mutex_destroypthread_mutex_lock mutex_lockpthread_mutex_trylock mutex_trylockpthread_mutex_unlock mutex_unlockpthread_cond_initpthread_cond_destroypthread_cond_waitpthread_cond_timedwaitpthread_cond_signalpthread_cond_broadcast國家高性能計算中心(合肥)線程調(diào)用—線程同步和互斥POSIX Solaris215Pthreads實現(xiàn)計算的實例1國家高性能計算中心(合肥)Pthreads實現(xiàn)計算的實例1國家高性能計算中心(合肥16Pthreads實現(xiàn)計算的實例2國家高性能計算中心(合肥)Pthreads實現(xiàn)計算的實例2國家高性能計算中心(合肥17對生產(chǎn)者驅(qū)動的有界緩沖區(qū)問題的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;}國家高性能計算中心(合肥)對生產(chǎn)者驅(qū)動的有界緩沖區(qū)問題的Pthread條件變量解voi18共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國19TheHistoryofOpenMPWhatisdirective/pragma?Directive-basedgeneralpurposeparallelprogrammingAPIwithemphasisontheabilitytoparallelizeexistingserialprogramsWhyanewstandard?Who’sInvolved?ParallelismmodelandbasicdirectivesFortran77,Fortran90C,C++OpenMP標準國家高性能計算中心(合肥)TheHistoryofOpenMPOpenMP標準國20TheHistoryofOpenMPAkeyintermediatestepwasX3H5inthelate80’s.AnofficialstandardsefforttoagreeonaparalleldialectofFortranforsharedmemorycomputers.TheX3H5effortfailed.Itwastoobigandtoolate.OpenMPisborn:In1996agroupformedtocreateanindustrystandardsetofdirectivesforSMPprogrammingThisgroupcalleditselftheOpenMPArchitectureReviewBoard(theARB)whotakescareofOpenMP國家高性能計算中心(合肥)TheHistoryofOpenMPAkeyint21TheHistoryofOpenMP(cont.)TheARBhasreleasedthefollowingspecifications:OpenMP1.0forFortran,Nov.1997OpenMP1.0forC/C++,Nov.1998OpenMPFortranInterpretations,Spring1999OpenMP2.0(soon)OpenMPisanevolvingstandard.SendcommentsoverthefeedbacklinkontheOpenMPwebsite()國家高性能計算中心(合肥)TheHistoryofOpenMP(cont.)Th22為什么要建立新標準?ANSIX3H5,1994時機不好,分布式機器流行只支持循環(huán)級并行性,粒度太細Pthreads(IEEEPosix1003.4a)是為低端(lowend)的共享機器(如SMP)的標準對FORTRAN的支持不夠適合任務(wù)并行,而不適合數(shù)據(jù)并行MPI消息傳遞的編程標準,對程序員要求高HPF主要用于分布式存儲機器大量已有的科學應用程序需要很好地被繼承和移植

國家高性能計算中心(合肥)為什么要建立新標準?ANSIX3H5,1994國家高23InaNutshellAsetofdirectives(libraryroutines,andenvironmentvariables)usedtoannotateasequentialprogramtoindicatehowitshouldbeexecutedinparallel—繼承X3H5的許多概念Portable,SimpleandScalableSharedMemoryMultiprocessingAPInotanewlanguagenotautomaticparallelizationextendbaselanguages:Fortran77,Fortran90,CandC++Multi-vendorSupport,forbothUNIXandNTStandardizesFineGrained(Loop)Parallelism,alsoSupportsCoarseGrainedAlgorithms國家高性能計算中心(合肥)InaNutshellAsetofdirectiv24OpenMP是什么?一組編譯制導語句和可調(diào)用的運行(run-time)庫函數(shù),擴充到基本語言中用來表達程序中的并行性編譯制導語句包括:在串行程序中加入下列結(jié)構(gòu)SPMD(SingleProgramMultipleData)constructswork-sharingconstructssynchronizationconstructsdataenvironmentconstructs

運行庫函數(shù)包括:executionenvironmentroutineslockroutines另外,在FORTRAN標準中,還包括對環(huán)境變量的描述國家高性能計算中心(合肥)OpenMP是什么?一組編譯制導語句和可調(diào)用的運行(run-25國家高性能計算中心(合肥)國家高性能計算中心(合肥)26OpenMP當前的狀況1997年10月28日,DEC,IBM,Intel,SGI,和Kuch&Associates等公司的代表們決定制定一種適用于多種硬件平臺的共享存儲編程的新的工業(yè)應用標準接著,全球很多的組織和ISV決定支持這一標準,如DOE/ASCI,LivermoreSoftwareTechnologyCorp.,FluentInc.,AbsoftCorp.,AnsysInc.Etc.目前支持FORTRAN語言,C和C,并建有專門的網(wǎng)址在科研機構(gòu)中,也引起了足夠的重視,被認為是21世紀最受歡迎的并行編程標準OpenMPonNOWs(SC98,Nov.1998)IntegratedOpenMPandMPIonClusters國家高性能計算中心(合肥)OpenMP當前的狀況1997年10月28日,DEC,I27國家高性能計算中心(合肥)國家高性能計算中心(合肥)28SPMD的程序執(zhí)行模型

P0

P1P2...Pn國家高性能計算中心(合肥)SPMD的程序執(zhí)行模型P0P1P229SMP的程序執(zhí)行模型國家高性能計算中心(合肥)SMP的程序執(zhí)行模型國家高性能計算中心(合肥)30OpenMP的程序執(zhí)行模型國家高性能計算中心(合肥)OpenMP的程序執(zhí)行模型國家高性能計算中心(合肥)31Parallelandworksharingdirectivesdataenvironmentdirectivessynchronizationdirectives國家高性能計算中心(合肥)Parallelandworksharingdire32編譯制導語句(1)Work-sharingconstructs將結(jié)構(gòu)內(nèi)的任務(wù)分配到處理機中,必須動態(tài)地放在Parallelregionconstruct中,進入這種結(jié)構(gòu)之前并不隱含BARRIER操作DO(最常用)有SCHEDULE選項,可以指定采用什么調(diào)度算法SECTIONS(可以流水線執(zhí)行之)SINGLE(只有一個處理機執(zhí)行之)國家高性能計算中心(合肥)編譯制導語句(1)Work-sharingconstruc33ParallelRegion:parallel,endparallelWorkSharing:do,sections,single(paralleldo,nowait)Fork-Joinmodelofparallelexecution(static,dynamic,orphaned)ParallelRegionandWorkSharingDirectives國家高性能計算中心(合肥)ParallelRegion:parallel,end34編譯制導語句(2)指令格式固定形式!$OMP自由形式!$OMP,*$OMP,C$OMPParallelRegionConstruct!$OMPParallel[clause[[,]clause]...]DoI=1,20A(I)=A(I)+B(I)!$OMPEndParallel(隱含BARRIER操作)其中Clause可以為:PRIVATE(list),SHARED(list),COPYIN(list),FIRSTPRIVATE(list),DEFAULT(PRIVATE|SHARED|NONE),REDUCTION({operation|intrinsic}:list),IF(logical_expression)國家高性能計算中心(合肥)編譯制導語句(2)指令格式國家高性能計算中心(合肥)35DO編譯制導語句!$OMPDO[clause[[,]clause]...]do_loop[!$OMPENDDO[NOWAIT]]例子:!$OMPPARALLELDODOI=2,NB(I)=(A(I)+A(I-1))/2.0ENDDO!$OMPENDDONOWAIT!$OMPENDPARALLEL國家高性能計算中心(合肥)DO編譯制導語句!$OMPDO[clause[[,]c36

SECTIONS編譯制導語句!$OMPSECTIONS!$OMPSECTIONblock1!$OMPSECTIONblock2!$OMPSECTIONblock3!$OMPENDSECTIONS國家高性能計算中心(合肥)SECTIONS編譯制導語句!$OMPSECTIONS37編譯制導語句(3)DataenvironmentconstructsTHREADPRIVATEDatascopeattributeclausesPRIVATESHAREDDEFAULTFIRSTPRIVATELASTPRIVATEREDUCTIONCOPYIN國家高性能計算中心(合肥)編譯制導語句(3)Dataenvironmentcons38DataScopeattributeclauses:Private,Shared,Default,Firstprivate,Lastprivate,ReductionandCopyin/Copyout(valueundefinedentering/exitingparallelregion)Threadprivatedirectives:Privatetoathreadbutglobalwithinthethread(SMP)Fortran:COMMONblocks /C:filescopeandstaticvariablesDataEnvironmentDirectives國家高性能計算中心(合肥)DataScopeattributeclauses:39編譯制導語句(4)SynchronizationconstructsMASTERCRITICALBARRIERATOMICFLUSHORDERED國家高性能計算中心(合肥)編譯制導語句(4)Synchronizationconst40例子(ORDERED)規(guī)定了各個線程執(zhí)行的順序!$OMPPARALLEL!$OMPDOORDEREDSCHEDULE(DYNAMIC)DOI=LowBound,UpBound,StepCALLWORK(I)ENDDO!$OMPENDPARALLELSUBROUTINEWORK(K)!$OMPORDERED

WRITE(*,*)K!$OMPENDORDEREDEND國家高性能計算中心(合肥)例子(ORDERED)規(guī)定了各個線程執(zhí)行的順序國家高性能計算41SynchronizationDirectivesmaster,barrier,critical,atomic,flush,ordered國家高性能計算中心(合肥)SynchronizationDirectivesmast42OpenMP的Orphan新特性1為了便于支持粗粒度的任務(wù)級并行,OpenMP提供了Orphan制導語句Orphan制導語句是指那些在并行區(qū)域(ParallelRegion,如PARALLEL)之外的制導語句在OpenMP中提供了一種綁定規(guī)則使得這些Orphan制導語句與調(diào)用它們的并行區(qū)域產(chǎn)生聯(lián)系,這樣大大地增加了程序的模塊性。X3H5中不支持這一特點,所有的同步和控制語句都必須依次出現(xiàn)在并行區(qū)域內(nèi),無模塊性。國家高性能計算中心(合肥)OpenMP的Orphan新特性1為了便于支持粗粒度的任務(wù)43OpenMP的Orphan特性2國家高性能計算中心(合肥)OpenMP的Orphan特性2國家高性能計算中心(合肥)44運行庫函數(shù)(1)ExecutionEnvironmentRoutinesOMP_SET_NUM_THREADSOMP_GET_NUM_THREADSOMP_GET_MAX_THREADSOMP_GET_THREAD_NUMOMP_GET_NUM_PROCSOMP_IN_PARALLELOMP_SET_DYNAMICOMP_GET_DYNAMICOMP_SET_NESTEDOMP_GET_NESTED國家高性能計算中心(合肥)運行庫函數(shù)(1)ExecutionEnvironment45運行庫函數(shù)(2)LockRoutinesOMP_INIT_LOCKOMP_DESTROY_LOCKOMP_SET_LOCKOMP_UNSET_LOCKOMP_TEST_LOCK國家高性能計算中心(合肥)運行庫函數(shù)(2)LockRoutines國家高性能計算中心46OpenMP計算的實例國家高性能計算中心(合肥)OpenMP計算的實例國家高性能計算中心(合肥)47MPI計算的實例國家高性能計算中心(合肥)MPI計算的實例國家高性能計算中心(合肥)48OpenMP與其他標準的比較國家高性能計算中心(合肥)OpenMP與其他標準的比較國家高性能計算中心(合肥)49OpenMP的優(yōu)點與缺點優(yōu)點提供了一個可用的編程標準

可移植性,簡單,可擴展性靈活支持多線程,具有負載平衡的潛在能力支持OrphanScope,使程序更具有模塊化缺點只適用于硬件共享存儲型的機器動態(tài)可變的線程數(shù)使得支持起來困難國家高性能計算中心(合肥)OpenMP的優(yōu)點與缺點優(yōu)點國家高性能計算中心(合肥)50第十三章共享存儲系統(tǒng)編程國家高性能計算中心(合肥)第十三章共享存儲系統(tǒng)編程國家高性能計算中心(合肥)51共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國52編程標準的作用規(guī)定程序的執(zhí)行模型

SPMD,SMP等如何表達并行性DOACROSS,FORALL,PARALLEL,INDEPENDENT

如何表達同步Lock,Barrier,Semaphore,ConditionVariables如何獲得運行時的環(huán)境變量threadid,numofprocesses國家高性能計算中心(合肥)編程標準的作用規(guī)定程序的執(zhí)行模型國家高性能計算中心(合肥)53ANSIX3H5共享存儲器模型Startedinthemid-80’swiththeemergenceofsharedmemoryparallelcomputerswithproprietarydirectivedrivenprogrammingenvironments更早的標準化結(jié)果—PCF共享存儲器并行Fortran1993年制定的概念性編程模型LanguageBindingCFortran77Fortran90國家高性能計算中心(合肥)ANSIX3H5共享存儲器模型Startedinthe54并行塊(工作共享構(gòu)造)并行塊(psections...endpsections)并行循環(huán)(pdo...Endopdo)單進程(psingle...Endpsingle)可嵌套非共享塊重復執(zhí)行隱式路障(nowait),顯式路障和阻擋操作共享/私有變量線程同步門插銷(latch):臨界區(qū)鎖:test,lock,unlock事件:wait,post,clear序數(shù)(ordinal):順序國家高性能計算中心(合肥)并行塊(工作共享構(gòu)造)國家高性能計算中心(合肥)55X3H5:并行性構(gòu)造Programmain !程序以順序模式開始,此時只有一個

A !A只由基本線程執(zhí)行,稱為主線程

parallel !轉(zhuǎn)換為并行模式,派生出多個子線程(一個組)

B !B為每個組員所復制

psections !并行塊開始

section C !一個組員執(zhí)行C section D !一個組員執(zhí)行D endpsections !等待C和D都結(jié)束

psingle !暫時轉(zhuǎn)換成順序模式

E !已由一個組員執(zhí)行

endpsingle !轉(zhuǎn)回并行模式

pdoi=1,6 !pdo構(gòu)造開始

F(i) !組員共享F的六次迭代

endpdonowait !無隱式路障同步

G !更多的復制代碼

endparallel !轉(zhuǎn)為順序模式

H !初始化進程單獨執(zhí)行H ... !可能有更多的并行構(gòu)造End國家高性能計算中心(合肥)X3H5:并行性構(gòu)造Programmain !程序以56線程隱式路障同步PQRABCEF(1:2)GHGGF(3:4)F(5:6)DBB隱式路障同步隱式路障同步無隱式路障同步隱式路障同步國家高性能計算中心(合肥)線程隱式路障同步PQRABCEF(1:2)GHGGF(3:457共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國58POSIX線程模型IEEE/ANSI標準—IEEEPOSIX1003.1c-1995線程標準—Unix/NT操作系統(tǒng)層上的,SMPChorus,Topaz,MachCthreadsWin32ThreadGetThreadHandle,SetThreadPriority,SuspendThread,ResumeThreadTLS(線程局部存儲)—TlsAlloc,TlsSetValueLinuxThreads:__cloneandsys_clone用戶線程和內(nèi)核線程(LWP)(一到一,一到多,多到多)國家高性能計算中心(合肥)POSIX線程模型IEEE/ANSI標準—IEEEPOSI59WhatAreThreads?General-purposesolutionformanagingconcurrency.Multipleindependentexecutionstreams.Sharedstate.Preemptivescheduling.Synchronization(e.g.locks,conditions).Sharedstate(memory,files,etc.)Threads國家高性能計算中心(合肥)WhatAreThreads?General-purpo60線程共享相同的內(nèi)存空間。與標準fork()相比,線程帶來的開銷很小。內(nèi)核無需單獨復制進程的內(nèi)存空間或文件描述符等等。這就節(jié)省了大量的CPU時間。和進程一樣,線程將利用多CPU。如果軟件是針對多處理器系統(tǒng)設(shè)計的,計算密集型應用。支持內(nèi)存共享無需使用繁瑣的IPC和其它復雜的通信機制。Linux__clone不可移植,Pthread可移植。POSIX線程標準不記錄任何“家族”信息。無父無子。如果要等待一個線程終止,就必須將線程的tid傳遞給pthread_join()。線程庫無法為您斷定tid。國家高性能計算中心(合肥)線程共享相同的內(nèi)存空間。國家高性能計算中心(合肥)61POSIXThreads:BasicsandExamplesbyUdayKamath/~abw/parallel/pthreads/pthreads.htmlPOSIX線程詳解:一種支持內(nèi)存共享的簡單和快捷的工具byDanielRobbins/developerWorks/linux/thread/posix_thread1/index.shtml國家高性能計算中心(合肥)POSIXThreads:BasicsandExam62國家高性能計算中心(合肥)國家高性能計算中心(合肥)63線程調(diào)用—線程管理POSIX Solaris2pthread_create thr_createpthread_exit thr_exitpthread_kill thr_killpthread_join thr_joinpthread_self thr_self國家高性能計算中心(合肥)線程調(diào)用—線程管理POSIX Solaris2國家高64線程調(diào)用—線程同步和互斥POSIX Solaris2pthread_mutex_init mutex_initpthread_mutex_destroy mutex_destroypthread_mutex_lock mutex_lockpthread_mutex_trylock mutex_trylockpthread_mutex_unlock mutex_unlockpthread_cond_initpthread_cond_destroypthread_cond_waitpthread_cond_timedwaitpthread_cond_signalpthread_cond_broadcast國家高性能計算中心(合肥)線程調(diào)用—線程同步和互斥POSIX Solaris265Pthreads實現(xiàn)計算的實例1國家高性能計算中心(合肥)Pthreads實現(xiàn)計算的實例1國家高性能計算中心(合肥66Pthreads實現(xiàn)計算的實例2國家高性能計算中心(合肥)Pthreads實現(xiàn)計算的實例2國家高性能計算中心(合肥67對生產(chǎn)者驅(qū)動的有界緩沖區(qū)問題的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;}國家高性能計算中心(合肥)對生產(chǎn)者驅(qū)動的有界緩沖區(qū)問題的Pthread條件變量解voi68共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型13.2POSIX線程模型13.3OpenMP模型國家高性能計算中心(合肥)共享存儲系統(tǒng)編程13.1ANSIX3H5共享存儲模型國69TheHistoryofOpenMPWhatisdirective/pragma?Directive-basedgeneralpurposeparallelprogrammingAPIwithemphasisontheabilitytoparallelizeexistingserialprogramsWhyanewstandard?Who’sInvolved?ParallelismmodelandbasicdirectivesFortran77,Fortran90C,C++OpenMP標準國家高性能計算中心(合肥)TheHistoryofOpenMPOpenMP標準國70TheHistoryofOpenMPAkeyintermediatestepwasX3H5inthelate80’s.AnofficialstandardsefforttoagreeonaparalleldialectofFortranforsharedmemorycomputers.TheX3H5effortfailed.Itwastoobigandtoolate.OpenMPisborn:In1996agroupformedtocreateanindustrystandardsetofdirectivesforSMPprogrammingThisgroupcalleditselftheOpenMPArchitectureReviewBoard(theARB)whotakescareofOpenMP國家高性能計算中心(合肥)TheHistoryofOpenMPAkeyint71TheHistoryofOpenMP(cont.)TheARBhasreleasedthefollowingspecifications:OpenMP1.0forFortran,Nov.1997OpenMP1.0forC/C++,Nov.1998OpenMPFortranInterpretations,Spring1999OpenMP2.0(soon)OpenMPisanevolvingstandard.SendcommentsoverthefeedbacklinkontheOpenMPwebsite()國家高性能計算中心(合肥)TheHistoryofOpenMP(cont.)Th72為什么要建立新標準?ANSIX3H5,1994時機不好,分布式機器流行只支持循環(huán)級并行性,粒度太細Pthreads(IEEEPosix1003.4a)是為低端(lowend)的共享機器(如SMP)的標準對FORTRAN的支持不夠適合任務(wù)并行,而不適合數(shù)據(jù)并行MPI消息傳遞的編程標準,對程序員要求高HPF主要用于分布式存儲機器大量已有的科學應用程序需要很好地被繼承和移植

國家高性能計算中心(合肥)為什么要建立新標準?ANSIX3H5,1994國家高73InaNutshellAsetofdirectives(libraryroutines,andenvironmentvariables)usedtoannotateasequentialprogramtoindicatehowitshouldbeexecutedinparallel—繼承X3H5的許多概念Portable,SimpleandScalableSharedMemoryMultiprocessingAPInotanewlanguagenotautomaticparallelizationextendbaselanguages:Fortran77,Fortran90,CandC++Multi-vendorSupport,forbothUNIXandNTStandardizesFineGrained(Loop)Parallelism,alsoSupportsCoarseGrainedAlgorithms國家高性能計算中心(合肥)InaNutshellAsetofdirectiv74OpenMP是什么?一組編譯制導語句和可調(diào)用的運行(run-time)庫函數(shù),擴充到基本語言中用來表達程序中的并行性編譯制導語句包括:在串行程序中加入下列結(jié)構(gòu)SPMD(SingleProgramMultipleData)constructswork-sharingconstructssynchronizationconstructsdataenvironmentconstructs

運行庫函數(shù)包括:executionenvironmentroutineslockroutines另外,在FORTRAN標準中,還包括對環(huán)境變量的描述國家高性能計算中心(合肥)OpenMP是什么?一組編譯制導語句和可調(diào)用的運行(run-75國家高性能計算中心(合肥)國家高性能計算中心(合肥)76OpenMP當前的狀況1997年10月28日,DEC,IBM,Intel,SGI,和Kuch&Associates等公司的代表們決定制定一種適用于多種硬件平臺的共享存儲編程的新的工業(yè)應用標準接著,全球很多的組織和ISV決定支持這一標準,如DOE/ASCI,LivermoreSoftwareTechnologyCorp.,FluentInc.,AbsoftCorp.,AnsysInc.Etc.目前支持FORTRAN語言,C和C,并建有專門的網(wǎng)址在科研機構(gòu)中,也引起了足夠的重視,被認為是21世紀最受歡迎的并行編程標準OpenMPonNOWs(SC98,Nov.1998)IntegratedOpenMPandMPIonClusters國家高性能計算中心(合肥)OpenMP當前的狀況1997年10月28日,DEC,I77國家高性能計算中心(合肥)國家高性能計算中心(合肥)78SPMD的程序執(zhí)行模型

P0

P1P2...Pn國家高性能計算中心(合肥)SPMD的程序執(zhí)行模型P0P1P279SMP的程序執(zhí)行模型國家高性能計算中心(合肥)SMP的程序執(zhí)行模型國家高性能計算中心(合肥)80OpenMP的程序執(zhí)行模型國家高性能計算中心(合肥)OpenMP的程序執(zhí)行模型國家高性能計算中心(合肥)81Parallelandworksharingdirectivesdataenvironmentdirectivessynchronizationdirectives國家高性能計算中心(合肥)Parallelandworksharingdire82編譯制導語句(1)Work-sharingconstructs將結(jié)構(gòu)內(nèi)的任務(wù)分配到處理機中,必須動態(tài)地放在Parallelregionconstruct中,進入這種結(jié)構(gòu)之前并不隱含BARRIER操作DO(最常用)有SCHEDULE選項,可以指定采用什么調(diào)度算法SECTIONS(可以流水線執(zhí)行之)SINGLE(只有一個處理機執(zhí)行之)國家高性能計算中心(合肥)編譯制導語句(1)Work-sharingconstruc83ParallelRegion:parallel,endparallelWorkSharing:do,sections,single(paralleldo,nowait)Fork-Joinmodelofparallelexecution(static,dynamic,orphaned)ParallelRegionandWorkSharingDirectives國家高性能計算中心(合肥)ParallelRegion:parallel,end84編譯制導語句(2)指令格式固定形式!$OMP自由形式!$OMP,*$OMP,C$OMPParallelRegionConstruct!$OMPParallel[clause[[,]clause]...]DoI=1,20A(I)=A(I)+B(I)!$OMPEndParallel(隱含BARRIER操作)其中Clause可以為:PRIVATE(list),SHARED(list),COPYIN(list),FIRSTPRIVATE(list),DEFAULT(PRIVATE|SHARED|NONE),REDUCTION({operation|intrinsic}:list),IF(logical_expression)國家高性能計算中心(合肥)編譯制導語句(2)指令格式國家高性能計算中心(合肥)85DO編譯制導語句!$OMPDO[clause[[,]clause]...]do_loop[!$OMPENDDO[NOWAIT]]例子:!$OMPPARALLELDODOI=2,NB(I)=(A(I)+A(I-1))/2.0ENDDO!$OMPENDDONOWAIT!$OMPENDPARALLEL國家高性能計算中心(合肥)DO編譯制導語句!$OMPDO[clause[[,]c86

SECTIONS編譯制導語句!$OMPSECTIONS!$OMPSECTIONblock1!$OMPSECTIONblock2!$OMPSECTIONblock3!$OMPENDSEC

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論