基于OpenMP并行求和算法研究与分析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基于OpenMP并行求和算法研究与分析

基于OpenMP并行求和算法研究与分析   【摘 要】目前几乎所有主流CPU厂商都致力于大力发展多核处理器,增加芯片支持的并行能力,从而提升计算机运算速度。本文主要探讨近来流行的多核计算技术,介绍一种重要的工业标准OpenMP,以及通过一个基于OpenMP的并行求和的简单例子来分析和说明并行计算效率与传统串行计算效率比较的优势。   【关键词】多核处理;并行求和算法;多线程;OpenMP   0.引言   多核技术始终是近年来全球计算机技术发展的重要内容。自从英特尔在2006年底发布了全球第一基于OpenMP的并行遗传算法探讨397款主流服务器四核处理器后,英特尔一直致力于推动多核应用生态系统的成熟与发展。实际上,从2002年推出超线程技术开始,英特尔就开始了向多核技术转型的步伐。最终,英特尔公司将四个计算“大脑”装入一枚处理器中,随着至强5300的诞生,计算机行业宣告正式进入了多核时代。   多核计算将成为一种广泛普及的计算模式,影响企业和消费者用户的使用模式。如目前的服务器应用,要求高的吞吐率和在多处理器上的多线程应用;Internet的应用、P2P和普适计算的应用都促使了计算机性能的不断提升。大型企业的ERP、CRM等复杂应用,科学计算、政府的大型数据库管理系统、数字医疗领域、电信、金融等都需要高性能计算,多核技术可以满足这些应用的需求。   本文主要探讨近来流行的多核计算技术,介绍一种重要的工业标准OpenMP,以及通过一个基于OpenMP的并行求和的简单例子来分析和说明并行计算效率与传统串行计算效率比较的优势。   1.OpenMP   OpenMP是一种适用于多种硬件平台的共享存储编程的工业应用标准,提供了一个可用的编程模型,具有简单、可移植性和可扩展性,灵活支持多线程和负载平衡的潜在能力,目前支持Fortran语言,c和c++。OpenMP规范中定义的制导指令、运行库和环境变量,能够在保证程序可移植性的前提下,按照标准将已有的串行程序逐步并行化。   OpenMP程序开始于一个单独的主线程。主线程会一直串行地执行,直到遇见第一个并行域才开始并行执行。并行域表示该部分程序计算量大,需要多个处理器共同来处理以提高效率和??行速度;并行区间以外的部分表示该部分的程序不适宜或者不能并行执行,只能由一个处理器来执行。主线程创建一队并行线程,然后,并行域中的代码在不同的线程队中并行执行,当主线程在并行域中执行完后,它们或被同步或被中断,最后只有主线程在执行。实际上,所有的OpenMP的并行化,都是通过使用嵌入到C/C++或Foaran源代码中的编译制导语句来达到的。在具体实现时,在并行域开始处添加OpenMP制导指令#Pragma,另外,OpenMP是独立于平台的,如果编译器不支持OpenMP,将会自动忽略预处理指令#Pragma,程序依然可以按照串行程序代码顺利编译执行。   2.传统求和算法   2.1算法设计   传统的求和算法思路相当简单,先定义一个数组,然后随机生成一系列数据放入数组中,再使用循环将各个数据累加存入最后结果变量中即可。   本文先约定定义的是一个long型的数组a,存入的数据为long型整数,考虑到数组元素的最多个数与测试机器的字长有关,而笔者所使用的测试环境是字长为32位的win7系统,且此算法要与下面的并行求和算法进行比较,因此本着尽可能选取多数据且不超过long型数据范围(2^31- 1)的原则,本文将存入数组的数据个数N定为65536。然后使用rand()函数只随机生成1-100的整数,这样保证最后求和的结果也不会超过long型数据的范围,防止了计算过程中数据溢出情况的发生。   2.2具体实现   (1)随机生成数组数据代码实现:   3.基于OpenMP的并行求和算法   3.1实验前准备   由于现在电脑CPU一般都有两个核,4核与8核的CPU也逐渐走入了寻常百姓家,传统的单线程编程方式难以发挥多核CPU的强大功能,于是多核编程应运而生。多核编程可以认为是对多线程编程做了一定程度的抽象,提供一些简单的API,使得用户不必花费太多精力来了解多线程的底层知识,从而提高编程效率。OpenMP支持的编程语言包括C语言、C++和Fortran,支持OpenMP的编译器包括Sun Studio,Intel Compiler,Microsoft Visual Studio,GCC。实验使用的是Microsoft Visual Studio 2008,C++语言,CPU为Intel i3 2350 双核四线程。在Microsoft Visual Studio 2008上openMP的配置非常简单,总共分2步:   (1) 新建一个工程。   (2) 建立工程后

文档评论(0)

erterye + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档