跳到主要内容

使用序列间SIMD并行化加快Smith-Waterman数据库搜索

摘要

背景

用于局部序列比对的Smith-Waterman算法比用于数据库搜索的启发式方法更敏感,但也更耗时。Farrar在2007年曾描述过使用SIMD技术实现并行化的最快方法。这项研究的目的是探索是否可以通过其他并行化方法获得进一步的速度。

结果

描述了一种更快的方法和实现,并对其进行了基准测试。在新工具SWIPE中,16个不同数据库序列的残差与一个查询残差并行进行比较。使用375个残差查询序列,在双Intel Xeon X5650六核处理器系统上实现了每秒1060亿个单元更新(GCUPS)的速度,这比基于Farrar“条纹”方法的软件快六倍多。当程序只使用单个线程时,SWIPE的速度大约快2.5倍。对于较短的查询,速度的提高幅度较大。使用BLOSUM50得分矩阵时,SWIPE的速度大约是BLAST的两倍,而BLAST对于BLOSUM62矩阵来说,速度大约是SWIPE速度的两倍。该软件是为带有SSSE3的处理器上的64位Linux设计的。源代码可从获取http://dna.uio.no/swipe/根据GNU事务通用公共许可证。

结论

在标准硬件上使用SIMD实现高效的并行化,使得运行Smith-Waterman数据库搜索的速度可能比以前快六倍以上。这里描述的方法可以显著拓宽Smith-Waterman搜索的潜在应用。其他需要最佳局部对齐分数的应用程序也可以从改进的性能中受益。

背景

两个生物序列的比对是一项基本操作,它构成了许多生物信息学应用程序的一部分,包括序列数据库搜索、多序列比对、基因组组装和短读图绘制。

史密斯和沃特曼[1]描述了一个需要O的简单通用算法(N个)时间和O(N个2)使用替换得分矩阵和一般间隙惩罚函数识别最优局部序列比对得分的存储器。Gotoh公司[2]表明,使用仿射间隙惩罚,可以在O中计算出最佳局部对齐分数(N个2)时间和O(N个)内存。

当需要多次计算最佳比对分数时,例如在搜索序列数据库时,计算时间会变得很长。已经采取了几种方法来减少所需的时间。启发式方法,如BLAST[,4]速度要快得多,但不一定能找到最佳对齐方式。

FPGA(现场可编程门阵列)形式的可重构硬件也可以加快对齐分数计算的速度。[5]. 据报道,在最先进的FPGA板上,DNA序列的更新速度相当于每秒约238亿个细胞(GCUPS)。搜索速度通常在GCUPS中报告,它表示每秒处理的对齐矩阵中的十亿(giga)个单元格(查询序列长度乘以数据库剩余总数)。

该算法也可以在运行在更通用硬件上的软件中通过各种形式的并行来实现。独立序列的成对比对原则上是“令人尴尬的”并行,因为每对序列的计算是完全独立的。阿尔卑斯山[6]. 建议通过将宽寄存器的位划分为几个较窄的单元,并使用指令分别对这些单元执行算术运算,并行执行几个独立的对齐分数计算,从而提高速度。随着MMX、SSE、SSE2、MAX、MVI、VIS和AltiVec等技术的引入,微处理器制造商后来使寄存器内的这种并行形式变得更加简单和容易,这些技术现在通常被称为SIMD技术。一些实现利用了英特尔处理器上的SSE2指令[7]. 跨多个数据库序列执行并行化的方法也称为任务间并行化,而任务内并行化是在一对序列中进行的。

自那时以来,人们的努力主要集中在一对序列的单一比对中的并行化上。1说明了主要方法。沃兹尼亚克[8]建议沿排列矩阵中的小对角线并行计算单元,因为这些计算是独立的。罗杰斯和西伯格[9]发现尽管存在一些数据依赖性,但在查询序列中使用单元格的速度更快,因为沿着小对角线加载值太复杂了。法拉[10]引入了一种“条带化”方法,其中计算在几个单独的条带中并行执行,覆盖查询序列的不同部分,以减少一些计算依赖性的影响。Farrar的条纹方法通常是最快的,据报道,四核和八核的速度分别超过11和20 GCUPS[11]. 萨勒科夫斯基[12]. 描述了使用Farrar条带化方法的SWPS3实现,声称在四核处理器上的速度高达15.7 GCUPS。不过,性能在很大程度上取决于查询长度。使用P07327查询序列,典型的蛋白质长度为375个残基,SWPS3的性能大约为9 GCUPS。

图1
图1

Smith-Waterman路线矢量化方法对齐矩阵显示为具有形成用黑色、蓝色、红色、绿色和黄色指示的处理的前五个向量的元素。为了简单起见,只显示了4个元素的向量,而通常使用16个元素。(A) 沃兹尼亚克描述的反对角线矢量[8]. (B) Rognes和Seeberg描述的查询向量[9]. (C) Farrar描述的条带方法[10]. (D) Alpern描述的多序列向量[6]. 以及在本文中。

由索尼、东芝和IBM生产的Cell处理器有一个主内核(Power Processing Element,PPE)和8个次内核(Synergistic Processing Elements,SPE)。这些核心具有SIMD向量处理功能。一些IBM服务器(QS20)和索尼PlayStation 3(PS3)(只有6个SPE可用)中都有手机处理器。已经描述了该处理器的几种实现。Szalkowski的SWPS3[12]. 使用Farrar方法,在PS3上宣称速度高达8 GCUPS。此外,性能高度依赖于查询长度。使用P07327查询序列,SWPS3的性能在PS3上小于2个GCUPS。维拉旺[13]. 在他们的实现中也使用了Farrar方法,称为CBESW,并声称PS3上的速度超过3.6 GCUPS,而P07327查询序列的性能为2.2 GCUPS。Farrar还使用相同的查询报告了IBM QS20上的15.5 GCUPS速度和PS3上的11.6 GCUPS速度[11]. 鲁德尼茨基[14]. 描述了在PS3上使用多个数据库序列并行化的实现,并报告了接近9个GCUPS的速度。

图形处理器(GPU)也可以加速校准。一些实现已将CUDA接口应用于Nvidia GPU。Liu的CUDASW++工具[15]. 据报道,在单GPU GeForce GTX 280上执行了9.5 GCUPS,在双GPU GeForce GTX 295上执行了14.5 GCUPS。利戈夫斯基和鲁德尼基[16]据报道,双GPU GeForce 9800 GX2的速度高达14.5 GCUPS。2010年,刘[17]. CUDASW++2.0在单GPU GeForce GTX 280和双GPU GeForce GTX 295上报告的速度分别高达17和30 GCUPS。最近,利戈夫斯基[18]. 报告GeForce GTX 480的速度为42.6 GCUPS。

任务间并行化方法的主要优点是按照Alpern的描述并行处理多个数据库序列[6]. 它只是简单地避免了对齐矩阵中的所有数据依赖性。除了Rudnicki的工作外,在后来使用SIMD技术的实现中似乎没有对这种方法进行过多的探索[14]. 然而,在基于GPU的工具中[15,16]这种方法很常见。本研究的目的是探索在普通CPU上进一步使用SIMD来使用此方法。

这里的算法是在带有SSSE3的英特尔处理器上实现的[7]在多个数据库序列上进行并行化,如图所示1天不是一次将一个数据库序列与查询序列对齐,而是并行检索和处理多个数据库序列的残留物。从数据库序列中快速提取和组织数据使得这种方法可行。该方法已在一个名为SWIPE的工具中实现。该方法还包括计算数据库序列中的四个连续单元格,然后再进行下一个查询余数,以减少所需的内存访问次数。

使用不同的评分矩阵、差距惩罚、查询序列和线程数对新实现的性能进行了广泛测试。对于广泛的查询长度,在双Intel Xeon X5650六核处理器系统上,SWIPE的速度几乎恒定在100多个GCUPS。对于典型的长度查询,SWIPE的速度大约是SWPS3和Farrar自己的实现的六倍,但根据查询长度和使用的线程数,该系数在2到18之间变化。对两种版本的BLAST进行了测试,发现其速度高度依赖于评分矩阵。使用BLOSUM50矩阵时,SWIPE的速度大约是BLAST的两倍,而使用BLOSUM62矩阵时,BLAST大约是SWIPE速度的两倍。

方法

标杆管理

对奥斯陆大学Titan高性能集群中的计算节点进行了基准测试。保留了整个节点,以确保没有其他主要进程正在运行。所有数据最初都复制到一个快速的本地磁盘,以减少计算机网络的影响,并将文件读取时间降至最低。所有程序的输出都被重定向到/dev/null,以最小化由于输出量造成的性能差异。程序的所有组合、线程数、查询序列、分数矩阵、间隙开放惩罚和间隙扩展惩罚都运行了15次,并记录了墙时钟执行时间的中位数。

软件

1列出了已进行基准测试的软件包,包括其版本号和使用的命令行选项。

表1性能测试中包含的程序

SWIPE主要是用C++编写的,有些部分是用内联汇编程序手工编码的,有些则使用SSE2和SSSE3内部函数。它是使用英特尔C++编译器11.1版为64位Linux编译的。源代码位于http://dna.uio.no/swipe/根据GNU Affero通用公共许可证第3版。可执行二进制文件和分数矩阵文件也可在同一位置使用。相同的文件作为附加文件包含在gzipped tar存档中1.

Farrar的STRIPED软件的源代码是从作者的网站下载的,并按照提供的Makefile中的规定使用GNU gcc编译器进行编译[11]. Makefile也被修改为使用英特尔编译器编译STRIPED,以查看性能是否有任何差异。

SWPS3程序的二进制可执行文件从作者的网站下载并直接使用[12].

BLAST和BLAST+的预编译二进制文件从NCBI FTP站点下载[4].

使用Gnuplot 4.5版绘制图形。

硬件

在配备48 GB RAM和双Intel Xeon X5650六核处理器的Dell PowerEdge M610刀片服务器上进行了性能测试,处理器运行频率为2.67 GHz。X5650处理器具有同步多线程功能,也称为超线程(HT)。启用HT后,每台计算机总共有24个逻辑核。

线程

这些程序使用1到24个线程运行。为了充分利用硬件,通常最合适的方法是使用与逻辑内核数量相等的线程数量。然而,软件在HT影响和有效利用可用岩芯的能力方面存在重要差异。为了简化比较,一些测试只使用1个或24个线程执行。

数据库序列

UniProt知识库11.0版[19]性能测试中使用了由2007年5月29日的Swiss-Prot 53.0版和TrEMBL 36.0版组成。该数据库包含4 646 608个蛋白质序列,共有1517 383 530个氨基酸残基。最长序列包含36805个残基。

之所以选择此数据库,是因为它的大小足够大,可以实现实际效果,但小于某些软件的2GB文件大小限制。该数据库也不包含某些软件无法处理的任何特殊的J、O或U氨基酸残基符号。最后,在可预见的将来,此版本的数据库应该可以下载,使其也适合于未来的基准测试。

当前版本的SWIPE无法处理按formatdb拆分为单独卷的数据库。因此,SWIPE无法搜索超过约40亿氨基酸的数据库。

通过一个简单的Perl脚本将数据库转换为FASTA格式,然后使用NCBI formatdb 2.2.24版将其格式化为NCBI BLAST二进制数据库格式[4]. 此二进制格式由SWIPE、BLAST和BLAST+读取,而STRIPED和SWPS3直接读取FASTA格式的数据库文件。

查询序列

登录号为P56980、O29181、P03630、P02232、P01111、P05013、P14942、P00762、P53765、Q8ZGB4、P03989(替换相同但已过时的P10318)、P07327、P0008、P10635、P58229、P25705、P03435、P42357、P21177、Q38941、O60341、P27895、P07756、P04775、P19096、P28167、P0C6B8、P20930、P08519、Q7TMA5、P33450和Q9UKN1的32个查询序列,从UniProt数据库中检索到长度从24到5478个残基[18]. 其中大多数以前曾多次用于性能测试。为了简化比较,一些测试仅使用375个残基长度的P07327查询进行,该查询表示大致平均长度的蛋白质。

得分矩阵和差距惩罚

对BLAST接受的所有82种不同氨基酸替代评分矩阵组合和差距惩罚进行了测试。使用的矩阵为BLOSUM系列中的BLOSUM45、BLOSUM50、BLOSUM62、BLOSOM80和BLOSUM90[20]以及PAM系列中的PAM30、PAM70和PAM250[21]. 矩阵来自NCBI FTP站点。为了与SWPS3程序兼容,从矩阵中删除了停止密码子(*)的行和列。SWPS3只能使用BLOSUM45、50和62矩阵成功运行。为了简化比较,一些测试仅使用BLOSUM62矩阵进行,间隙开放和扩展惩罚分别为11和1,这是BLAST的默认值。

结果

算法

可以使用动态规划方法计算两个序列的最佳局部对齐分数。Smith和Waterman算法的递推关系[1]经过Gotoh的修改[2]对于仿射间隙惩罚函数如下所示。

(1)
(2)
(3)
(4)

查询顺序长度的含有残留物 .数据库序列d日长度的n个含有残留物d日 j个 .H(H) i、 j个 是对齐的前缀的分数d日以残留物排列结束 d日 j个 .E类 i、 j个 F类 i、 j个 是对齐相同前缀的分数d日但在查询和数据库序列中分别出现了一个缺口。P(P)[ 我, d日 j个 ]是对齐残留物的分数 d日 j个 根据替代得分矩阵P(P).是缺口开放和延期罚款的总和,而是缺口扩展缺口惩罚。S公司是整体最优局部对齐分数。

计算是逐列进行的。仅部分H(H),E类F类矩阵需要保存在内存中:F类矩阵以及两个包含元素,对应于H(H)E类矩阵。

实施

实现的主要功能如下所述。

16个数据库序列的并行化

16个不同数据库序列的残留物并行处理,如图所示1天。这16个残留物都同时与相同的查询残留物进行比较。这些操作是使用由16个独立字节组成的向量执行的。16个残基被送入16个独立的通道。当这十六个数据库序列中的第一个结束时,下一个数据库序列的第一个剩余部分将加载到通道中。按照在原始数据库文件中找到的顺序读取数据库序列。与Rudnicki的方法相反. [14],数据库不按序列长度排序。2说明了这种方法。

图2
图2

一起处理的数据库残留物块。处理的前五个矢量的残留物显示在灰色、蓝色、红色、绿色和黄色背景上。每个数据库序列中的四个符号构成一个组处理的块。一些序列块的填充用粉色背景上的破折号表示。另一个数据库序列更改用粉红色竖线表示。序列下方的箭头表示新序列开始的位置。

十条指令的紧凑核心代码

计算对齐矩阵中每个单元格中的值的基础是算法部分中描述的递归关系。计算可以用十条汇编指令编写,这十条指令构成了计算内部循环的核心,如图所示。这十条指令并行计算独立对齐矩阵中16个单元格的每个矢量的值。指令的准确选择及其顺序很重要;因此,这部分代码是在汇编程序中手工编码的,以最大限度地提高性能。在图中,H(H)表示主得分向量。这个H(H)向量保存在N个对角线上下一个单元格的向量。E类F类分别表示查询序列和数据库序列中以间隙结束的对齐的得分向量。P(P)是数据库序列的替换分数与查询残差的向量(见下面的临时分数档案)。表示间隙开放加上间隙扩展惩罚的向量。表示间隙扩展惩罚向量。S公司表示当前的最佳得分向量。所有矢量,除了N个在此代码之前初始化。

图3
图3

核心说明。这是对对齐矩阵中每个单元格向量执行的十条核心指令。在这段代码中,第一个(左)操作数是源操作数,第二个(右)操作数则是目标操作数。

沿着数据库序列处理四个连续的单元格

在矩阵单元的计算过程中,两个数组中的值H(H)E类每个矩阵单元的值通常必须读写一次。这些数组通常足够小,可以在接近的缓存级别进行缓存,因此内存访问时间不应成为主要问题,但仍需要为每个单元格写回和读回它们。由于有16个128位xxm寄存器可用,并且有足够的空间用于保存H(H),E类F类寄存器中几个单元格的值,可以通过计算数据库序列中的几个连续单元格来减少运行时间,然后再进行下一个查询剩余。发现四个连续的细胞表现良好。沿着查询序列展开一次内部循环也能很好地工作。然后,基本计算块由两乘以四个单元组成,这些单元在每个内部循环迭代中进行处理,如图所示4.

图4
图4

每次迭代中计算的单元块在所计算的对准矩阵中的八个单元的内环块的每次迭代中。这个H(H),E类,F类S公司每个单元格的值都会更新。计算从左上角的单元格开始,向右进行三次,然后从第二行的左侧继续。

更新分数和填充块

当一个新的数据库序列在其中一个通道中开始时,必须记录上一个数据库序列的分数。此外H(H),E类S公司必须重置前一序列的分数。当要处理新列时,将检查是否有任何数据库序列在前一列中结束。如果是这样,则进行特殊处理。记录结束的序列的分数。创建一个掩码,稍后用于重置H(H),E类S公司在处理新列之前在适当的通道中。通道被填充,并且一个或多个新序列被启动。如果前一列中没有结束的序列,则会对新列执行更简单、更快的处理步骤。在更简单的处理步骤中,无需保存分数,无需启动新序列,也无需创建或使用掩码。由于大多数列的类型都比较简单,因此总体性能主要取决于处理简单列的速度。为了简化计算,如果每个通道的长度不是4的倍数,则在序列结束后用1-3个空符号填充每个通道,以确保新的数据库序列只在新单元块的开始处开始。此填充在图中以粉红色表示2。填充会稍微增加电池的总数,但只允许对每四个残留物执行上述检查。

临时分数曲线的计算

为了使计算速度更快,很重要的一点是可以快速加载替换得分值的向量。每个得分向量对应于单个查询残差相对于不同数据库序列中16个残差的得分。如图所示,创建了一种临时分数配置文件5该得分简档对于将任何查询残基与来自16个数据库序列的4个连续残基进行匹配是有效的。对于数据库序列中的每四个残基,必须构建一个新的分数剖面。

图5
图5

为64个数据库序列残留物创建临时评分模板标准得分矩阵和来自16个不同数据库序列的4个残基形成了一种临时部分数据库序列得分简档的基础。分数配置文件支持将任何查询残留物与这64个数据库残留物进行快速比较。

临时分数配置文件是使用一系列压缩混洗指令(pshufb)从普通替换分数矩阵(例如BLOSUM62)和4×16数据库序列残差创建的。洗牌指令仅在含补充数据流单指令多数据扩展指令集3(SSSE3)的英特尔处理器上可用。在没有SSSE3的处理器上(即AMD处理器和较旧的Intel处理器),可以使用一系列解包指令(punpcklbw、punpckhbw),通过一种矩阵转置操作来代替计算,但速度损失不大。

分数范围和算术指令的选择

最初只使用7位的分数范围进行计算。这允许使用SSE2指令并行计算16个校准分数矩阵。加减运算是使用有符号和饱和算术进行的,而最大运算是对无符号数进行的。只使用-128到-1(有符号数字)或128到255(无符号数字)之间的7位分数范围。所有分数的偏差为128。这个值范围将确保有符号饱和加减法在下边界上很好地工作。此外,无符号最大值在这个范围内也能很好地工作。该范围允许使用压缩最大无符号字节指令(pmaxub)和压缩加减有符号饱和字节指令(paddsb和psubsb),这些指令在所有SSE2处理器上都可用,速度最高。

由于速度较慢,因此不使用8位范围,该范围允许与7位范围相同数量(16)的并行计算,同时允许更宽的分数范围。可以使用-128到127的范围,也可以使用0到255的范围。并行计算最大字节数(pmaxub,pmaxsb)和并行加减字节数(paddusb,psubusb,paddsb,psubsb)的指令都有有符号和无符号版本,但用于最大有符号字节数的pmaxsb-指令最近才在SSE4.1中可用,速度比pmaxub-慢。可以使用无符号加减法(paddusb和psubusb),但分数矩阵向量的加法需要两条指令。首先必须添加包含偏差的得分向量;然后必须减去偏差。

还实现了使用16位和63位分数范围的版本,并在分数范围较低的计算中检测到溢出时使用。16位版本允许8个并行计算。当在分数范围较窄的计算中检测到潜在溢出时,将使用下一个较宽的分数范围(首先是16位,必要时再是63位)重新计算该数据库序列的对齐分数。由于相当少的序列通常会达到无法用7位表示的分数,因此较宽分数范围的额外计算时间通常可以忽略不计。

在使用较窄的得分范围处理了数据库序列块(见下文)中的所有序列之后,对序列子集执行具有较宽得分范围的重新计算。

读取序列数据库

数据库序列以由formatdb工具生成的NCBI BLAST数据库格式存储。这是一种二进制格式,其中序列信息至少分为3个文件:索引(.pin)、标头(.phr)和序列(.psq)。文件格式允许高效地将序列读入内存。蛋白质序列使用1-24和26-27范围内的字节值存储,字节值分别表示氨基酸残基A-I、K-N、P-T、V-Z、U、O和J。序列由零字节分隔,这简化了序列结束的检查。

使用.pin和.psq文件的内存映射检索数据库序列。这是访问序列的一种有效且方便的方法,在这种方法中,操作系统管理在必要时从磁盘将数据读入内存,同时执行程序。序列数据库被划分为每个线程100个块。每个块包含大致相同数量的序列。一个组块中的序列被映射到内存中,并在映射下一个组块之前进行处理。这会导致程序占用较小的内存。

多个线程

SWIPE使用多个线程(pthreads)在序列数据库的不同部分上工作。线程数是在启动程序时指定的,通常应等于计算机的内核数。对于具有超线程的最新几代英特尔处理器,线程数等于逻辑内核数通常是最有效的。当线程准备进行更多工作时,会将数据库序列块分配给线程,因此线程可能不会处理完全相同数量的块。线程的结果在处理每个块后插入到一个常见的命中列表中。

测试

SWIPE软件在许多不同条件下根据BLAST、BLAST+、STRIPED和SWPS3进行了基准测试,以测量速度。研究了使用可变线程数的性能以及查询序列长度的影响。此外,还研究了不同评分系统、替代评分矩阵以及差距开放和延期处罚的影响。

线程

6A级表示以1到24个线程、375个剩余长度的P07327查询序列、BLOSUM62矩阵以及间隙打开和扩展惩罚分别为11和1的情况下运行的程序的性能。SWIPE使用单个线程以9.1 GCUPS的速度运行,并以106.2 GCUPS的19个线程达到其最大性能,但超过12个线程的额外线程几乎没有任何收益。它的伸缩性很好,最大加速比(最大速度与单线程速度之比)为11.6。SWPS3使用单个线程以3.4 GCUPS的速度运行,在12个线程和16.4 GCUPS的情况下达到了最佳性能,但在9个线程之后几乎没有什么收益。最大加速比为4.8。令人惊讶的是,使用两个线程的速度不如使用单个线程的速度。用GNU编译器编译的STRIPED在3.1 GCUPS下运行,只有一个线程,在14.7 GCUPS下有23个线程达到了最大性能,但在超过12个线程的情况下几乎没有收获。最大加速比为4.8。使用英特尔编译器编译STRIPED后,在单线程上运行时,速度提高了21%,达到3.7 GCUPS,但在23个线程上运行的GCUPS速度仅提高了2%,达到15.0 GCUPS。这对应于4.0的最大加速。BLAST和BLAST+分别以14.7和15.5 GCUPS的速度运行,当24个线程分别以208.4和178.9 GCUPS的速率运行时,单个线程的伸缩性非常好,并达到其最大性能。BLAST和BLAST+的最大加速比分别为14.2和11.5。

图6
图6

性能依赖于线程数和查询长度。BLAST(红色)、BLAST+(橙色)、SWIPE(黑色)和SWPS3(绿色)程序以及使用GNU(浅蓝色)和Intel(深蓝色)编译器编译的STRIPED的速度,以每秒十亿个单元更新(GCUPS)为单位,使用不同长度的线程数和查询。(A) 线程数从1到24不等,375个剩余长度为P07327的查询序列。(B) 查询长度从24到5478个残留物和24个线程的序列。(C) 查询不同长度和1个线程的序列。所有刻度均为对数。BLOSUM62矩阵和缺口开放和扩展惩罚分别为11和1。

查询长度

6亿和图6摄氏度说明了使用24个线程(B)或单个线程(C)执行不同长度的查询时的性能。32个不同的序列被用作查询,长度从24到5478个氨基酸残基。

SWIPE的性能曲线相当平坦。对于少于大约100个剩余数的查询,性能会逐渐下降,尤其是在运行多个线程时。当使用多个线程时,对于非常长的查询,速度也略有降低。24个线程的性能从23.1到110.1 GCUPS不等,单线程的性能则从3.9到9.8 GCUPS不等。

SWPS3程序非常依赖于查询长度,24个线程的速度在0.94到49.0 GCUPS之间,单个线程的速度在1.1到4.6 GCUPS之间。

用英特尔编译器编译的STRIPED程序也非常依赖于查询长度,尤其是在24个线程上运行时,速度从1.2到46.6 GCUPS不等。在单个线程上,STRIPED的速度在0.8到5.7 GCUPS之间变化。用GNU编译器编译的STRIPED通常稍慢,尤其是对于较长的查询。

BLAST程序的速度似乎更快,查询序列更长,BLAST和BLAST+的速度分别为52.8到374.1和30.6到360.2 GCUPS,但性能因序列而异。当查询长度小于大约100个残数时,性能明显下降。

评分系统

7显示了不同评分系统下的表现。对BLAST允许的矩阵和间隙惩罚的所有组合进行了测试。使用375个残基长的P07327查询序列和24个线程。SWIPE的性能几乎恒定在102-106 GCUPS左右。STRIPED和SWPS3的性能也几乎恒定在14-15和15 GCUPS左右。BLAST的性能高度依赖于所使用的评分矩阵。使用BLOSUM50矩阵,SWIPE的速度几乎是普通BLAST的两倍。这两个程序的速度与PAM250矩阵非常相似,而其他矩阵的BLAST速度更快。总的来说,BLAST+比普通BLAST慢10-20%。差距惩罚对总体表现影响不大,但在少数情况下,相对较低的差距惩罚似乎会降低BLAST、BLAST+和STRIPED的速度(例如BLOSUM62,差距惩罚为9和1),而对SWIPE和SWPS3的影响可以忽略不计。

图7
图7

不同评分系统的表现。显示了BLAST(红色)、BLAST+(橙色)、SWIPE(黑色)和SWPS3(绿色)程序以及使用不同记分系统使用GNU(浅蓝色)和Intel(深蓝色)编译器编译的STRIPED的每秒十亿单元格更新速度(对数标度)。对BLAST接受的得分矩阵和差距惩罚的所有组合进行了测试。矩阵名称显示在每个图形的上方,而开放和扩展间隙惩罚显示在x轴上。查询序列为P07327,24个线程正在运行。SWPS3并非在所有情况下都能成功运行。

讨论

与早期的SIMD实现相比,SWIPE软件大大提高了基于Smith-Waterman算法的序列数据库搜索速度,在实际情况下速度快了六倍多。发现SWIPE在双Intel Xeon X5650六核处理器系统上以106 GCUPS的速度执行375个剩余查询序列。速度有点取决于查询长度,但与使用的评分系统无关。最大速度对应于每个时钟周期中每个物理内核处理3.3个以上的单元。

据报道,使用GPU,Nvidia GeForce GTX 480显卡上的CUDASW++2.0的速度高达42.6 GCUPS[18]. 这与SWIPE在四核CPU上的预期性能相当。

SWIPE几乎与最多使用12个线程的线程数成线性关系,对应于可用的物理内核数。X5650处理器具有超线程功能,这使得每个物理内核使用多个线程可以获得额外的性能,除非所有执行单元都很忙。几乎没有观察到超过12个线程的性能提高,所以当SWIPE在12个线程上运行时,执行单元显然非常繁忙。SWIPE的伸缩性比SWPS3和多线程STRIPED好得多。SWIPE的最大速度是SWPS3的6.5倍,使用375个残差查询时速度最快。当所有程序都在一个线程上运行时,SWIPE的速度大约快2.5倍。速度差异似乎有两个同样重要的因素。基于单线程性能数据,使用序列间并行方法而不是条带化方法似乎是速度提高的一半左右。高效的线程并行化似乎是另一半的原因。

在与STRIPED软件的比较中,应该注意到Farrar(2007)显然报告了“扫描时间”,而不是程序的完整运行时间,不包括将数据库序列读入内存所需的时间。此处报告了完整的运行时间。对于其他程序,很难将扫描时间与剩余时间分开。STRIPED直接读取FASTA格式的文件,而不是NCBI的formatdb工具格式化的文件。似乎STRIPED最初会解析整个FASTA文件,并使用非线程代码将数据库读入内存,这导致在使用多个线程并测量完整的运行时间时性能低下。排除数据库读取时间会缩短运行时间并提高性能。另一方面,读取二进制NCBI格式的文件可能比解析FASTA文本格式更快。

SWIPE的性能不太依赖于查询长度,除了非常短和非常长的查询。每个数据库残留物产生的管理费用可能会降低SWIPE在最短查询中的性能。对于最长的查询,当许多线程运行时,性能会下降。这可能是由于内存缓存的影响,其中一些缓存在内核之间共享。基于Farrar方法的程序对查询长度的依赖性要大得多,并且随着查询长度的增加执行得更好。这可能是因为随着条纹宽度的增加,条纹之间依赖性的相对重要性降低了。

使用BLOSUM50矩阵时,SWIPE的速度大约是BLAST的两倍,而使用BLOSUM62矩阵时,BLAST是SWIPE速度的两倍。发现BLAST性能非常依赖于得分矩阵。原因可能是BLASD在其启发式中使用初始命中得分阈值(T型)具有独立于指定的得分矩阵的固定默认值(11)。预期值相对较高的得分矩阵,例如BLOSUM50,将触发比其他矩阵更多的初始点击,例如PAM30。

如果要使用查询配置文件(特定位置的评分矩阵)而不是查询序列进行搜索,则需要对查询的每个位置进行临时评分配置文件的计算,而不仅仅是20个可能的氨基酸残基。这尚未实施,但由此导致的速度下降估计为30%。

此处描述的软件应被视为表明该方法性能潜力的原型。计划一个更高的版本,至少计算实际的对齐(而不仅仅是对齐分数)和匹配的统计显著性。

结论

现在,在标准硬件上使用SIMD实现高效的并行化,使得Smith-Waterman数据库搜索的运行速度大大提高。在新工具SWIPE中,16个不同数据库序列的残差与一个查询残差并行进行比较。使用375个剩余查询序列,在双Intel Xeon X5650六核处理器系统上实现了每秒1060亿个单元更新(GCUPS)的速度,这是基于Farrar方法的软件的六倍多的速度,该方法是以前最快的实现。此外,基于Smith-Waterman的搜索速度首次被证明明显超过了BLAST的搜索速度,至少在一个特定的评分矩阵中是如此。

由于速度较慢一直是限制基于Smith-Waterman的搜索实用性的主要缺点,因此此处描述的方法可以显著拓宽此类搜索的潜在应用。其他需要最佳局部对齐分数的应用程序,如短读映射[22]或基因组序列组装[23]也可以从该方法的改进性能中受益。这里使用的方法也可能应用于基于HMM的搜索。

工具书类

  1. Smith TF,Waterman MS:常见分子子序列的识别。分子生物学杂志1981,147:195-197。10.1016/0022-2836(81)90087-5

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

  2. Gotoh O:一种改进的生物序列匹配算法。《分子生物学杂志》1982,162:705–708。10.1016/0022-2836(82)90398-9

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

  3. Altschul SF、Gish W、Miller W、Myers EW、Lipman DJ:基本局部对齐搜索工具。分子生物学杂志1990,215:403-410。

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

  4. Altschul SF、Madden TL、Schaffer AA、Zhang J、ZhangZ、Miller W、Lipman DJ:Gapped BLAST和PSI-BLAST:新一代蛋白质数据库搜索程序。《核酸研究》1997,25:3389–3402。10.1093/nar/25.17.3389

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

  5. Li ITS、Shum W、Truong K:使用现场可编程门阵列(FPGA)将Smith-Waterman算法加速160倍。BMC生物信息学2007,8:185。10.1186/1471-2105-8-185

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

  6. Alpern B、Carter L、Gatlin KS:微平行性和高性能蛋白质匹配。1995年ACM/IEEE超级计算会议记录,加州圣地亚哥,1995年12月3日至8日

  7. 英特尔公司:英特尔64与IA-32体系结构优化参考手册。2011

    谷歌学者 

  8. 沃兹尼亚克A:使用视频指令加快序列比较。Comput-Appl-Biosci 1997,13:145-150。

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

  9. Rognes T,Seeberg E:在普通微处理器上使用并行处理将Smith-Waterman序列数据库搜索速度提高六倍。生物信息学2000,16:699–706。10.1093/生物信息学/16.8.699

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

  10. Farrar M:Striped Smith-Waterman将数据库搜索速度提高了六倍于其他SIMD实现。生物信息学2007,23:156–161。10.1093/生物信息学/btl582

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

  11. Farrar MS:为蜂窝宽带引擎优化Smith Waterman。[http://sites.google.com/site/farrarmichael/SW-CellBE.pdf]

  12. Szalkowski A、Ledergerber C、Krähenbühl P、Dessimoz C:SWPS3-用于IBM Cell/B.E.和x86/SSE2的快速多线程矢量化Smith-Waterman。BMC Res Notes 2008,1:107。10.1186/1756-0500-1-107

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

  13. Wirawan A、Kwoh CK、Hieu NT、Schmidt B:CBESW:Playstation 3上的序列对齐。BMC生物信息学2008,9:377。10.1186/1471-2105-9-377

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

  14. Rudnicki W、Jankowski A、Modzelewski A、Piotrowski A和Zadrożny A:Smith-Waterman算法在细胞微处理器上的新SIMD实现。基金信息2009,96:181–194。

    谷歌学者 

  15. Liu Y,Maskell DL,Schmidt B:CUDASW++:优化Smith-Waterman序列数据库搜索,以获取支持CUDA的图形处理单元。BMC Res Notes 2009,2:73。2018年10月1日1756-0500-2-73

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

  16. LigowskiŁ,Rudnicki WR:使用CUDA在GPU上高效实现Smith-Waterman算法,用于大规模并行扫描序列数据库。第八届IEEE高性能计算生物学国际研讨会,意大利罗马,2009年5月25日

  17. Liu Y,Schmidt B,Maskell DL:CUDASW++2.0:基于SIMT和虚拟SIMD抽象,在启用CUDA的GPU上增强Smith-Waterman蛋白质数据库搜索。BMC Res Notes 2010,3:93。2018年10月1日1756-0500-3-93

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

  18. LigowskiŁ,Rudnicki WR,Liu Y,Schmidt B:使用Smith-Waterman算法精确扫描序列数据库。在GPU计算宝石,翡翠版。摩根考夫曼;2011:155–157.

    第章 谷歌学者 

  19. UniProt联盟:2010年的Universal Protein Resource(UniProt)。《核酸研究》2010,38:D142–8。

    第条 谷歌学者 

  20. Henikoff S,Henikoft J:蛋白质块的氨基酸替代矩阵。美国国家科学院院刊1992,89:10915–10919。10.1073/pnas.89.22.10915

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

  21. Dayhoff MO、Schwartz RM、Orcutt BC:蛋白质进化变化模型。蛋白质序列和结构图谱。第5卷。编辑:Dayhoff MO.Natl Biomed Res Found,华盛顿特区;1978:345–352.

  22. Rumble SM、Lacroute P、Dalca AV、Fiume M、Sidow A、Brudno M:SHRiMP:短颜色空间读数的精确映射。《公共科学图书馆·计算生物学》2009年,5:e1000386。10.1371/日记.pcbi.1000386

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

  23. Miller JR、Koren S、Sutton G:下一代测序数据的汇编算法。基因组学2010,95:315–27。2016年10月10日/j.ygeno.2010.03.001

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

下载参考资料

致谢

这项工作得到了挪威研究委员会的支持,并获得了CMBN的CoE拨款。这要感谢奥斯陆大学信息技术中心的研究计算服务小组访问Titan集群和其他服务。

作者信息

作者和附属机构

作者

通讯作者

与的通信托比约恩·罗杰斯.

电子辅助材料

12859_2011_4572_MOESM1_ESM。广州

附加文件1:源代码SWIPE 1.0版的源代码,以及64位Linux的二进制可执行文件和分数矩阵都包含在这个压缩的tar存档文件中。(GZ 56 KB)

作者提交的原始图像文件

权利和权限

本文由BioMed Central Ltd.授权发布。这是一篇根据知识共享署名许可条款发布的开放存取文章(http://creativecommons.org/licenses/by/2.0)它允许在任何介质中不受限制地使用、分发和复制原始作品,前提是正确引用了原始作品。

转载和许可

关于本文

引用本文

Rognes,T.Faster Smith-Waterman数据库搜索采用序列间SIMD并行。BMC生物信息学 12, 221 (2011). https://doi.org/10.1186/1471-2105-12-221

下载引文

  • 收到:

  • 认可的:

  • 出版:

  • 内政部:https://doi.org/10.1186/1471-2105-12-221

关键词