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

下載本文檔

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

文檔簡(jiǎn)介

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

SPMD,SMP等如何表達(dá)并行性DOACROSS,FORALL,PARALLEL,INDEPENDENT

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

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

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

B !B為每個(gè)組員所復(fù)制

psections !并行塊開(kāi)始

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

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

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

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

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

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

endpdonowait !無(wú)隱式路障同步

G !更多的復(fù)制代碼

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

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

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

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

P0

P1P2...Pn國(guó)家高性能計(jì)算中心(合肥)SPMD的程序執(zhí)行模型P0P1P229SMP的程序執(zhí)行模型國(guó)家高性能計(jì)算中心(合肥)SMP的程序執(zhí)行模型國(guó)家高性能計(jì)算中心(合肥)30OpenMP的程序執(zhí)行模型國(guó)家高性能計(jì)算中心(合肥)OpenMP的程序執(zhí)行模型國(guó)家高性能計(jì)算中心(合肥)31Parallelandworksharingdirectivesdataenvironmentdirectivessynchronizationdirectives國(guó)家高性能計(jì)算中心(合肥)Parallelandworksharingdire32編譯制導(dǎo)語(yǔ)句(1)Work-sharingconstructs將結(jié)構(gòu)內(nèi)的任務(wù)分配到處理機(jī)中,必須動(dòng)態(tài)地放在Parallelregionconstruct中,進(jìn)入這種結(jié)構(gòu)之前并不隱含BARRIER操作DO(最常用)有SCHEDULE選項(xiàng),可以指定采用什么調(diào)度算法SECTIONS(可以流水線執(zhí)行之)SINGLE(只有一個(gè)處理機(jī)執(zhí)行之)國(guó)家高性能計(jì)算中心(合肥)編譯制導(dǎo)語(yǔ)句(1)Work-sharingconstruc33ParallelRegion:parallel,endparallelWorkSharing:do,sections,single(paralleldo,nowait)Fork-Joinmodelofparallelexecution(static,dynamic,orphaned)ParallelRegionandWorkSharingDirectives國(guó)家高性能計(jì)算中心(合肥)ParallelRegion:parallel,end34編譯制導(dǎo)語(yǔ)句(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)國(guó)家高性能計(jì)算中心(合肥)編譯制導(dǎo)語(yǔ)句(2)指令格式國(guó)家高性能計(jì)算中心(合肥)35DO編譯制導(dǎo)語(yǔ)句!$OMPDO[clause[[,]clause]...]do_loop[!$OMPENDDO[NOWAIT]]例子:!$OMPPARALLELDODOI=2,NB(I)=(A(I)+A(I-1))/2.0ENDDO!$OMPENDDONOWAIT!$OMPENDPARALLEL國(guó)家高性能計(jì)算中心(合肥)DO編譯制導(dǎo)語(yǔ)句!$OMPDO[clause[[,]c36

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

WRITE(*,*)K!$OMPENDORDEREDEND國(guó)家高性能計(jì)算中心(合肥)例子(ORDERED)規(guī)定了各個(gè)線程執(zhí)行的順序國(guó)家高性能計(jì)算41SynchronizationDirectivesmaster,barrier,critical,atomic,flus

溫馨提示

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

評(píng)論

0/150

提交評(píng)論