基于软件流水线的Needleman-Wunsch算法并行化设计毕业论文.doc

基于软件流水线的Needleman-Wunsch算法并行化设计毕业论文.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
基于软件流水线的Needleman-Wunsch 算法并行化设计 摘要: 序列比对是分析海量生物信息的重要算法之一,在现代生物信息中的搜索相似序列、预测未知序列的序列信息、寻找序列中的特定位点和预测蛋白质结构等研究领域起着重要的作用。Needleman-Wunsch算法是最早的双序列全局比对算法,其以准确性得到了广泛应用,但是它的时间复杂度较高,处理速度慢,本文采用软件流水线技术对其进行并行化优化,利用共享存储编程的工业化标准OpenMP对其进行并行化实现,性能能够得到很大提高。 关键字:生物信息;序列比对;Needleman-Wunsch;软件流水线;OpenMP 一、引言 序列比对[1][2]是根据特定的计分规则,两个或多个符号序列按位置比较后排列,尽可能反映序列间的相似性,这一过程称为序列比对,也叫做对位排列、联配、对齐等,是生物信息学形成早期的主要研究内容。序列比对可以搜索相似的序列,预测一个未知序列的序列信息。还可以进行基因组测序、寻找序列中的特定位点和预测蛋白质结构等,对发现生物序列中的功能、结构和进化的信息具有非常重要的意义。 序列比对通常提供了一个有力的途径来判断两个序列之间是否具有足够的相似性[3],从这种计算出的相似性进一步来推断两者可能具有共同的进化祖先,即同源性[3]。所谓序列相似性只是经过一定的算法所得到的可以量化的结果,而同源性则是一个进化意义上的概念,即两个序列是否同源需要有进化事实的验证。换句话说,两个蛋白质的序列比对可以反映一个相同的进化祖先,或者代表相同的结构,但在进化上却未必有必然联系[6]。 序列比对分为全局比对[3]与局部比对[3]。全局比对是待研究序列的全部符号参加比较,最后也是序列的全部符号进行排列与计分,比对的结果中各序列长度相同,如Needleman-Wunsch算法[4][8]。局部比对是序列的全部符号参加比较,最后只将各序列中得分高的片段中的符号及进行排列与计分,即只排列局部的序列片段,如Smith-Waterman算法[5]。 二、Needleman-Wunsch算法 2.1 动态规划算法 动态规划是组合子问题的解而解决整个问题的,常常应用于最优化问题,即要做出一组选择以达到一个最优解。序列比对中的动态规划的思想是;如果一条路径终止于最优路径上的一点,那么这条路径本身就是起点到这个中间点的最优路径,也就是说,任何一个终止于最优路径上的一点的子路径必然就是终止于这一点的最优路径本身[7]。这样,最优路径就可以通过把各个最优的子路径连接而成。 2.2 Needlman-Wunsch算法 Needleman与Wunsch在1970年提出基于动态规划法的全局比对算法,也是最早的双序列比对算法,以其准确性得到广泛应用,其时间复杂度和空间复杂度均为O(n2)。该算法解决序列比对问题的基本思想是:使用迭代方法计算出两个序列的相似分值,存在一个得分矩阵中,然后根据这个得分矩阵,回溯寻找最优的比对序列。 我们用M表示得分矩阵,Mi,j指得分矩阵中第i行、第j列的元素,S(a,b)表示字符a和字符b的比较得分。S(a,b)的值由公式(2-1)计算得到,得分矩阵各元素的值根据公式(2-2)计算得到,然后回溯寻找最优比对序列。 1 a = b且a,b均不为空格 S(a,b)= -1 a ≠b且a,b均不为空格 (2-1) -2 a,b有一个是空格 Mi-1,j + S(si,_) Mi,j = Max Mi-1,j-1 + S(si,tj) (2-2) Mi,j-1 + S(_,tj) 三、OpenMP OpenMP标准是一种共享存储并行编程模型。共享式存储的并行化具有编程简单、灵活的特点,开发周期较短,并行效率较高。1997年计算机软硬件厂商联合定义了共享内存编程应用接口的工业标准协议OpenMP,克服了长期以来并行解决方案的可移植性和扩展性差的缺点。 OpenMP由一套编译制导语句、函数库以及环境变量组成。它通过与标准的C、C++、Fortran语言结合来工作,主要是在循环级上的并行,指令以单程序多数据结构、任务共享结构、同步结构以及提供对数据共享或私有的支持扩展了原有程序的顺序结构模型。在OpenMP中,编译制导指令在每一行以#pragma开头,编译制导指令parallel定义一个并行域,就会生成另外的一些线程来并行执行这些代码。parallel for制导指令可以实现for循环中各迭代的并行执行。具体用法的示例代码如下。private语句标明每个线程对变量i都有自己的一份私有

文档评论(0)

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

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

1亿VIP精品文档

相关文档