您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 13-第13章-共享存储系统编程-并行程序设计-并行计算(共15章)
国家高性能计算中心(合肥)第十三章共享存储系统编程国家高性能计算中心(合肥)共享存储系统编程13.1ANSIX3H513.1ANSIX3H5共享存储模型共享存储模型13.2POSIX13.2POSIX线程模型线程模型13.313.3OpenMPOpenMP模型模型国家高性能计算中心(合肥)编程标准的作用规定程序的执行模型规定程序的执行模型SPMD,SMPSPMD,SMP等等如何表达并行性如何表达并行性DOACROSS,FORALL,PARALLEL,INDEPENDENTDOACROSS,FORALL,PARALLEL,INDEPENDENT如何表达同步如何表达同步Lock,Barrier,Semaphore,ConditionVariablesLock,Barrier,Semaphore,ConditionVariables如何获得运行时的环境变量如何获得运行时的环境变量threadidthreadid,numofprocesses,numofprocesses国家高性能计算中心(合肥)ANSIX3H5共享存储器模型StartedinthemidStartedinthemid--8080’’swiththeemergenceofsharedmemoryparallelswiththeemergenceofsharedmemoryparallelcomputerswithproprietarydirectivedrivenprogrammingenvironmcomputerswithproprietarydirectivedrivenprogrammingenvironmentsents更早的标准化结果更早的标准化结果——PCFPCF共享存储器并行共享存储器并行FortranFortran19931993年制定的概念性编程模型年制定的概念性编程模型LanguageBindingLanguageBindingCCFortran77Fortran77Fortran90Fortran90国家高性能计算中心(合肥)并行块(工作共享构造)并行块(工作共享构造)并行块并行块((psectionspsections...end...endpsectionspsections))并行循环并行循环((pdopdo...Endo...Endopdopdo))单进程单进程((psinglepsingle...End...Endpsinglepsingle))可嵌套可嵌套非共享块重复执行非共享块重复执行隐式路障隐式路障((nowaitnowait)),显式路障和阻挡操作,显式路障和阻挡操作共享共享//私有变量私有变量线程同步线程同步门插销门插销(latch)(latch):临界区:临界区锁:锁:test,lock,unlocktest,lock,unlock事件事件:wait,post,clear:wait,post,clear序数序数(ordinal):(ordinal):顺序顺序国家高性能计算中心(合肥)X3H5:并行性构造ProgrammainProgrammain!!程序以顺序模式开始程序以顺序模式开始,,此时只有一个此时只有一个AA!A!A只由基本线程执行,称为主线只由基本线程执行,称为主线程程parallelparallel!!转换为并行模式,派生出多个子线程(一个组)转换为并行模式,派生出多个子线程(一个组)BB!B!B为每个组员所复制为每个组员所复制psectionspsections!!并行块开始并行块开始sectionsectionCC!!一个组员执行一个组员执行CCsectionsectionDD!!一个组员执行一个组员执行DDendendpsectionspsections!!等待等待CC和和DD都结束都结束psinglepsingle!!暂时转换成顺序模式暂时转换成顺序模式EE!!已由一个组员执行已由一个组员执行endendpsinglepsingle!!转回并行模式转回并行模式pdopdoi=1,6i=1,6!!pdopdo构造开始构造开始F(i)F(i)!!组员共享组员共享FF的六次迭代的六次迭代endendpdopdonowaitnowait!!无隐式路障同步无隐式路障同步GG!!更多的复制代码更多的复制代码endparallelendparallel!!转为顺序模式转为顺序模式HH!!初始化进程单独执行初始化进程单独执行HH......!!可能有更多的并行构造可能有更多的并行构造EndEnd国家高性能计算中心(合肥)线程隐式路障同步PQRABCEF(1:2)GHGGF(3:4)F(5:6)DBB隐式路障同步隐式路障同步无隐式路障同步隐式路障同步国家高性能计算中心(合肥)共享存储系统编程13.1ANSIX3H513.1ANSIX3H5共享存储模型共享存储模型13.2POSIX13.2POSIX线程模型线程模型13.313.3OpenMPOpenMP模型模型国家高性能计算中心(合肥)POSIX线程模型IEEE/ANSIIEEE/ANSI标准标准——IEEEPOSIX1003.1cIEEEPOSIX1003.1c--19951995线程标线程标准准——Unix/NTUnix/NT操作系统层上的,操作系统层上的,SMPSMPChorus,Topaz,MachChorus,Topaz,MachCthreadsCthreadsWin32ThreadWin32ThreadGetThreadHandleGetThreadHandle,,SetThreadPrioritySetThreadPriority,,SuspendThreadSuspendThread,,ResumeThreadResumeThreadTLS(TLS(线程局部存储线程局部存储))——TlsAllocTlsAlloc,,TlsSetValueTlsSetValueLinuxThreadsLinuxThreads:__cloneandsys_clone:__cloneandsys_clone用户线程和内核线程用户线程和内核线程((LWP)(LWP)(一到一,一一到一,一到多,多到多到多,多到多))国家高性能计算中心(合肥)WhatAreThreads?GeneralGeneral--purposesolutionformanagingconcurrency.purposesolutionformanagingconcurrency.Multipleindependentexecutionstreams.Multipleindependentexecutionstreams.Sharedstate.Sharedstate.Preemptivescheduling.Preemptivescheduling.Synchronization(e.g.locks,conditions).Synchronization(e.g.locks,conditions).Sharedstate(memory,files,etc.)Threads国家高性能计算中心(合肥)线程共享相同的内存空间。线程共享相同的内存空间。与标准与标准fork()fork()相比,线程带来的开销很小。内核无需单独复制进程的内相比,线程带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的存空间或文件描述符等等。这就节省了大量的CPUCPU时间。时间。和进程一样,线程将利用多和进程一样,线程将利用多CPUCPU。如果软件是针对多处理器系统设计。如果软件是针对多处理器系统设计的,计算密集型应用。的,计算密集型应用。支持内存共享无需使用繁琐的支持内存共享无需使用繁琐的IPCIPC和其它复杂的通信机制。和其它复杂的通信机制。Linux__cloneLinux__clone不可移植,不可移植,PthreadPthread可移植可移植。。POSIXPOSIX线程标准不记录任何线程标准不记录任何““家族家族””信息。无父无子。如果要等待一个线信息。无父无子。如果要等待一个线程终止,就必须将线程的程终止,就必须将线程的tidtid传递给传递给pthreadpthread_join()_join()。线程库无法为您。线程库无法为您断定断定tidtid。。国家高性能计算中心(合肥)POSIXThreads:BasicsandExamplesbyUdayKamath~abw/parallel/pthreads/pthreads.htmlPOSIX线程详解:一种支持内存共享的简单和快捷的工具byDanielRobbins国家高性能计算中心(合肥)国家高性能计算中心(合肥)线程调用—线程管理POSIXPOSIXSolaris2Solaris2pthreadpthread_create_createthrthr_create_createpthreadpthread_exit_exitthrthr_exit_exitpthreadpthread_kill_killthrthr_kill_killpthreadpthread_join_jointhrthr_join_joinpthreadpthread_self_selfthrthr_self_self国家高性能计算中心(合肥)线程调用—线程同步和互斥POSIXPOSIXSolaris2Solaris2pthreadpthread__mutexmutex_init_initmutexmutex_init_initpthreadpthread__mutexmutex_destroy_destroymutexmutex_destroy_destroypthreadpthread__mutexmutex_lock_lockmutexmutex_lock_lockpthreadpthread__mutexmutex__trylocktrylockmutexmutex__trylocktrylockpthreadpthread__mutexmutex_unlock_unlockmutexmutex_unlock_unlockpthreadpthread__condcond_init_initpthreadpthread__condcond_destroy_destroypthreadpthread__condcond_wait_waitpthreadpthread__condcond__timedwaittimedwaitpthreadpthread__condcond_signal_signalpthreadpthread__condcond_broadcast_broadcast国家高性能计算中心(合肥)Pthreads实现计算的实例1国家高性能计算中心(合肥)Pthreads实现计算的实例2国家高性能计算中心(合肥)对生产者驱动的有界缓冲区问题的Pthread条件变量解void*producer(void*arg1){void*producer(void*arg1){intinti;i;for(i=1;i=SUMSIZE;i++){for(i=1;i=SUMSIZE;i++){pthreadpthread__mutexmutex_lock(&slot_lock);_lock(&slot_lock);while(while(nslotsnslots=0)=0)pthreadpthread__condcond_wait(&slots,&s
本文标题:13-第13章-共享存储系统编程-并行程序设计-并行计算(共15章)
链接地址:https://www.777doc.com/doc-6844611 .html