AnySeq/GPU: A Novel Approach for Faster Sequence Alignment on GPUs

In recent years, the rapidly increasing number of reads produced by next-generation sequencing (NGS) technologies has driven the demand for efficient implementations of sequence alignments in bioinformatics. However, current state-of-the-art approaches are not able to leverage the massively parallel processing capabilities of modern GPUs with close-to-peak performance.

We present AnySeq/GPU—a sequence alignment library that augments the AnySeq 1 library with a novel approach for accelerating dynamic programming (DP) alignment on GPUs by minimizing memory accesses using warp shuffles and half-precision arithmetic. Our implementation is based on the AnyDSL compiler framework which allows for convenient zero-cost abstractions through guaranteed partial evaluation. We show that our approach achieves over 80% of the peak performance on both NVIDIA and AMD GPUs thereby outperforming the GPU-based alignment libraries AnySeq 1, GASAL 2, ADEPT, and NVBIO by a factor of at least 3.6 while achieving a median speedup of 19.2× over these tools across different alignment scenarios and sequence lengths when running on the same hardware.

This leads to throughputs of up to 1.7 TCUPS (tera cell updates per second) on an NVIDIA GV100, up to 3.3 TCUPS with half-precision arithmetic on a single NVIDIA A100, and up to 3.8 TCUPS on an AMD MI100. AnySeq/GPU is publicly available at https://github.com/AnyDSL/anyseq.

BibTeX
@inproceedings{mueller2022anyseqgpu,
  author          = {Müller, André and Schmidt, Bertil and Membarth, Richard and Leißa, Roland and Hack, Sebastian},
  address         = {Virtual Event},
  booktitle       = {Proceedings of the 2022 International Conference on Supercomputing (ICS)},
  title           = {{AnySeq/GPU}: A Novel Approach for Faster Sequence Alignment on {GPUs}},
  pages           = {1--11},
  year            = 2022,
  month           = jun,
  date            = {2022-06-28/2022-06-30},
  doi             = {10.1145/3524059.3532376},
  organization    = {ACM}
}