- 1、本文档共50页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
PC13中科大并行计算教学PPT剖析
第十三章 共享存储系统编程 共享存储系统编程 13.1 ANSI X3H5共享存储模型 13.2 POSIX 线程模型 13.3 OpenMP模型 ANSI X3H5共享存储器模型 Started in the mid-80’s with the emergence of shared memory parallel computers with proprietary directive driven programming environments 更早的标准化结果—PCF共享存储器并行Fortran 1993年制定的概念性编程模型 Language Binding C Fortran 77 Fortran 90 并行块(工作共享构造) 并行块(psections ... end psections) 并行循环(pdo ... Endo pdo) 单进程(psingle ... End psingle) 可嵌套 非共享块重复执行 隐式路障(nowait),显式路障和阻挡操作 共享/私有变量 线程同步 门插销(latch):临界区 锁:test,lock,unlock 事件:wait,post,clear 序数(ordinal):顺序 X3H5:并行性构造 Program main !程序以顺序模式开始,此时只有一个 A !A只由基本线程执行,称为主线程 parallel !转换为并行模式,派生出多个子线程(一个组) B !B为每个组员所复制 psections !并行块开始 section C !一个组员执行C section D !一个组员执行D end psections !等待C和D都结束 psingle !暂时转换成顺序模式 E !已由一个组员执行 end psingle !转回并行模式 pdo i=1,6 !pdo构造开始 F(i) !组员共享F的六次迭代 end pdo no wait !无隐式路障同步 G !更多的复制代码 end parallel !转为顺序模式 H !初始化进程单独执行H ... !可能有更多的并行构造 End 共享存储系统编程 13.1 ANSI X3H5共享存储模型 13.2 POSIX 线程模型 13.3 OpenMP模型 POSIX线程模型 IEEE/ANSI标准—IEEE POSIX 1003.1c-1995线程标准—Unix/NT操作系统层上的,SMP Chorus, Topaz, Mach Cthreads Win32 Thread GetThreadHandle,SetThreadPriority,SuspendThread,ResumeThread TLS(线程局部存储)—TlsAlloc, TlsSetValue LinuxThreads:__clone and sys_clone 用户线程和内核线程(LWP)(一到一,一到多,多到多) What Are Threads? General-purpose solution for managing concurrency. Multiple independent execution streams. Shared state. Preemptive scheduling. Synchronization (e.g. locks, conditions). 线程共享相同的内存空间。 与标准 fork() 相比,线程带来的开销很小。内核无需单独复制进程的内存空间或文件描述符等等。这就节省了大量的 CPU 时间。 和进程一样,线程将利用多 CPU。如果软件是针对多处理器系统设计的,计算密集型应用。 支持内存共享无需使用繁琐的 IPC 和其它复杂的通信机制。 Linux __clone不可移植,Pthread可移植。 POSIX 线程标准不记录任何“家族”信息。无父无子。如果要等待一个线程终止,就必须将线程的 tid 传递给 pthread_join()。线程库无法为您断定 tid。 线程调用—线程管理 POSIX Solaris 2 pthread_create thr_create pthread_exit thr_exit pthread_kill thr_kill pthread_join thr_join pthread_self thr_self 线程调用—线程同步和互斥 POSIX Solaris 2 pthread_mutex_init mutex_init pthread_ mutex_
文档评论(0)