跳到主要内容

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

摘要

背景

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

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

结果

描述了一种更快的序列内局部成对对齐实现,并对其进行了基准测试,包括新的全局和半全局变体。在双Intel Xeon E5-2670 24核处理器系统上,使用375个剩余查询序列,每秒更新1360亿个单元(GCUPS),这是基于Farrar“条带化”方法实现的最高速度。Rognes的SWIPE优化数据库搜索应用程序通常仍然是最快的,对于短于500个氨基酸的序列,其速度比Parasail快1.2至2.4倍。然而,Parasail在较长的序列中速度更快。对于全局对齐,Parasail的前缀扫描实现通常是最快的,甚至比Farrar的“条带化”方法更快,但是opal库对于单线程应用程序来说更快。该软件库是为带有SSE2、SSE41或AVX2的处理器上的64位Linux、OS X或Windows设计的。源代码可从获取https://github.com/jeffdaily/parasail网站根据巴特尔BSD风格许可证。

结论

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

背景

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

序列比对主要分为三类,即全局比对、半全局比对和局部比对。A类全球一致性使对齐跨越每个序列的整个长度,并在两个序列的长度相似且假定相关时使用。A类局部对齐识别高度保守的区域或子序列,尽管序列的其余部分可能是发散的。A类半全局对齐不会对全局对齐中的开始或结束间隙造成不利影响,从而导致对齐倾向于将序列的一端与另一端重叠。

序列比对是使用动态编程计算的,因为给定特定的评分函数,可以保证找到最佳比对。无论计算的是哪类对齐,都会计算以下形式的动态编程递归。给定两个序列 1[1…]和 2[ 1…n个],三次重现定义如下:S公司 i、 j个 表示对齐前缀的最佳分数 1[ 1…]和 2[ 1…j个]这样,通过替换来结束对齐 1[]带有 2[j个].D类 i、 j个 表示对齐相同两个前缀的最佳分数,以便对齐以删除结束,即对齐 1[]带有间隙字符。同样, i、 j个 表示对齐前缀以插入结束的最佳分数,即对齐 2[j个]带有间隙字符。给定上述三种结束对齐的方法,对齐子问题对应的前缀的最佳分数{i、 j个}由以下人员提供:T型 i、 j个 = x个(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对齐将根据间隙函数初始化第一行和第一列。SW线形的表值不允许为负值,而NW和SG允许为负数。

此后,为了方便起见,根据惯例,我们将沿表行的字符序列称为“查询”序列,而沿表列的字符序列则称为“数据库”序列。

对齐两个长度序列n个需要\(\mathcal{O}(mn)\)时间。当计算许多生物信息学应用程序中的许多比对时,此计算时间变得更加重要,例如数据库搜索、多序列比对、基因组组装和短读映射。有许多方法可以使此操作更快,包括启发式方法,如BLAST[4]然而,这种启发式方法可能会产生次优比对。

使用向量指令并行化最优序列比对已经有很多工作[512]. 然而,并非所有这些方法都必须解决相同的生物信息学应用。例如,数据库搜索可以对数据库序列进行分组以提高性能[8],而蛋白质同源图应用程序可能会禁止此类优化[13]. 也就是说,平行序列比对通常分为两类:序列间比对和序列内比对。序列间并行化是将单个(查询)序列与一组(数据库)序列对齐[8]而序列内并行化的重点是并行化两个序列的单对对齐。Zhao对Farrar“striped”方法的实现[7,9]之前是Smith-Waterman最快的序列内实现,而Rognes的SWIPE软件是已知的最快序列间实现。在Parasail库之前,没有已知的矢量化Needleman-Wunsh或半全局成对比对实现用于序列内并行。另外两个软件库实现了Rognes的序列间方法opal(正式的SWIMD)[14]和libssa[15]. Opal实现了所有类别的序列比对,而libssa只实现了局部和全局比对。这两个库都支持SSE4.1和AVX2指令集。

实施

Parasail是一个SIMD C(C99)库,包含Smith-Waterman(本地)、Needleman-Unsch(全局)和半全局成对序列对齐算法的实现。这里,半全局意味着在查询或目标序列开始之前或结束之后的插入不会受到惩罚。Parasail实现了矢量化两两序列比对的最常见算法,包括对角线[5],已阻止[6],条纹[7]、和前缀扫描[13]. 此外,Parasail库为SSE2、SSE4.1、AVX2和KNC(Xeon Phi加速器)指令集实现了这些方法中的每一种。Parasail使用一种称为CPU调度的技术,在运行时为支持的最高级别CPU指令集正确选择适当的实现。因此,除了在最先进的CPU上实现迄今为止性能最好的算法外,Parasail还是这些算法的参考实现。源代码位于https://github.com/jeffdaily/parasail网站根据巴特尔BSD许可证。gzipped tar存档中包含的文件与Additional file中的文件相同1.

C库接口

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

下面的两个示例应该有助于说明如何构造函数名。副帆尽可能简单,这是Smith-Waterman局部对齐的非矢量化参考实现。它将沿着查询和数据库序列返回对齐分数以及对齐的结束位置。副邮件状态扫描_ avx2_256半全局对齐的前缀扫描向量实现。它将在计算期间使用8位整数,如果检测到溢出,则使用16位整数重新计算(“sat”表示“saturation”)。为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实际上是两个独立运行的SSE 128位通道,并且一些操作不跨越通道边界。

条带化矢量化的改进

法拉条纹法[7]仍是迄今为止最快的Smith-Waterman任务间算法。然而,它的实施有两个改进。首先,SWPS3[16]实施改进了惰性F评估循环。SSW中重复了此改进[9]实施。

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

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

不幸的是,Needleman-Wunsch或半全局对齐无法实现类似的改进,因为表中的值允许为负数。因此,在某些情况下,这些算法的前缀扫描实现将比条带化实现执行得更好[13].

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

代码生成

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

验证

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

Parasail对准器应用

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

结果

以下基准重复了Rognes执行的基准[8]. 我们鼓励读者参考罗杰斯的原稿。数据库序列、登录号、分数矩阵和差距惩罚与之前使用的相同,但为了方便起见,在后面的章节中会重复这些内容。此外,为了更容易与之前的评估进行比较,图和表在颜色、布局和样式上有意相似。然而,此处执行的测试与选择用于评估的软件不同。爆炸[4],爆炸+[19]、和SWIPE[8]之前进行过评估;为当前评估选择了可用的最新版本。雨水处理厂3[16]未计算。Farrar的striped方法的最新实现[7]在SSW库的上下文中进行评估[9]. Parasail库中striped方法的新实现被评估为“Parasail”。此前未对整体和半整体线形性能进行评估。自从蛋白石[14]和libssa[15]支持全局对齐,将其性能与Parasail的实现进行比较。在比较各种方法和实现的性能时,速度以每秒十亿(giga)个单元更新(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功能进行了评估。

  • parasail带条纹剖面图41_128,

  • parasail_sw_striped_profile_avx2_256秒,

  • parasail_nw_striped_profile_sse41_128_16,

  • parasail_nw_striped_profile_avx2_256_16,

  • parasail_nw_scan_profile_sse41_128_16,

  • parasail_nw_scan_profile_avx2_256_16,

  • 副邮件_打印_剖面_ SE41_128_16,

  • 副邮件_打印_剖面_ vx2_256_16,

  • 副邮件扫描配置文件SE41_128_16、和

  • 副邮件扫描配置文件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是一个通用集群,并且超线程的优点强烈依赖于应用程序,因此作为策略,超线程被有意禁用[20]. 由于未启用,因此最多只能使用24个内核。

数据库和查询序列

UniProt知识库11.0版[21](包括Swiss-Prot版本53.0和TrEMBL版本36.0)之所以被选中,是因为它与Rognes在[8]. 最初选择该数据集是因为它是一个大小小于2GB的实际数据集,因为一些最初测试的软件对于较大的文件大小会失败。当前测试的软件没有相同的输入大小限制,但为了与之前的评估保持一致,使用了相同的数据集。这验证了Rognes选择在可预见的未来可供下载的数据集的初衷,因为这里提出的新评估是在八年后进行的。

这里使用的查询序列与Rognes使用的相同。32个加入编号为[Swiss-Prot:P56980,Swiss-Propt:O29181,Swiss-Prot:P03630,Swiss_Prot:002232,Swis-Prot:P01111,SwissP-rot:005013,Swiss/Prot:P14942,Swiss-Rot:P00762,Swiss-Prot:P53765 rot:P03435,Swiss-Prot:P42357,Swiss-Prot:P21177,Swiss-Prot:Q8LLD0,Swiss-Prot:O60341,Swiss-Prot:P27895,Swiss-Mrot:P07756,Swiss-Rot:P04775,Swiss-Srot:P19096,Swiss-Frot:P28167,Swiss-Grot:p06B8,Swiss_Prot:P40930,Swiss-Crot:P08519,Swiss-Irot:Q7TMA5,Swiss/Prot:P33450和Swiss-Prod:Q9UKN1]。请注意,[Swiss-Prot:Q8LLD0]取代了[Swiss-Prot:Q38941]。查询的长度从24到5478个残数不等。正如Rognes之前所做的那样,一些测试只使用375个残基长的P07327查询进行,这表示一个大致平均长度的蛋白质[8].

得分矩阵和差距惩罚

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

线程评估

1 显示了线程数从1增加到24时所有软件的性能特征。查询序列固定为375个残基[Swiss-Prot:P07327]。此外,还使用了BLOSUM62矩阵以及11和1的缺口开放和扩展惩罚。

图1
图1

性能依赖于线程数和查询长度。BLAST每秒十亿个小区更新的速度(GCUPS)(红色),爆炸+(橙色)、扫掠(黑色)、SSW(绿色),Parasail的条带化软件实现使用SSE4.1(浅蓝色)和AVX2(深蓝色)指令集,以及使用SSE4.1的libssa(紫色)和AVX2(灰色),使用不同数量的线程和不同长度的查询。蛋白石仅在c(c)因为应用程序是单线程的(SSE4.1为粉红色,AVX2为棕色)。线程数介于1到24之间,长度为375个残数的P07327查询序列。b条查询长度从24到5478个残留物和24个线程的序列。c(c)可变长度和1个线程的查询序列。所有刻度均为对数。BLOSUM62矩阵和缺口开放和扩展惩罚分别为11和1。此图对应于Rognes中的图6[8]

与之前的评估相比[8],所有条带化实现的性能都比以前报告的要好得多。至多,striped(SSW)的性能范围为3.7~15.0 GCUPS,现在为4.1~96.6 GCUPS。这种巨大的差异既归因于改进了序列数据库处理,也归因于使用了更好的工作负载调度。Parasail的SSE4.1实现的性能范围从5.0到107.5 GCUPS,而AVX2实现的性能则从6.6到137.7 GCUPS。SWIPE以前从9.1运行到106.2 GCUPS,现在从7.2运行到163.6 GCUPS,这表明单个线程的性能下降相对较小,而多线程性能显著提高。libssa的SSE4.1实现范围从3.4到79.4 GCUPS,而AVX2实现范围从5.8到135.1 GCUPS。BLAST在13个线程上达到116.5 GCUPS的早期峰值,而BLAST+继续扩展到261.8 GCUPS以上。总的来说,BLAST+的性能最好,而条带化实现的性能略低于SWIPE。

查询长度评估

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

使用24个线程(与上面的线程评估类似),所有条带化实现的性能都大大优于以前报告的性能。SSW范围为21.7至156.9 GCUPS,而之前为1.2至46.6 GCUPS。对于SSE4.1和AVX2,Parasail实现在9.5和9.1开始时稍微慢一些,峰值分别在164.1和291.5。通常,较长的查询对所有被评估的软件都有更好的表现。SWIPE是一个例外,它的性能曲线相当平坦,但很快就达到了184.0 GCUPS。libssa是另一个例外,SSE4.1和AVX2的峰值分别为82.0和148.4 GCUPS,但对于长度超过1000个氨基酸的序列,性能迅速下降。Parasail的AVX2实现对于长度超过大约500个氨基酸的查询序列开始优于SWIPE。BLAST+再次成为表现最强劲的公司,以5654.9 GCUPS的成绩名列前茅。

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

评分系统评估

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

图2
图2

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

条带化实现的性能再次优于先前报告的。之前的条纹显示几乎恒定的14 GCUPS,而SSW现在显示出对评分标准的依赖性,平均值为96.5±9.0 GCUPS。对于SSE4.1和AVX2,Parasail的两种实施都显示出对评分标准109.5±10.0 GCUPS和130.4±12.4 GCUPS的类似依赖性。与之前的104±2 GCUPS相比,SWIPE在166.9±2.3 GCUPS下运行得更好。当使用AVX2指令时,libssa的性能优于其SWIPE对应程序,在125.7±15.5 GCUPS下运行,而使用SSE4.1指令时,仅在85.5±6.7 GCUPS下执行。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(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的速度几乎是蛋白石的两倍[15],尽管在这里,opal在单线程全局对齐方面的性能远远优于所有其他实现。Parasail在所有评估的路线上也优于libssa。检查这些运行的输出表明,libssa检测到所有查询和数据库序列组合的16位计算溢出,迫使libssa执行64位计算。这显然是一个错误,因为Parasail在16位计算期间没有检测到溢出。这个不幸的结果归因于libssa是研究代码;结果显示于[15]验证该方法,即使当前的评估无法重现良好的结果。

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

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

讨论

Parasail库是对早期SIMD序列内实现的改进。此处报告的性能也优于之前报告的序列内比对性能[8].

Parasail库的目的是集成到其他软件包中,而不一定要取代BLAST等已经性能很高的数据库搜索工具[4]、扫掠[8]或libssa[15];数据库搜索本身是一个具有满意解决方案的重要问题。作为一个专注于单个成对对齐的软件库,Parasail可以更容易地适应需要这种功能的其他软件包,例如[9]或作为其他编程语言包(如scikit-bio)的一部分[23].

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

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

结论

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

可用性和要求

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

缩写

全球不间断电源:

每秒千兆单元更新

SIMD(SIMD):

单指令多数据

SSE、SSE2、SSE4.1:

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

AVX、AVX2:

高级向量扩展,版本2

软件:

Smith-Waterman局部线形

西北:

Needleman-Wunsh全球联盟

新加坡:

半全局对齐

工具书类

  1. Henikoff S、Henikoft JG。蛋白质块的氨基酸替代矩阵。Proc Nat科学院。1992; 89(22):10915–9.

    第条 公共医学中心 中国科学院 公共医学 谷歌学者 

  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. Altschul SF、Gish W、Miller W、Myers EW、Lipman DJ。基本本地对齐搜索工具。分子生物学杂志。1990; 215(3):403–10. 数字对象标识:10.1016/S0022-2836(05)80360-2.

    第条 中国科学院 公共医学 谷歌学者 

  5. 沃兹尼亚克A.使用视频指令加快序列比较。计算应用程序Biosci CABIOS。1997; 13(2):145–50. 数字对象标识:10.1093/生物信息学/13.2.145.

    中国科学院 公共医学 谷歌学者 

  6. Rognes T,Seeberg E.在通用微处理器上使用并行处理,将smith-waterman序列数据库搜索速度提高了六倍。生物信息学。2000年;16(8):699–706. 数字对象标识:10.1093/生物信息学/16.8.699.

    第条 中国科学院 公共医学 谷歌学者 

  7. Farrar M.Striped smith–与其他simd实现相比,waterman将数据库搜索速度提高了六倍。生物信息学。2007; 23(2):156–61. 数字对象标识:10.1093/生物信息学/btl582.

    第条 中国科学院 公共医学 谷歌学者 

  8. Rognes T.通过序列间simd并行化加快smith-waterman数据库搜索。BMC生物信息学。2011; 12(1):221.

    第条 公共医学中心 公共医学 谷歌学者 

  9. Zhao M,Lee WP,Garrison EP,Marth GT.Ssw库:用于基因组应用的simd smith-waterman c/c++库。《公共科学图书馆·综合》。2013; 8(12):82138. 数字对象标识:10.1371/journal.pone.0082138.

    第条 谷歌学者 

  10. Liu Y,Schmidt B.Swaphi:关于xeon phi协处理器的Smith-waterman蛋白质数据库搜索。在:应用特定系统、架构和处理器(ASAP),2014年IEEE第25届国际会议,日期:2014年。第184-5页。数字对象标识:10.1109/ASAP.2014.6868657.

    谷歌学者 

  11. Wang L,Chan Y,Duan X,Lan H,Meng X,Liu W.Xsw:加速xeon phi上的生物数据库搜索。参见:并行和分布式处理研讨会(IPDPSW),2014 IEEE国际:2014。第950-7页。数字对象标识:10.1109/IPDPSW.2014.108.

    谷歌学者 

  12. Daily J.用于分析极端规模宏基因组数据的可扩展并行方法:华盛顿州立大学论文;2015https://research.wsulibs.wsu.edu/xmlui/handle/2376/5503。于2015年10月9日访问。

  13. Daily J,Kalyanaraman A,Krishnamoorthy S,Vishnu A.一种基于工作窃取的方法,用于实现可扩展的最佳序列同源性检测。J并行分布式计算。2015; 79–80(0):132–42. 数字对象标识:2016年10月10日/j.jpdc.2014.08.009.

    第条 谷歌学者 

  14. Šošic M.一个simd动态编程c/c++库:论文,萨格勒布大学;2015https://bib.irb.hr/datoteka/758607.diplomski_Martin_Sosic.pdf.

  15. Frielingsdorf JT公司。通过simd加速库改进最佳序列比对:奥斯陆大学论文;2015http://urn.nb.no/urn:NBN:否-49935。2015年12月10日查阅。

  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. Abouelhoda MI,Kurtz S,Ohlebusch E.7。作者:阿鲁鲁·S,编辑。增强的后缀数组和应用程序。佛罗里达州博卡拉顿:查普曼和霍尔/CRC:2005。第27页。

    第章 谷歌学者 

  18. Fischer J.诱导LCP阵列In:Dehne F,Iacono J,Sack J-R,编辑。第十二届算法和数据结构国际会议论文集(WADS’11)。柏林,海德堡:Springer-Verlag:2011。第374-85页。

    谷歌学者 

  19. Camacho C、Coulouris G、Avagyan V、Ma N、Papadopoulos J、Bealer K、Madden TL。爆炸+:架构和应用。BMC生物信息学。2009; 10:421–1. 数字对象标识:10.1186/1471-2105-10-421.

    第条 公共医学中心 公共医学 谷歌学者 

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

  21. UniProt联盟。Uniprot:蛋白质信息中心。核酸研究2015;43(D1):204-12。数字对象标识:10.1093/nar/gku989.

    第条 谷歌学者 

  22. 蛋白质BLAST:使用蛋白质查询搜索蛋白质数据库。网站。http://blast.ncbi.nlm.nih.gov/blast.cgi?PAGE=蛋白质,访问时间:2015-11-17。

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

下载参考资料

致谢

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

作者信息

作者和附属机构

作者

通讯作者

与的通信杰夫日报.

其他信息

竞争性利益

提交人声明,他没有相互竞争的利益。

其他文件

附加文件1

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

权利和权限

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

转载和许可

关于本文

检查更新。通过CrossMark验证货币和真实性

引用这篇文章

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

下载引文

  • 收到:

  • 认可的:

  • 出版:

  • 内政部:https://doi.org/10.1186/s12859-016-0930-z

关键词