- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
MultiCore2013.ppt
数据并行语言标准 Fortran90, HPF(1992), Fortran95/2001:显式数据分布描述,并行DO循环. 线程库标准(Thread Library) Win32 API. POSIX threads线程模型. 编译制导(Compiler Directives) OpenMP : portable shared memory parallelism 消息传递库标准(Message Passing Libraries) MPI : Message Passing Interface PVM : Parallel Virtual Machine 所有并行编程标准可分为以下三类: 数据并行 HPF, Fortran90 用于SMP, DSM 共享编程 OpenMP 用于SMP, DSM 消息传递 MPI, PVM 用于所有并行计算机 三者可混合使用: 如对以SMP为节点的Cluster来说, 可以在节点间进行消息传递,在节点内进行共享变量编程. 共享存储模型 在共享存储编程模型里,任务共享一个共用的地址空间,它们在这个共享空间进行异步的读写。 像“锁/信号量”这样不同的机制将会用来控制对共享存储的访问。 从程序员的观点,这种模式的好处是没有数据所有权的概念,因此没必要在任务之间明确地规定数据通信。程序开发通常会比较简单。 一个重要的性能上的缺点是理解和管理局部的数据变得更加困难。 实现:在共享存储平台,本地编译程序将用户程序变量翻译成全局存储空间中实际的存储地址。 消息传递模型 一组任务在计算的时候使用它们自己的局部存储器。多个任务可以驻留在同一台机器,或者跨任意数量的机器。 任务之间通过发送和接受消息的数据通信来交换数据。 数据传送通常需要每个进程协同操作来完成。比如一个发送操作必须有一个对应的接收操作。 实现: 1992年, MPI(消息传递接口)论坛成行,其主要目标是制定消息传递实现的标准接口 MPI现在是实际上的消息传递的工业标准,实际上替代了所有其它的用于生产工作的消息传递实现。大多数并行平台会提供至少一个MPI的实现。少数还提供完整的MPI-2的实现。 对于共享存储结构,MPI通常实现的时候不用网络进行任务通信。它通常处于性能的考虑,用共享存储(存储器拷贝)来实现。 数据并行模型 大多数并行工作都是在一个数据集中去完成。数据集通常组织成一个共同的结构,比如数组或者多维数组。 一组任务共同地工作在相同的数据结构,然而每个任务工作在这个数据结构的不同部分。 任务用相同的操作执行它那部分工作,比如“给每个数组元素加4。” 在共享存储结构中,所有的任务可以通过全局存储器来访问数据结构。 在分布式存储结构中,数据结构是分散的,并以“组块”的方式存在于每个任务的局部存储器中。 实现 高性能Fortran (HPF): 将Fortran 90扩展,支持数据并行的程序设计 包含Fortran 90中的一切 增加了指导编译器如何分布数据的功能 增加了能够改进生成代码优化的功能 增加了数据并行的结构(现在是Fortran 95的一部分) 编译器指导语句: 允许程序员指定数据的分布和对齐。Fortran 实现是最常见的并行平台。 这种模式的分布式存储实现通常由编译器转换程序到标准代码来调用消息传递库(通常是MPI)去分布数据到所有处理器。所有的消息传递对程序员是透明的。 小结 数据作用域和保护数据 数据作用域属性 缺省的状态能被修改 数据作用域属性支持下列两个子句 设置作用域为共享的变量 设置作用域为私有的变量 default (shared | none) shared(varname,…) private(varname,…) 数据作用域和保护数据 私有子句 为每个线程复制变量 变量未初始化; C++ 对象按缺省构造 任何外部值在并行区域是不确定的 void* work(float* c, int N) { float x, y; int i; #pragma omp parallel for private(x,y) for(i=0; iN; i++) { x = a[i]; y = b[i]; c[i] = x + y; } } 数据作用域和保护数据 案例: 点积 float dot_prod(float* a, float* b, int N) { float sum = 0.0; #pragma omp parallel for shared(sum) for(int i=0; iN; i++) { sum += a[i] * b[i]; } return sum; }
您可能关注的文档
最近下载
- 三一SY235C9I2KS维护保养手册.pdf VIP
- 纪念中国人民抗日战争暨世界反法西斯战争胜利80周年PPT课件.pptx VIP
- 陶瓷原料及配方基础.ppt VIP
- 茶小绿叶蝉的防治课件.pptx VIP
- 电梯制造与安装安全规范 GB7588-2003.docx VIP
- 2023民航特种车辆操作工民航特种车辆操作工试卷(练习题库).docx VIP
- IEC 60840-2004 额定电压30kV(Um=36kV)以上至150kV(Um=170kV)挤包绝缘电力电缆及其附件试验方法和要求(中文).pdf VIP
- 22G101 三维彩色立体图集.docx VIP
- 混凝土混凝土.ppt VIP
- 沈萍微生物课件第3章b.ppt VIP
文档评论(0)