多核程序设计OpenMP.ppt

  1. 1、本文档共59页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OpenMP编程简介 一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。 一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)。 OpenMP具有良好的可移植性,支持多种编程语言 OpenMP能够支持多种平台,包括大多数的类UNIX系统以及Windows NT系统(Windows 2000,Windows XP,Windows Vista等)。 OpenMP标准诞生于1997年。 OpenMP编程简介 OpenMP 最初是为共享内存的多处理器系统设计的并行编程方法,这种计算机对程序员来说是多个处理器共享同一个内存设备,其体系结构如图所示: OpenMP多线程编程基础 OpenMP 的编程模型以线程为基础,通过编译指导语句来显示地指导并行化,为编程人员提供了对并行化的完整控制。 OpenMP 的执行模型采用 Fork-Join 的形式: Fork-Join的形式 派生线程遇到编译指导语句将派生出另外一组线程 OpenMP编程组成 OpenMP同时支持C/C++语言和Fortran语言,可以选择任意一种语言以及支持OpenMP的编译器编写OpenMP程序。 OpenMP 的功能由两种形式提供:编译指导语句与运行时库函数,并通过环境变量的方式灵活控制程序的运行。 编译指导语句提供了将一个串行程序渐进的改造为并行程序的能力,而对于不支持OpenMP编译指导语句的编译器,这些编译指导语句又可以被忽略,完全和原来的串行程序兼容。 运行时库函数,则只有在必须的情况下才考虑调用。 编译指导语句 在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语义。(#pragma omp parallel ). 在一个无法识别OpenMP语意的普通编译器中,这些特定的注释会被当作普通的注释而被忽略。 在 C/C++程序中,OpenMP 的所有编译制导语句以#pragma omp开始,后面跟具体的功能指令。即具有如下的形式: #pragma omp directive [clause[ [,] clause]…] 其中directive部分就包含了具体的编译指导语句,包括parallel, for, parallel for, section, sections, single, master, critical, flush, ordered和atomic。 将串行的程序逐步地改造成一个并行程序,达到增量更新程序的目的,减少程序编写人员一定的负担。 运行时库函数 OpenMP运行时函数库原本用以设置和获取执行环境相关的信息,它们当中也包含一系列用以同步的API。 支持运行时对并行环境的改变和优化,给编程人员足够的灵活性来控制运行时的程序运行状况。 环境变量(OMP_NUM_THREADS ) 编写OpenMP程序 开发工具已经增加了对OpenMP的支持,Visual Studio 2005完全支持OpemMP 。 编写OpenMP程序的必要步骤: 生成项目; 配置项目,支持OpenMP; 编写代码,加速#include “omp.h”; 编写源程序; 配置环境变量,确定线程的数目; 执行程序。 循环并行化 循环并行化编译制导语句的格式,在C/C++语言中,循环并行化语句的编译指导语句格式如下: #pragma omp parallel for [clause[clause…]] for (index = first ; test_expression ; increment_expr){ body of the loop; } parallel关键字将紧跟的程序块扩展为若干完全等同的并行区域,每个线程拥有完全相同的并行区域; 关键字for则将循环中的工作分配到线程组中,线程组中的每一个线程完成循环中的一部分内容。 循环并行化语句的限制 并行化语句必须是for循环语句并具有规范的格式,能够推测出循环的次数,有以下约束 : 循环语句中的循环变量必须是有符号整型; 循环语句中的比较操作必须是这样的形式:loop_variable , =, 或= loop_invariant_integer; 循环语句中的第三个表达式(for循环的循环步长)必须是整数加或整数减,加减的数值必须是一个循环不变量(loop invariant value); 如果比较操作是或=,那么循环变量的值在每次迭代时都必须增加;相反地,如果比较操作是或=,那么循环变量的值在每次迭代时都必须减少; 循环必须是单入口、单出口的,循环内部不允许有能够到达循环之外的跳转语句,也不允许有外部的跳转语句到达循环内部。 简单循环并行化 两个向量相加,并将计算的结果保存

文档评论(0)

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

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

1亿VIP精品文档

相关文档