跳到主要内容

Parasail:用于全局、半全局和局部成对序列比对的SIMD C库

摘要

背景

序列比对算法是许多生物信息学应用的关键组成部分。

尽管已经为x86 cpu开发了各种快速的Smith-Waterman局部序列对齐实现,但大多数都嵌入到更大的数据库搜索工具中。此外,neederman-Wunsch全局序列比对及其半全局变体的快速实现还没有普及。本文介绍了第一个用于局部、全局和半全局成对序列内比对的软件库,并改进了以前的序列内实现的性能。

结果

描述了一种更快的序列内局部成对比对实现方法,包括新的全局和半全局变体。在一个双Intel Xeon E5-2670 24核处理器系统上,使用375个剩余查询序列可以达到每秒1360亿个单元更新(GCUPS)的速度,这是基于Farrar的“条带化”方法实现的最高速度。Rognes的SWIPE-optimized数据库搜索应用程序通常仍然是可用的最快的,对于少于500个氨基酸的序列,它的速度是Parasail的1.2倍,最多是Parasail的2.4倍。然而,对于较长的序列来说,副帆的速度更快。然而,Farail'sFaral's的全局对齐方法比单线程opal的更快。软件库是为64位Linux、OS X或Windows而设计的,处理器上有SSE2、SSE41或AVX2。源代码可从https://github.com/jeffdaily/parasail在Battelle BSD风格的许可证下。

结论

需要最佳对齐分数的应用程序可以从改进的性能中获益。SIMD全局、半全局和局部对齐首次在独立的C库中可用。

背景

序列比对是一种在两个DNA或氨基酸(蛋白质)序列之间映射特征的保序方法。它是生物信息学工作流程中的一种普遍操作,用于识别序列之间高度相似的区域。相似性通常是通过给匹配项指定一个正分数,给不匹配项指定一个负分数来衡量的。蛋白质的一种替代基质,如BLOSUM[1]或者帕姆[2],用于为每个可能的残基对评分氨基酸相似性。除了负分外,对齐可能会因为插入空格或删除字符而受到惩罚。间隙惩罚通常是线性的(每个间隙的固定负值)或仿射[],其中间隙开启惩罚通常大于间隙扩展惩罚。

序列比对主要有三类,即全局、半全局和局部。A全球协调使对齐跨越每个序列的整个长度,并在两个序列长度相似且假定相关时使用。A局部定线识别高度保守的区域或子序列,尽管序列的其余部分可能是发散的。A半全局对齐不惩罚全局对齐中的起始或结束间隙,以便结果对齐将倾向于将一个序列的一端与另一个序列的末端重叠。

序列比对是使用动态规划来计算的,因为在给定特定的评分函数下,它可以保证找到一个最佳的排列。不管计算的路线类别是什么,都将计算以下形式的动态规划递归。给定两个序列s 1[1…]以及s 2[1…n],三次重复的定义如下:LetS i、 j 表示对齐前缀的最佳分数s 1[1…]以及s 2[1…j]使对齐结束时替换s 1[]与s 2[j].D i、 j 表示对齐相同两个前缀的最佳分数,以便对齐以删除结束,即对齐s 1[]有一个空白字符。同样, i、 j 表示对齐前缀的最佳分数,以便对齐以插入结束,即对齐s 2[j]有一个空白字符。给出了上述三种结束对齐的方法,即对应于子问题的前缀对齐的最佳得分{i、 j}计算公式:T i、 j = (S i、 j ,D i、 j , i、 j ). 各个动态规划重复出现的依赖关系如下:S i、 j 从为子问题计算的解决方案中获取其值{−1个,j−1},而D i、 j i、 j 从计算子问题的解中得出它们的值{−1个,j}以及{i、 j分别为-1}。

这种动态规划算法的典型实现是建立一个大小表\(\mathcal{O}(m\乘以n)\)两个维度中各有一个。每个单元格(i、 j)表中存储了三个值S i、 j ,D i、 j ,和 i、 j ,对应于子问题{i、 j}. 给定一个单元的条目之间的依赖关系,所有三个序列比对类的动态规划算法都可以用算法1中概述的伪代码来表示。该算法的时间复杂度为\(\mathcal{O}(mn)\).

三类序列比对不同地初始化第一行和第一列(算法1中的第1行和第2行)。SW和SG对齐将表的第一行和第一列初始化为零,而NW对齐则根据间隙函数初始化第一行和列。西南线定线的表值不允许变为负值,而NW和SG允许出现负值。

此后,为了方便起见,我们将表的行中带有字符的序列称为“查询”序列,将表列中带有字符的序列称为“数据库”序列。

对齐两个长度序列n要求\(\mathcal{O}(mn)\)时间。在许多生物序列比对和生物信息学的应用中,随着时间的缩短,基因组比对变得越来越重要。有很多方法可以使这个操作更快,包括BLAST等启发式方法[4]然而,这种启发式方法可能会产生次优的比对。

使用向量指令并行化最优序列比对已经有很多努力[512]. 然而,并非所有这些方法都必须解决相同的生物信息学应用。例如,数据库搜索可以将数据库序列分组以提高性能[8],而蛋白质同源图应用可能会禁止这种优化[13]. 也就是说,平行序列比对通常分为两类:序列间和序列内。序列间并行化是将单个(查询)序列与一组(数据库)序列对齐[8]而序列内并行化主要是将两个序列的单个成对排列并行化。赵本山实施法拉的“条纹”法[7,9]是史密斯·沃特曼之前最快的序列内实现,而罗格斯的刷卡软件是已知最快的序列间实现。在Parasail库出现之前,还没有已知的用于序列内并行的矢量化neederman-Wunsch或半全局成对比对的实现。另外两个附加的软件库实现了Rognes的序列间方法opal(正式的SWIMD)[14]利伯萨[15]. Opal实现了所有的序列比对类,而libssa只实现了局部和全局对齐。这两个库都支持SSE4.1和AVX2指令集。

实施

Parasail是一个SIMD C(C99)库,包含Smith-Waterman(局部)、needeman-Wunsch(全局)和半全局成对序列对齐算法的实现。在这里,半全局意味着在查询或目标序列的开始或结束之前的插入不受惩罚。实现对角线对齐,包括大多数已知的成对向量对齐算法[5],已阻止[6],条纹[7],和前缀扫描[13]. 此外,Parasail库为SSE2、SSE4.1、AVX2和KNC(Xeon Phi accelerator)指令集实现了这些方法中的每一种。Parasail使用一种称为CPU调度的技术,在运行时为支持的最高级别的CPU指令集正确选择适当的实现。因此,除了在最先进的cpu上提供迄今为止性能最好的算法的实现之外,Parasail也是这些算法的参考实现。源代码在https://github.com/jeffdaily/parasail在Battelle BSD许可证下。这些文件作为附加文件包含在gzip压缩的tar归档文件中1.

C库接口

Parasail库中有一千多个函数。为了使选择特定函数更容易,函数名遵循命名约定。以下将使用括号“()“表示必须从集合中进行选择。如果函数名的一部分是可选的,则说明将表明这一点。下划线“_“分离每个函数名组件。函数名的组件按它们在构造的函数名中的出现顺序列出。副帆必修的。避免与其他库冲突的函数前缀。所有函数都以这个前缀开头。(西北、sg、sw)必修的。对齐的类别;分别是全局的、半全局的或局部的,统计可选。返回对齐统计信息。(表格,行列)可选。返回整个动态规划表或分别返回动态规划表的最后一行和最后一列。(条纹、扫描、诊断)可选。矢量化方法。条纹几乎总是最好的选择。轮廓Vector方法仅适用于前缀扫描和条带化,但在这种情况下是可选的。前缀扫描和条带化向量实现必须首先计算查询配置文件。可以选择提前执行该步骤并重用查询概要文件,以避免代价高昂的查询概要文件重新计算。(sse2_128、sse41_128、avx2_256、knc U 512)矢量法只是一种方法,但在这种情况下是可选的。指令集和向量宽度。如果没有给出,默认值将使用CPU调度来选择主机系统上可用的最佳指令集。(8、16、32、64,周六)矢量法,但在这种情况下是必需的。解的整数宽度。这也会影响性能;较小的整数宽度将增加矢量使用的车道数,从而提高性能。如果使用“sat”,函数默认为8位实现,如果检测到分数溢出,它将使用16位实现重试。

下面的两个例子应该有助于说明函数名应该如何构造。parasail_西南尽可能简单,这是史密斯-沃特曼局部对准的非矢量化参考实现。它将返回对齐分数以及沿着查询和数据库序列的对齐的结束位置。parasail_sg_stats_扫描_avx2_256_sat半全局对准的前缀扫描矢量实现。它将在计算期间使用8位整数,如果检测到溢出,则使用16位整数重新计算(“sat”表示“饱和”)。为CPU指令集选择AVX2。还计算并返回附加的对齐统计信息。

指令集与CPU调度

Parasail支持SSE2、SSE4.1、AVX2和KNC(Xeon Phi)指令集。在许多情况下,编译器可以为主机CPU不支持的指令集编译源代码。代码仍在编译中,然而,Parasail使用了一种称为CPU调度的技术,以避免运行使用主机CPU不支持的指令的代码。CPU调度在运行时测试CPU的特性,这与测试编译器是否可以在编译时编译某些指令不同。运行时CPU测试的结果用于为主机平台支持的最高级别的指令集正确选择适当的Parasail实现。这使得Parasail可以由维护人员为最佳可用系统编译和分发,同时仍然允许相同的发行版以较少的CPU运行。

Parasail针对SSE4.1级别的指令集进行了优化。SSE2缺少某些SSE4.1指令,已使用其他可用的SSE2指令进行模拟。另外一些位移位的指令也需要AVX2独立地进行模拟,而AVX2的一些操作也需要使用AVX2进行有效的位转移操作。

条纹矢量化的改进

法拉条纹法[7]仍是迄今为止最快的史密斯-沃特曼任务间算法。然而,它的实施有两个改进。首先,SWPS3[16]实施改进了延迟循环求值. 这种改进在SSW中得到了复制[9]实施。

最近,在计算中使用的矢量车道数对条带法进行了评估。例如,SSE使用一个128位向量,该向量可划分为64位、32位、16位或8位整数,分别对应于2个、4个、8个或16个向量通道。分条方法的一个特点是重新计算动态编程表中的列,直到该列收敛为止。对SSW的评估表明,随着矢量车道数的增加,修正通过的次数增加[13].

这个问题在Parasail中得到了改进,使用了一种将计算原点移向最小可表示整数的技术。这利用了史密斯·沃特曼不允许负值的事实。例如,对于8位整数−127被视为0,允许使用0到255的整个范围。此外,使用饱和算法可以防止计算下溢。这与以前的SSE2实现不同,以前的SSE2实现减少了有符号8位向量最大值指令的不足,而是使用无符号整数[7]. 然而,对于SSE2,没有对应的无符号16位向量最大值指令,而有足够的符号饱和算术运算可用于执行计算。移位值和使用饱和算法的组合显著减少了动态规划表中每列所需的校正通过次数。

不幸的是,对于Needleman-Wunsch或semi-global alignment不可能有类似的改进,因为允许表值为负。因此,在某些情况下,这些算法的前缀扫描实现将比分条实现的性能更好[13].

最后一个改进是对Zhao等人的实现。[9]. 在实现局部对齐时,将为包含最高分数的列生成整个列的副本。Parasail的实现通过交换指向辅助列的指针引用来避免昂贵的内存复制。这只适用于局部对齐;全局和半全局实现不需要额外的列。

代码生成

除了一些编译器预处理器指令之外,Parasail库还使用代码生成步骤来创建库中实现的数千个函数。这充分利用了以下观察结果:无论使用哪个指令集和整数宽度,三类对齐的基本算法都保持不变。最终用户不必担心这个代码生成步骤,但对于代码开发来说,这有许多好处,包括修改代码时更快地解决问题,以及在各种可能的实现之间强制实现一致性。

验证

Parasail库通过交叉验证进行严格测试,以验证各种库函数的正确实现。给定FASTA格式的测试数据集,将给定对齐类的引用实现的结果与同一对齐类的所有其他实现的结果进行比较。这既可以用于结果对齐得分,也可以用于所涉及的整个动态编程表的逐字节比较。在所有测试通过合理大小的测试数据集之前,软件不会发布。

Parasail校准器应用

此外,Parasail软件还提供了Parasail库parasail_对准器应用程序。aligner应用程序将以FASTA或FASTQ格式的查询文件作为输入,并将所有查询序列与第二个FASTA-FASTQ格式数据库文件中的一组数据库序列进行对齐。或者,如果只提供一个文件,则会将文件中的所有序列与它们自身进行比较。由于Parasail库实现了许多不同的对齐例程,因此必须将要使用的函数名指定给aligner。可选地,可以应用过滤器来跳过不包含给定长度的精确匹配种子的任意两个序列的对齐。此筛选器使用增强的后缀数组数据结构[17,18]允许任意长的精确匹配种子。

结果

由罗格斯执行的那些基准[8]. 鼓励读者参考罗格斯的原稿。数据库序列、登录号、得分矩阵和差距惩罚与之前使用的相同,但是为了方便起见,在后面的章节中会重复这些内容。此外,图和表有意在颜色、布局和样式上相似,以便更容易与之前的评估进行比较。但是,在这里执行的测试确实与选择用于评估的软件不同。爆炸[4],爆炸+[19],然后刷卡[8]已为当前评估选择了最新版本。开关电源3[16]未评估。Farrar条纹方法的最新实现[7]在SSW库的上下文中进行评估[9]. Parasail库中条带化方法的新实现被评估为“Parasail”。之前没有对全局和半全局对准性能进行评估。因为蛋白石[14]还有利伯萨[15]支持全局对齐,它们的性能与Parasail的实现进行了比较。在比较各种方法和实现的性能时,速度以每秒十亿(千兆)单元更新(GCUPS)为单位报告,其中一个单元是动态编程表中的一个值。

我们非常小心地比较了各种软件库和应用程序。所有测试运行三次,并记录GCUPS的平均性能。数据库序列的加载时间被排除在本研究之外,以集中于对齐例程的算法性能。以下软件直接报告了所执行路线的GCUPS性能:Parasail、opal、SWIPE和SSW。对于其余的软件,包括BLAST、BLAST+和libssa,在只报告对齐时间的代码中插入了一个挂钟计时器,并使用挂钟时间根据每个执行的测试用例的已知工作量计算GCUPS结果。

软件

1列出已评估的软件包,包括其版本号和使用的命令行选项。SSW库为执行对齐提供了自己的测试程序,但是由于额外的开销,它故意不用于基准测试。相反,parasail_aligner被复制和修改以使用SSW库中的例程。虽然opal和libssa都是软件库而不是独立工具,但它们都提供了一个除了库之外的示例应用程序。这里对示例应用程序进行了评估,即“opal_aligner”和“libssa_example”。Opal的校准器只能作为单线程应用。

表1性能测试中包含的软件

parasail_aligner可以使用parasail库提供的许多对齐例程中的任何一个来运行。初始基准测试将其他本地对齐实现与Parasail的本地对齐实现进行比较。后一个基准测试比较了Parasail的局部对准性能与条带化和扫描矢量化方法的全局和半全局性能。评估了以下副帆功能。

  • parasail_sw_条纹_剖面图_sse41_128_sat,

  • parasail_sw_条纹_剖面图_avx2_256_sat,

  • parasail_nw_条纹_剖面图_sse41_128_16,

  • parasail_nw_条纹_剖面图_avx2_256_16,

  • parasail_nw_scan_剖面图_sse41_128_16,

  • parasail_nw_scan_剖面图_avx2_256_16,

  • parasail_sg_条纹_剖面图_sse41_128_16,

  • UĀUĀUĀUĀUĀUĀUĀ,

  • parasail_sg_扫描_剖面图_sse41_128_16,和

  • parasail_sg_扫描_剖面图_avx2_256_16.

硬件

结果是在Constance集群的计算节点上获得的,Constance集群是太平洋西北国家实验室的机构计算的一部分。每个Constance节点包含双Intel Haswell E5-2670 CPU(2.3 Ghz),每个节点提供24核和64 GB 2133Mhz DDR4内存。Intel的Haswell CPU支持AVX2指令集。虽然这些处理器能够超线程,这将给每个节点提供48个逻辑核,但这些实验并没有使用它。由于Constance是一个通用的集群,并且超线程的优点与应用程序密切相关,因此作为一个策略,Hyper-threading被有意禁用[20]. 因为没有启用,所以最多只使用了24个核心。

数据库和查询序列

UniProt知识库11.0版[21]选择它是因为它重复了Rognes在[8]. 数据集最初被选为大小小于2GB的实际数据集,因为一些最初测试的软件在较大的文件大小下会失败。当前测试的软件没有相同的输入大小限制,但是使用相同的数据集来与先前的评估保持一致。这验证了Rognes选择一个在可预见的将来可以下载的数据集的初衷,因为这里介绍的新评估是在8年后进行的。

这里使用的查询序列与Rognes使用的相同。这32个注册号分别是[瑞士保护区:P56980,瑞士保护区:O29181,瑞士保护区:P03630,瑞士保护区:P02232,瑞士保护区:P01111,瑞士保护区:P05013,瑞士保护区:P14942,瑞士保护区:P00762,瑞士保护区:P53765,瑞士保护区:Q8ZGB4,瑞士保护区:P03989,瑞士保护区:P07327,瑞士保护区:P01008,瑞士保护区:P10635,瑞士保护区:P58229,瑞士保护区:P25705,瑞士保护区:P03435,瑞士保护区:P42357,瑞士保护区:P21177,瑞士保护区:Q8LLD0,瑞士保护区:O60341,瑞士保护区:P27895,瑞士保护区:P07756,瑞士保护区:P04775,瑞士保护区:P19096,瑞士保护区:P28167,瑞士保护区:P0C6B8,瑞士保护区:P20930,瑞士保护区:P08519,瑞士保护区:Q7TMA5,瑞士保护区:P33450,瑞士保护区:Q9UKN1]。请注意,[Swiss Prot:Q8LLD0]取代了[Swiss Prot:Q38941]。查询的长度从24到5478个残基不等。正如Rognes之前所做的,一些测试只在375个残基长的P07327查询中执行,它代表一个大致平均长度的蛋白质[8].

得分矩阵和差距惩罚

为这次评估选择的分数矩阵和差距惩罚重复了罗格斯使用的那些[8]这样就可以对这两种评价进行直接比较。此前,对BLAST接受的82种氨基酸替代评分矩阵和缺口惩罚的不同组合进行了测试,包括BLOSUM45、BLOSUM50、BLOSUM62、BLOSUM80和BLOSUM90[1]以及PAM系列的PAM30、PAM70和PAM250[2]. 这些矩阵以前代表了早期BLAST版本支持的矩阵,尽管目前有84种氨基酸替代评分矩阵和gap惩罚的组合被“blastp”网站接受[22]. 从NCBI FTP站点获得矩阵。同样,重复了与Rognes相同的评估标准,一些测试仅使用BLOSUM62矩阵和间隙打开和扩展惩罚分别为11和1,这是BLAST默认值[8].

线程评估

1 显示当线程数从1增加到24时所有软件的性能特征。p027在序列号p073处被修复。此外,还使用了BLOSUM62矩阵和11和1的缺口打开和扩展惩罚。

图1
图1

性能依赖于线程数和查询长度。BLAST的每秒十亿个单元更新(GCUPS)的速度(红色),爆炸+(橙色),刷卡(黑色),SSW(绿色),使用SSE4.1实现Parasail的条带化软件(浅蓝色)AVX2和AVX2(深蓝色)指令集,以及使用SSE4.1的libssa(紫色)和AVX2(灰色)以及使用可变长度的查询。蛋白石仅在c因为应用程序是单线程的(SSE4.1为粉红色,AVX2为棕色)。线程数从1到24和375剩余长度P07327查询序列。b查询序列的长度从24到5478个残基和24个线程。c可变长度和1个线程的查询序列。所有刻度都是对数的。在所有情况下,使用BLOSUM62矩阵和分别为11和1的间隙打开和扩展惩罚。这个数字对应于罗格斯的图6[8]

与上一次评估相比[8],所有条带化实现的性能都比以前报告的要好得多。最多,striped(SSW)的性能范围是3.7到15.0gcups,现在的运行范围是4.1到96.6gcups。这一巨大差异归因于改进的序列数据库处理以及使用更好的工作负载调度。Parasail的SSE4.1实现的性能范围为5.0到107.5 GCUPS,而AVX2实现的性能范围为6.6到137.7 GCUPS。SWIPE以前从9.1 GCUPS运行到106.2gcups,现在从7.2 GCUPS运行到163.6gcups,这表明单个线程的性能下降相对较小,同时显著提高了多线程的性能。libssa的SSE4.1实现范围从3.4到79.4 GCUPS,而AVX2的实现范围是5.8到135.1 GCUPS。gcan116.8的早期线程继续爆炸,而gcan+13.5级ups达到峰值。总体而言,BLAST+的性能最好,而分条实现的性能略低于SWIPE。

查询长度计算

1 bc当查询长度变化时,显示所有软件的性能特征,同时将线程数固定为24个线程(B)或一个线程(C)。此外,还使用了BLOSUM62矩阵和11和1的缺口打开和扩展惩罚。查询长度为24到5478个氨基酸残基。

与之前报告的24个线程化实现相比,使用上述24个线程的性能评估明显更好。SSW范围为21.7到156.9 GCUPS,而之前的范围为1.2到46.6 GCUPS。Parasail的实现在9.5和9.1开始稍慢,在SSE4.1和AVX2分别达到164.1和291.5的峰值。一般来说,对于所有被评估的软件,较长的查询执行得更好。SWIPE是个例外,它的性能曲线相当平缓,但很快就达到了184.0gcups。libssa是另一个例外,SSE4.1和AVX2的峰值分别为82.0和148.4 GCUPS,但对于长度超过1000个氨基酸的序列,性能迅速下降。对于长度超过500个氨基酸的查询序列,Parasail的AVX2实现开始优于SWIPE。BLAST+再次是表现最为强劲的,以5654.9个GCUPS的成绩名列前茅。

使用一个线程与所有24个线程进行比较,可以发现类似的性能特征。在SWIPE、SSW、Parasail SSE4.1、Parasail AVX2、libssa SSE4.1和libssa AVX2的性能峰值分别为7.9、6.6、6.9、12.3、4.3和7.4 GCUPS。BLAST和BLAST+表现相似,峰值接近27个GCUPS。Opal使用单线程进行评估,其SSE4.1和AVX2实现的峰值分别为3.8和4.9gcups,是所有评估的实现中最慢的。

评分系统评价

2显示评分条件变化时所有软件的性能特征。所有82个矩阵的组合和之前由Rognes评估的差距惩罚[8]在这里重复。使用375个残基长P07327查询序列和24个线程。

图2
图2

不同评分系统的表现。BLAST显示了每秒十亿个单元更新(GCUPS)(对数刻度)的速度(红色),爆炸+(橙色),刷卡(黑色),以及SSW(绿色),使用SSE4.1实现Parasail的条带化软件(浅蓝色)和AVX2(深蓝色)指令集,以及使用SSE4.1的libssa(紫色)和AVX2(灰色),使用不同的评分系统。所有得分矩阵和BLAST接受的差距惩罚的组合都被测试。矩阵名称显示在每个图形的上方,而开放和扩展间隙惩罚则显示在x轴上。查询序列是P07327,正在运行24个线程。这个数字对应于罗格斯的图7[8]

条带化实现的性能再次优于之前的报告。以前的striped是以几乎恒定的14个GCUPS运行,而SSW现在显示出对评分标准的依赖性,平均值为96.5±9.0 GCUPS。对于ups的gca±10.4和ups的gca±10.4,这两个标准分别显示了相似的gca±10.4和ups的相关性。与之前的104±2 GCUPS相比,刷卡在166.9±2.3 GCUPS下运行得更好。当使用AVX2指令时,libssa的性能优于它的SWIPE对手,运行速度为125.7±15.5gcups,而使用SSE4.1指令时,libssa的性能仅为85.5±6.7gcups。BLAST和BLAST+的表现高度依赖于评分矩阵,GCUPS分别为146.8±137.5和247.1±134.9。

评估全局和半全局实现

此外,还使用全局和半全局对齐例程执行线程和查询长度计算。

对libssa的全球协调能力进行了评估。由于缺乏可用的多线程应用程序,opal的全局对齐评估仅限于单线程评估。除了Parasail的条带矢量方法外,还对前缀扫描方法进行了评估。与使用8位饱和检查例程的局部对齐评估不同,使用全局和半全局对齐例程的16位元素版本,因为8位版本几乎总是饱和的,导致性能较差,计算浪费。帕拉赛尔和利布萨都是如此。

当图。4评估全局校准程序的评分系统。Parasail的前缀扫描实现优于Farrar的条带化方法。虽然图中没有显示。12,前缀扫描实现仅在全局对齐方面优于条带化实现;对于局部和半全局对齐,条带化更快。这是由于在全局对准的条带化计算过程中必须进行的校正通过次数较多[13].

图3
图3

全局对齐的性能依赖于线程数和查询长度。条带SSE4.1矢量的每秒十亿单元更新速度(GCUPS)(红色),前缀扫描SSE4.1矢量(橙色)条带AVX2向量(黑色)和前缀扫描AVX2向量(绿色),以及使用SSE4.1的libssa(紫色)和AVX2(灰色)指令集,使用可变数量的线程和可变长度的查询。线程数从1到24和375剩余长度P07327查询序列。b查询序列的长度从24到5478个残基和24个线程。c可变长度和1个线程的查询序列。所有刻度都是对数的。在所有情况下,使用BLOSUM62矩阵和分别为11和1的间隙打开和扩展惩罚

图4
图4

在不同的评分系统下的表现。显示了条带SSE4.1矢量的每秒十亿单元更新速度(GCUPS)(对数刻度)(红色),前缀扫描SSE4.1矢量(橙色)条带AVX2向量(黑色)和前缀扫描AVX2向量(绿色),以及使用SSE4.1的libssa(紫色)和AVX2(灰色),使用不同的评分系统。请注意,libssa结果完全重叠。所有得分矩阵和BLAST接受的差距惩罚的组合都被测试。图中显示了x轴的名称和扩展名。查询序列是P07327,正在运行24个线程

不幸的是,libssa在全球联盟中的表现不如预期。据报道,libssa的速度比opal快近两倍[15],但在单线程全局对齐方面,opal的性能远远优于其他所有实现。Parasail在所评估的所有线路中的表现也优于libssa。检查这些运行的输出表明,libssa检测到所有查询和数据库序列组合的16位计算溢出,迫使libssa执行64位求值。这显然是一个错误,因为Parasail在16位计算期间没有检测到溢出。这个不幸的结果是由于libssa是研究代码;结果显示在[15]即使当前的评估无法重现良好的结果,也要验证该方法。

全局结果与半蛋白石相似。libssa不实现半全局对齐,因此不进行评估。对于Parasail的分条实现,半全局例程比全局例程稍快,但比局部对齐慢得多。对于半全局对齐,Parasail的扫描实现比条带化实现慢。

对于Parasail的前缀扫描实现,动态编程表的每一列迭代两次。这将导致前缀扫描向量方法的稳定、可预测的性能。前缀扫描例程对于全局对齐类具有稳定的性能。前缀扫描向量例程的这种稳定性能在图中尤为明显。4. 即使考虑到前缀扫描例程的稳定性能,对于局部对齐和半全局对齐,条带化方法总是更快。

讨论

Parasail库是对早期SIMD帧内序列实现的改进。这里报告的性能也比先前报道的序列内比对好[8].

像BLAST这样的软件包不一定是为了替代其他的软件包而进行的[4],刷卡[8],或libssa[15]数据库检索本身是一个重要的问题,有着令人满意的解决方案。作为一个专注于单个成对排列的软件库,Parasail可以更容易地适应其他需要这种功能的软件包,例如[9]或者作为其他编程语言包(如scikit bio)的一部分[23].

Parasail库首次将全局、半全局和局部对齐例程作为高性能软件库提供。编写这些例程是为了利用最新的x86cpu指令集,同时保持与任何平台的兼容。模块化实现和代码生成过程将很容易使Parasail适应未来的指令集,而这些指令集具有更广泛的矢量单元。

未来的Parasail版本将增加返回路线回溯的功能。虽然Parasail已经可以选择返回额外的对齐统计信息,但在某些情况下,完整的回溯非常重要。作为开源软件,其目的是欢迎来自不断增长的Parasail社区的功能请求、增强和修复。

结论

Parasail库是对早期SIMD帧内序列实现的改进。需要最佳对齐分数的应用程序可以从改进的性能中获益。SIMD全局、半全局和局部对齐首次出现在独立的高性能C库中。

可用性和要求

项目名称:Parasail-Pairwise序列比对库项目主页: https://github.com/jeffdaily/parasail 操作系统:独立于平台编程语言:C、 使用Python语言绑定其他要求:首选SSE2、SSE4.1和/或AVX2编译器内部函数许可证:巴特尔BSD风格非学术人士使用的任何限制:不适用

缩写

GCUPS系统:

每秒giga cell更新

单指令多数据:

单指令多数据

SSE、SSE2和SSE4.1:

数据流单指令多数据扩展指令集版本2或版本4.1

AVX、AVX2:

高级向量扩展,版本2

软件:

史密斯-沃特曼局部定线

西北:

奈德曼-温什全球联盟

销售代表:

半全局对齐

工具书类

  1. 1

    海尼科夫S,亨尼科夫JG。蛋白质块的氨基酸取代矩阵。自然科学院学报。1992;89(22):10915–9。

    公共医学中心 文章 中情局 公共医疗 谷歌学者 

  2. 2

    国家DJ,Gish W,Altschul SF。使用特定于应用程序的评分矩阵提高核酸数据库搜索的灵敏度。方法。1991;3(1):66–70。内政部:10.1016/S1046-2023(05)80165-3.

    文章 中情局 谷歌学者 

  3. Gotoh O.一种改进的生物序列匹配算法。分子生物学杂志。1982;162(3):705–8。内政部:10.1016/0022-2836(82)90398-9.

    文章 中情局 公共医疗 谷歌学者 

  4. 4

    Altschul SF、Gish W、Miller W、Myers EW、Lipman DJ。基本搜索工具。分子生物学杂志。1990;215(3):403–10。内政部:10.1016/S0022-2836(05)80360-2.

    文章 中情局 公共医疗 谷歌学者 

  5. 5

    使用面向视频的指令来加速序列比较。计算机应用程序Biosci CABIOS。1997;13(2):145–50。内政部:10.1093/生物信息学/13.2.145.

    CAS 公共医疗 谷歌学者 

  6. 6

    Rognes T,Seeberg E.使用通用微处理器上的并行处理,史密斯-沃特曼序列数据库搜索速度提高了六倍。生物信息学。2000年;16(8):699–706。内政部:10.1093/生物信息学/16.8.699.

    文章 中情局 公共医疗 谷歌学者 

  7. 7

    Farrar M.Striped smith–waterman使数据库搜索速度比其他simd实现快6倍。生物信息学。2007;23(2):156–61。内政部:10.1093/生物信息学/btl582.

    文章 中情局 公共医疗 谷歌学者 

  8. 8

    Rognes T.更快的史密斯-沃特曼数据库搜索序列间simd并行化。生物信息学。2011;12(1):221。

    公共医学中心 文章 公共医疗 谷歌学者 

  9. 9

    Zhao M,Lee WP,Garrison EP,Marth GT。Ssw库:一个用于基因组应用的simd-smithwaterman c/c++库。公共科学图书馆一号。2013;8(12):82138。内政部:10.1371/journal.pone.0082138.

    文章 谷歌学者 

  10. 10

    刘勇,施密特B。斯瓦菲:在xeon-phi协处理器上的史密斯-沃特曼蛋白质数据库搜索。在:应用特定系统、体系结构和处理器(ASAP),2014年IEEE第25届国际会议:2014年。p、 184–5年。内政部:10.1109/ASAP.2014.6868657.

    谷歌学者 

  11. 11

    王磊,陈妍,段X,兰H,孟X,刘伟。加速xeon phi生物数据库搜索。在:并行和分布式处理研讨会(IPDPSW),2014年IEEE国际:2014年。p、 950–7。内政部:10.1109/IPDPSW.2014.108.

    谷歌学者 

  12. 12

    Daily J.《极端尺度下分析宏基因组学数据的可伸缩并行方法:论文》,华盛顿州立大学;2015年。https://research.wsulibs.wsu.edu/xmlui/handle/2376/5503. 2015年10月9日查阅。

  13. 13

    Daily J,Kalyanaraman A,Krishnamoorthy S,Vishnu A.一种基于工作窃取的方法来实现可伸缩的最优序列同源性检测。并行分布式计算机。2015年;79-80(0):132-42。内政部:10.1016/j.jpdc.2014.08.009.

    文章 谷歌学者 

  14. 14

    《simd动态编程c/c++库:论文》,萨格勒布大学;2015年。https://bib.irb.hr/datoteka/758607.diplomski_Martin_Sosic.pdf.

  15. 15

    弗里林斯多夫JT。通过simd加速库改进最佳序列比对:论文,奥斯陆大学;2015。http://urn.nb.no/urn:NBN:no-49935. 2015年12月10日查阅。

  16. 16

    Szalkowski A、Ledergerber C、Krahenbuhl P、Dessimoz C.Swps3—用于ibm cell/b.e.和x86/sse2的快速多线程矢量化smith waterman。BMC Res注释。2008;1(1):107。

    公共医学中心 文章 公共医疗 谷歌学者 

  17. 17

    Abouelhoda MI,Kurtz S,Ohlebusch E.7。作者:Aluru S,编辑。增强后缀数组和应用程序。佛罗里达州博卡拉顿:查普曼和霍尔/CRC:2005。p、 27。

    谷歌学者 

  18. 18

    Fischer J.归纳LCP数组:Dehne F,Iacono J,Sack J-R,编辑。第12届国际算法与数据结构会议论文集(WADS'11)。柏林,海德堡:Springer Verlag:2011年。p、 374–85年。

    谷歌学者 

  19. 19

    Camacho C,Coulouris G,Avagyan V,Ma N,Papadopoulos J,Bealer K,Madden TL.Blast+:建筑与应用。生物信息学。2009;10:421–1。内政部:10.1186/1471-2105-10-421.

    公共医学中心 文章 公共医疗 谷歌学者 

  20. 20

    超线程。网站。https://www.nersc.gov/users/computational-systems/edison/performance-and-optimization/hyper-threading/. 访问日期:2015-11-17。

  21. 21

    UniProt财团。Uniprot:蛋白质信息中心。核酸研究,2015;43(D1):204–12。内政部:10.1093/nar/gku989.

    文章 谷歌学者 

  22. 22

    蛋白质爆炸:使用蛋白质查询搜索蛋白质数据库。网站。http://blast.ncbi.nlm.nih.gov/blast.cgi?PAGE蛋白质,访问日期:2015-11-17。

  23. 23

    Scibio公司。网站。http://scikit-bio.org/,访问日期:2015-11-06。

下载参考资料

致谢

这项工作得到了太平洋西北国家实验室(PNNL)机构管理基金的支持。PNNL由Battelle根据合同DE-AC05-76RL01830为美国能源部运营。我感谢Ananth Kalyanaraman博士对论文研究的讨论和评论。

作者信息

隶属关系

作者

作者通讯

通信对象杰夫日报.

附加信息

相互竞争的利益

作者声明他没有竞争的利益。

附加文件

附加文件1

Parasail v1.0.0源代码。Parasail版本1.0.0的源代码是gzip压缩的tar存档文件。(GZ 1180 kb)

权利和权限

开放存取本文根据Creative Commons Attribution 4.0国际许可条款分发(http://creativecommons.org/licenses/by/4.0/),允许在任何媒体中不受限制地使用、分发和复制,前提是您对原始作者和来源给予适当的信任,提供到Creative Commons许可证的链接,并指明是否进行了更改。知识共享公共领域奉献弃权书(http://creativecommons.org/publicdomain/zero/1.0/)适用于本条中提供的数据,除非另有说明。

转载和许可

关于这篇文章

通过十字标记验证货币和真实性

引用这篇文章

每日,J.Parasail:SIMD C库,用于全局、半全局和局部成对序列比对。BMC生物信息学 17日,81(2016年)。https://doi.org/10.1186/s12859-016-0930-z

下载引文

关键词

  • 史密斯·沃特曼
  • 女红
  • 半全局对齐
  • 序列比对
  • SIMD公司
  • 数据库搜索