并行计算实验指南讲解说明.ppt

  1. 1、本文档共80页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
教学课件讲义PPT教学教案培训资料医学中小学上课资料

reduce map操作结束后,所有与某指定out key相对应的中间结果组合为一个列表(list)。 reduce()函数将这些中间结果组合为一个或多个对应于同一output key 的 final value (实际上每一个output key通常只有一个final value) MapReduce逻辑过程 并行化 map()函数可以并行执行,为不同的输入数据集生成不同的中间结果 reduce()函数也可以并行执行,分别处理不同的output key map和reduce的处理过程中不发生通信 瓶颈: 只有当map处理全部结束后,reduce过程才能够开始 实验1.2: OpenMP OpenMP概述 编译制导语句 * * OpenMP概述 OpenMP 是一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。 OpenMP是一种能够被用于显式制导多线程、共享内存并行的应用程序编程接口(API)。 OpenMP标准诞生于1997 年,目前其结构审议委员会(Architecture Review Board, ARB)已经制定并发布OpenMP 3.0 版本。 * OpenMP发展历程 OpenMP Fortran 1.1 OpenMP C/C++ 1.0 OpenMP Fortran 2.0 OpenMP C/C++ 2.0 1998 2000 1999 2002 OpenMP Fortran 1.0 1997 OpenMP F/C/C++ 2.5 2005 OpenMP F/C/C++ 3.0 2008 * OpenMP编程模型:Fork-Join Fork-Join 执行模式在开始执行的时候,只有主线程程存在。主线程在运行过程中,当遇到需要进行并行计算的时候,派生出(Fork)线程来执行并行任务。在并行执行的时候,主线程和派生线程共同工作。在并行代码结束执行后,派生线程退出或者挂起,不再工作,控制流程回到单独的主线程中(Join)。 * OpenMP的实现 编译制导语句 运行时库函数 环境变量 * 编译制导语句(Compiler Directive) 编译制导语句的含义是在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP 程序的一些语义。 在C/C++程序中,用#pragma omp parallel 来标识一段并行程序块。在一个无法识别OpenMP 语义的普通编译器中,这些特定的注释会被当作普通的注释而被忽略。 * 编译制导语句(Compiler Directive) void main() { double Res[1000]; for(int i=0;i1000;i++) { do_huge_comp(Res[i]); } } #include “omp.h” void main() { double Res[1000]; #pragma omp parallel for for(int i=0;i1000;i++) { do_huge_comp(Res[i]); } } 将循环拆分到多个线程执行 并行代码 串行代码 * 编译制导-并行域(parallel region) * 并行域 并行域中的代码被所有的线程执行 具体格式 #pragma omp parallel [clause[[,]clause]…]newline clause= if(scalar-expression) private(list) firstprivate(list) default(shared | none) shared(list) copyin(list) reduction(operator: list) num_threads(integer-expression) * 并行域示例 #include omp.h main () { int nthreads, tid; /* Fork a team of threads giving them their own copies of variables */ #pragma omp parallel private(tid) { /* Obtain and print thread id */ tid = omp_get_thread_num(); printf(Hello World from thread = %d\n, tid); /* Only master thread does this */ if (tid == 0) { nthreads = omp_get_num_threads(); printf(Numbe

文档评论(0)

youngyu0329 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档