摘要
本文介绍了基于oneAPI平台开发的生物序列聚类应用,文章结构如下。
应用背景:这里介绍聚类应用nGIA,介绍了为什么开发这个应用,以及它解决了什么问题。这部分非生信领域的同学可以跳过。
如何入门oneAPI:结合我自己的经历,介绍了一条从零开始学习oneAPI的路径。
CUDA代码移植与原生代码开发:结合开发应用的经验,介绍了从CUDA移植到oneAPI时候踩的一些坑,以及为什么推荐写原生的代码。
oneAPI的跨平台特性:用实际的应用,把oneAPI代码跑在nvidia的GPU上。展示了oneAPI的跨平台特性,介绍了开发跨平台代码的时候需要避免哪些问题。
应用背景
首先介绍一下生物序列聚类。序列聚类也就是序列去冗余工作,比较著名的应用有CD-HIT,Uclust,Linclust等。相关领域的同学应该都知道,聚类是生信领域基础且重要的工具。那些被广泛使用的聚类工具,谷歌学术上可以看到,文章的引用都是过千甚至过万的,这也显示了聚类工具的重要和普遍。
目前的聚类工具得到的都是近似结果。Holm[1]在1998年提出了一种贪婪增量的聚类方法,这是可以产生金标准的方法。但是Holm的方法计算量太大,以至于运行时间长到无法接受,因此研究者们提出了各种改进算法,通过牺牲精度的方法换取计算速度的提升。我实际测试发现,速度越快的聚类工具,聚类结果的精度越低。
nGIA是一个能够进行准确聚类,且速度足够快的聚类工具集。Holm的方法能够得到聚类金标准,受限于计算量巨大而无法实现,随着GPU的发展目前算力已经足够充足了。其他聚类工具都是基于CPU平台的,所以可用算力很少。nGIA是基因超算平台的,利用GPU加速,通过MPI支持多节点,因此可用算力比其他应用高出几个数量级。通过充分利用超算的巨大算力,nGIA可以得到精确的聚类结果,且运行速度很快。同时nGIA也有可以运行在普通电脑上的单节点版本,利用GPU进行加速,即使用普通电脑依然比其他工具运行速度更快。nGIA支持蛋白序列和基因序列数据集的聚类,支持单节点和多节点,支持cuda和oneAPI。
[1]Holm L, Sander C. Removing near-neighbour redundancy from large protein sequence collections[J]. Bioinformatics (Oxford, England), 1998, 14(5): 423-429.
如何入门oneAPI
这部分我想结合我自己的经历,推荐给大家一条从零开始学习oneAPI的路径。最初我是听了oneAPI的线上讲座,开始对oneAPI产生兴趣。之后开始自己写代码,然后遇到问题就从零零碎碎的渠道一点一点学习。回头来看,我走了一些弯路,初始的学习也是不成体系的。现在整理了一下我走过的路,然后按照循序渐进的顺序推荐给大家,希望有帮助。
1. 首先关于oneAPI的介绍,我觉得有一篇