openmp-4-16多核编程

openmp-4-16多核编程

ID:36316143

大小:443.00 KB

页数:22页

时间:2019-05-09

openmp-4-16多核编程_第1页
openmp-4-16多核编程_第2页
openmp-4-16多核编程_第3页
openmp-4-16多核编程_第4页
openmp-4-16多核编程_第5页
资源描述:

《openmp-4-16多核编程》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、OpenMP编程简介一种面向共享内存以及分布式共享内存的多处理器多线程并行编程语言。一种能够被用于显示指导多线程、共享内存并行的应用程序编程接口(API)。OpenMP具有良好的可移植性,支持多种编程语言OpenMP能够支持多种平台,包括大多数的类UNIX系统以及WindowsNT系统(Windows2000,WindowsXP,WindowsVista等)。OpenMP标准诞生于1997年。www.openmp.orgOpenMP编程简介OpenMP最初是为共享内存的多处理器系统设计的并行编程方法,这种计算机对程序员来说是多个处理器共享同一

2、个内存设备,其体系结构如图所示:OpenMP多线程编程基础OpenMP的编程模型以线程为基础,通过编译指导语句来显示地指导并行化,为编程人员提供了对并行化的完整控制。OpenMP的执行模型采用Fork-Join的形式:Fork-Join的形式派生线程遇到编译指导语句将派生出另外一组线程MasterThreadParalllRegionNestedParallelRegionOpenMP编程组成OpenMP同时支持C/C++语言和Fortran语言,可以选择任意一种语言以及支持OpenMP的编译器编写OpenMP程序。OpenMP的功能由两种形

3、式提供:编译指导语句与运行时库函数,并通过环境变量的方式灵活控制程序的运行。编译指导语句提供了将一个串行程序渐进的改造为并行程序的能力,而对于不支持OpenMP编译指导语句的编译器,这些编译指导语句又可以被忽略,完全和原来的串行程序兼容。运行时库函数,则只有在必须的情况下才考虑调用。编译指导语句在编译器编译程序的时候,会识别特定的注释,而这些特定的注释就包含着OpenMP程序的一些语义。(#pragmaompparallel).在一个无法识别OpenMP语意的普通编译器中,这些特定的注释会被当作普通的注释而被忽略。在C/C++程序中,Open

4、MP的所有编译制导语句以#pragmaomp开始,后面跟具体的功能指令。即具有如下的形式:#pragmaomp[clause[[,]clause]…]其中directive部分就包含了具体的编译指导语句,包括parallel,for,parallelfor,section,sections,single,master,critical,flush,ordered和atomic。将串行的程序逐步地改造成一个并行程序,达到增量更新程序的目的,减少程序编写人员一定的负担。运行时库函数OpenMP运行时函数库原本用以设置和获取执

5、行环境相关的信息,它们当中也包含一系列用以同步的API。支持运行时对并行环境的改变和优化,给编程人员足够的灵活性来控制运行时的程序运行状况。环境变量(OMP_NUM_THREADS)编写OpenMP程序开发工具已经增加了对OpenMP的支持,VisualStudio2005完全支持OpemMP。编写OpenMP程序的必要步骤:生成项目;配置项目,支持OpenMP;编写代码,加速#include“omp.h”;编写源程序;配置环境变量,确定线程的数目;执行程序。循环并行化循环并行化编译制导语句的格式,在C/C++语言中,循环并行化语句的编译指导

6、语句格式如下:#pragmaompparallelfor[clause[clause…]]for(index=first;test_expression;increment_expr){bodyoftheloop;}parallel关键字将紧跟的程序块扩展为若干完全等同的并行区域,每个线程拥有完全相同的并行区域;关键字for则将循环中的工作分配到线程组中,线程组中的每一个线程完成循环中的一部分内容。循环并行化语句的限制并行化语句必须是for循环语句并具有规范的格式,能够推测出循环的次数,有以下约束:循环语句中的循环变量必须是有符号整型;循环语

7、句中的比较操作必须是这样的形式:loop_variable<,<=,>或>=loop_invariant_integer;循环语句中的第三个表达式(for循环的循环步长)必须是整数加或整数减,加减的数值必须是一个循环不变量(loopinvariantvalue);如果比较操作是<或<=,那么循环变量的值在每次迭代时都必须增加;相反地,如果比较操作是>或>=,那么循环变量的值在每次迭代时都必须减少;循环必须是单入口、单出口的,循环内部不允许有能够到达循环之外的跳转语句,也不允许有外部的跳转语句到达循环内部。简单循环并行化两个向量相加,并将计算的

8、结果保存到第三个向量中,向量的维数为n。向量相加即向量的各个分量分别相加。for(inti=0;i

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。