论文部分内容阅读
随着测序技术的发展,基因序列的数量得到了迅猛的增长,为了有效地利用这些序列数据,我们往往需要将它们与已知的基因组进行比对,从而获取序列间的相似性以及同源性等信息,为后续的进一步分析打下基础。传统的序列比对算法由于自身算法复杂度的限制,在处理海量序列的比对时,往往难以达到期望的效果。近年来随着硬件和软件技术的发展,尤其是众核架构的出现,高性能计算在自然语言处理、人工智能、计算生物学等领域发挥着越来越重要的作用。将高性能计算应用于序列比对,可以显著地改善比对的速度,提高序列分析的效率。本文主要基于英特尔的多核和众核平台,针对全局序列比对问题进行研究,利用多核及众核平台的高速计算能力对全局序列比对算法进行加速优化,进一步提升算法的性能。目前常用的全局序列比对算法是Needleman-Wunsch算法,在此算法的基础上衍生出两种基于位并行优化的比对算法:Myers和BitPAl,它们在功能性上做了一些削减,以获取更高的性能。我们主要从两个维度对上述算法进行了优化:线程并行和SIMD并行,线程并行主要利用多线程技术,将序列数据划分为多个数据块,每个线程并行地处理一块数据。在线程内部,我们利用SSE、AVX2、KNC和AVX512等SIMD指令进行更加细粒度的并行优化。为了提升系统的可扩展性,我们设计并实现了一个模块化的并行框架,我们将系统中的功能进行拆分细化,划分出多个独立的功能性模块,模块间相互协作,共同完成指定的任务。比对算法的逻辑被抽象为一个计算模块,其他的模块只需向该模块中传入数据,然后获取对应的计算结果,无需关心计算模块的具体实现,这样如果需要往并行框架中加入新的比对算法,我们只需修改计算模块的实现,便可以复用框架的其他功能,保证了系统具有良好的扩展性。同时为了解决SIMD指令集不统一的问题,我们设计了虚拟SIMD指令,并实现了对应的指令解释器,利用虚拟SIMD指令,我们只需维护一份代码,通过虚拟指令解释器,我们可以将其翻译为针对不同指令集的代码,可以极大地提高开发效率。我们在不同的平台上对我们的并行算法做了测试,实验证明我们的并行算法取得了很好的加速效果,同时我们和其他的并行实现做了对比,我们的算法取得了更加优异的性能。