基于OpenMP并行编程模型与性能优化稀疏矩阵操作研究.docVIP

基于OpenMP并行编程模型与性能优化稀疏矩阵操作研究.doc

  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并行编程模型与性能优化稀疏矩阵操作研究   摘 要:随着多核处理器的普及,传统的串行编程方式已无法充分利用多核处理器资源,业界提出了用并行编程模型解决此类问题的多种方法,OpenMP便是其中一种。OpenMP并行编程模型提供了一种可以通过编译语句对现有串行程序进行并行化运行的方法,提高了现有程序对计算机处理器的利用率。基于OpenMP探讨大型稀疏矩阵转置分别在串行编程模型与并行编程模型中计算机处理器的利用率,针对矩阵转置中数据相关性进行加锁操作,通过实验数据分析总结OpenMP并行编程模型的设计方案。   关键词:OpenMP;并行编程;稀疏矩阵   中图分类号:TP302 文献标识码:A 文章编号:1672-7800(2016)003-0027-02   作者简介:蔡文海(1992-),男,广西北海人,桂林电子科技大学信息科技学院学生,研究方向为高性能计算;陈?尘?(1982-),女,四川巴中人,硕士,桂林医学院信息中心讲师,研究方向为数据库、高性能计算。   0 引言   传统串行编程模型已经无法实现多核处理器资源利用最大化[1]。OpenMP作为并行编程模型的解决方案,逐渐成为工业标准[2]。如何将OpenMP更好地应用到编程中解决多核处理器资源利用最大化问题,成为一个重要的研究课题。   1 串行编程模型与并行编程模型-OpenMP   传统串行编程模型下,程序线路自始至终是唯一的。即使使用多核处理器,程序依然只能利用单个核进行运算,这样势必造成其它处理器闲置,无法发挥多核处理器的性能。OpenMP的提出为解决这一问题提供了方案,其作为最早提出的并行编程模型,逐渐成为并行编程的规范[3]。OpenMP是面向共享内存以及分布式共享内存的多处理器多线程并行编程语言[4],是一种编译指导语句,能够显式地指导多线程、共享内存并行的应用程序编程接口(API),具有良好的可移植性,支持多种编程语言,如Fortran、C、C++。   OpenMP以线程为基础,通过编译指导语句显式执行并行化,提供并行化的完整控制。众所周知,Java语言也内置了对多线程的支持,然而Java中的多线程并不能完成计算机多个处理器同时处理。因为Java虚拟机采用时间片轮转的方式,根据计算机给定的时间段执行线程,该时间片结束后,Java虚拟机会迅速切换到另一个线程继续运行,整个过程中,Java多线程交叉串行运行。与Java多线程不同,当线程数量小于或等于处理器数量时,OpenMP每一个线程都拥有自己的处理器并进行运算,大大提高了处理器的利用率。OpenMP采用Fork-Join执行模式,如图1所示。   (1)开始执行时,只有主线程运行。   (2)在主线程运行过程中,需要进行并行计算时,派生出(Fork,创建新线程或者唤醒已有线程)线程来执行并行任务。   (3)执行并行时,主线程和派生线程同时工作。   (4)并行代码执行结束后,派生线程退出或者挂起,不再工作,控制流程回到单独的主线程中(Join,即多线程的汇合)。   2 大型稀疏矩阵转置   在微分方程数值解法中,线性代数方程组系数矩阵系数往往很高,但其非零元素所占的比重很小,将这种矩阵称为大型稀疏矩阵。大型稀疏矩阵转置数据运算量大,可以用一个三元组确定一个唯一矩阵元素,这个三元组分别表示非零元素的行号、列号和值。所有三元组构成一个三元组表,该三元组表是一个线性表[5]。   传统的串行编程算法中,假设存在待转置的稀疏矩阵M,首先找出矩阵M第i列所有元素,并转置,将结果存放到转置后矩阵N的第i行;再找出矩阵M的第i+1列的所有元素,并转置,将结果存放到矩阵N的第i+1行;依次执行,直到所有元素转置完毕。   3 并行优化   上述算法每一列转置运算都是独立的,假设运算程序的计算机为X(X1)核处理器,若使用上述算法运算,将浪费X-1个处理器资源。本文设计优化思想为将每一列的矩阵转置运算分离出来,每一次使用X个处理器进行处理,实现计算机处理器利用率最大化[6]。   在实际设计与实现过程中,使用三元组实现大型矩阵存储,对三元组存储进行了压缩,使得在对三元组存储的矩阵进行转置时,需要使用第三变量作为连接进行转置。当使用OpenMP进行并行编程时,这个第三变量在转置运算中与其它三元组有数据相关性的。需要对该变量进行特殊的加锁操作,保证变量的唯一性,使程序正确运行,但该操作将对程序并行效率产生一定影响。   本文以多个数量级稀疏矩阵为对象(包括100K、1M、10M), 横向研究同数量级的稀疏矩阵中,串行编程及基于OpenMP并行编程的计算机运算效率;纵向研究不同数量级运算量在基于OpenMP并行编程的计算机中的运算效率,进行纵向对比。研究基于Ope

文档评论(0)

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

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

1亿VIP精品文档

相关文档