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

来源 :科学时代·下半月 | 被引量 : 0次 | 上传用户:w13857464643
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  【摘 要】目前几乎所有主流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) 建立工程后,点击 菜单栏->Project->Properties,弹出菜单里,点击 Configuration Properties->C/C++->Language->OpenMP Support,在下拉菜单里选择Yes。
  3.2算法设计
  OpenMP简单易用,在设计算法时我们不需要添加额外的include头文件和link库文件,只须在合适的地方添加OpenMP语句即可,例如在for循环前加一句“#pragma omp parallel for”。而且这些语句运行在单核机器上,或者编译器没有将OpenMP设为可用的机器上编译也不会报错,将自动忽略#pragma这行代码,然后按照传统单核串行的方式编译运行。使用OpenMP来实现并行求和的算法思路也是非常简单的,即把数组分成多块,每个 CPU 核心负责一块的求和,最后把每块的和加起来即可。但考虑到当多个线程并行执行时,有可能多个线程同时对某变量进行了读写操作,从而导致不可预知的结果,即和的计算不准确的问题,实验使用了OpenMP提供的一个工具,归约(reduction),也就是在#pragma omp parallel for 后面加上了 reduction(+:sum),它可以告诉编译器:下面的for循环你要分成多个线程跑,但每个线程都要保存变量sum的拷贝,循环结束后,所有线程把自己的sum累加起来作为最后的输出。   3.3具体实现
  并行求和计算代码实现:
  4.算法效率的比较与分析
  4.1比较实现
  首先,为了保证测试比较的准确性,每一次比较我们都是使用同一个数组,同一组随机生成的数据测。使用OpenMP函数库里面的omp_get_wtime()函数来获取当前时间,通过运行前后两个时间值之差来计算算法运行时间。考虑到单次执行时间远远小于1秒,时间太短,不利于分析,所以在两个求和的算法的代码前加上一个次数为5000的循环。最后输出求和结果和运行时间。代码如下:
  4.2比较结果与分析
  表4.1为两个算法运行5000次的时间累积的时间值。
  由表格中的测试结果数据看,平均起来并行求和相对于串行只用了 其57% 的时间,效率是有所提高。但是,由于本实验使用的CPU为双核四线程处理器,即伪四核。想来如果四核并行求和的话,耗时应是串行的 25% 左右,而这个结果与期望值相差太大。于是,笔者又将该程序放置安装有货真价实的四核处理器i5 2450上,进行实验,测试结果如表4.2。
  测试结果数据表明:并行求和算法用时约为串行的29%。29% 与最初预期的 25% 相当接近,考虑到CPU被其他程序共享占用的情况,该结果已经符合之前的期望值,但也从一定程度上说明了使用OpenMP的归约工具进行并行求和其算法的效率确实要比串行的要高,但是在双核四线程处理器下的效率却不能达到真正四线程的效果。至此,实验的结束。
  5.结束语
  本文使用基于OpenMP工具实现了并行求和算法,并将之与传统的串行求和算法进行了对比和分析,计算效率优势明显。在这个以多核处理器为主流的时代,OpenMP将成为程序员必不可少的工具。
  随着应用需求的扩大和技术的不断进步,多核技术必将展示出其强大的性能优势。多核处理器是处理器发展的必然趋势,无论是移动与嵌入式应用、桌面应用还是服务器应用,都将采用多核的架构,因此多核技术应用前景广阔。
  参考文献:
  [1] 张引琼,戴小鹏. 独立学院Java语言教学改革与实践研究[J]. 电脑知识与技术, Vol.8,No.8,March 2012:1886~1887.
  [2] 骆挺,徐婷婷,孙霞. Java课程在民办院校实践教学的思考[J]. 福建电脑, 2012年第3期:43~44.
其他文献
【摘 要】本文介绍电网线损的理论计算常用方法(均方根电流法和等值功率法)、电网线损调研数据,通过具体的调研数据分析,提出了进一步降低线损的技术措施和管理措施。  【关键词】线损计算;调研;降低线损;经济意义;措施  电网线损率大小直接反应电网结构合理性、电网运行管理的水平和电网管理的科学性。降低电网线损具有其重大的经济意义和社会意义。本文从线损常用的理论计算方法和某省电网的线损调研数据,分析某省网
【摘 要】随着农电体制改革的不断深化,根据国家电网公司关于进一步深化农电体制改革的要求和公司发展需要,对区县级供电企业电能计量管理现状进行分析,分析电力市场形势下的区县级供电企业计量管理新模式,对优化电能计量资源配置、健全重庆电网电能量传体系、规范区县级供电企业计量管理工作、促进区县级电能计量管理融入重庆电网电能计量管理体系具有重要的现实意义。  【关键词】区县级供电企业;电能计量;管理新模式  
【摘 要】文章分析了GIS特点,提出配网管理GIS系统的目标设计和功能设计,讨论GIS在配电建模中的应用,最后提出GIS系统在配电网中的扩展应用。  【关键词】GIS;配网;自动化;生产管理  前言  近年来随着经济的发展,日益增长的用电需求与薄弱的配电网架的矛盾已十分突出。为了提高供电质量,最大限度地满足国民经济发展和社会用电需求,城乡电网建设与改造工程主要有两部分内容,一部分是电网设备的建设与
【摘 要】在电力系统中,配电网占据了其中功率消耗的主要部分。对于10kV配电网来说,其节能降耗的实现具有非常重要的意义。10kV配电网的节能措施分为线路节能和变压器节能两个方面。其中线路节能可通过线路截面积的提高、三相不平衡度的降低和传输距离的缩短来实现;变压器节能则可依靠节能变压器的推广、变压器节能运行的保障以及无功补偿的进行等途径来实现。  【关键词】10kV配电网;节能;措施  一、前言  
【摘 要】本文笔者根据多年工作经验,并结合目前国内外无功补偿技术的发展情况,对农村配电网中的无功补偿存在的问题进行全面分析,并对如何降低网损及提高农村配电网运行效率提出个人的一些看法,以供参考。  【关键词】无功补偿;农村配电网;补偿方案;应用技术  0.引言  配电网中的无功补偿可分为系统补偿和负荷补偿。系统补偿的主要目的是为了提高输电网的传输容量、改善电网的稳定性等;负荷补偿的主要目的是为了提
【摘 要】配电网线路状态检修有别于传统检修,是一种全新的检修理念,以安全、可靠性、环境、成本为基础,通过设备状态评价、风险评估、检修决策,达到设备运行安全可靠,检修成本合理的一种检修策略。文章根据县区配网线路的实际运行情况,提出了配网线路优化检修的管理模式,明确了实行配网线路状态检修的重点工作内容和在运行中的实际意义。  【关键词】配电线路;状态检修;优化检修  随着配网规模的发展以及配电设备质量
【摘 要】10kV配电网线路是直接面向用户最基本的电力设施,其实用、方便、快捷的特点为供电的企业提供可靠的生产运行,将供电市场的供需矛盾进行解决。为保证带电设备及人员的安全,10kV配电网线路变配电安装技术在工程施工过程中质量能否过关是非常关键的,本文从变电器的安装技术以及配电柜安装技术等方面进行阐述,并简单介绍了在安装的过程中应该注意的事项,确保10kV配电网线路运行的安全。  【关键词】10k
【摘 要】本文阐述了几点网络高清监控系统的优势,并重点总结了网络高清监控系统组建中常见的几个问题,可供从事类似工作的人员以技术参考。  【关键词】网络高清监控系统;组建;优势;问题  1.前言  现今,工厂的现代化管理应用网络监控系统已经较为普遍,归其原因在于其可有效加强对各种场合,特殊设备以及人员的直观管理。而监控手段已逐步从传统的模拟视频监控发展到了高清网络数字视频监控[1]。利用现有的办公网
【摘 要】高校教务管理系统采用oracle数据库安全性是比较高的,但是在长期的教学运行中,数据库被反复调用,都会存在一定的安全隐患。对于数据库管理员来说,计算机操作系统的安全运行需要建立一整套的数据库备份机制,来预防数据库出现故障时的不备之需。  【关键词】教务管理系统;oracle;数据库;安全  教务管理系统是高等学校教育工作的一项重要内容,是整个学校教务管理的基础。教务管理工作是学校教学管理
【摘 要】直流电路是电路学中最基本的内容,学好直流电路这一章节对《电路基础》这门课程的学习有着极大的意义。而典型电路的分析方法很多,从而导致学生很难选择,笔者根据《电路基础》多年的教学经验,结合例题对典型的电路分析方法进行总结和比较,根据各自适用情景,归纳出求解具体电路时所遵循的原则。  【关键词】直流电路;典型分析方法;一题多解  1.引言  直流电路是电路学中最基本的内容,学好直流电路这一章节