title: Exploiting graphics processing units for computational biology and bioinformatics.
abstract: Advances in the video gaming industry have led to the production of low-cost, high-performance graphics processing units (GPUs) that possess more memory bandwidth and computational capability than central processing units (CPUs), the standard workhorses of scientific computing. With the recent release of generalpurpose GPUs and NVIDIA's GPU programming language, CUDA, graphics engines are being adopted widely in scientific computing applications, particularly in the fields of computational biology and bioinformatics. The goal of this article is to concisely present an introduction to GPU hardware and programming, aimed at the computational biologist or bioinformaticist. To this end, we discuss the primary differences between GPU and CPU architecture, introduce the basics of the CUDA programming language, and discuss important CUDA programming practices, such as the proper use of coalesced reads, data types, and memory hierarchies. We highlight each of these topics in the context of computing the all-pairs distance between instances in a dataset, a common procedure in numerous disciplines of scientific computing. We conclude with a runtime analysis of the GPU and CPU implementations of the all-pairs distance calculation. We show our final GPU implementation to outperform the CPU implementation by a factor of 1700.
authors.affiliation: Computational Genetics Laboratory, Department of Genetics, Dartmouth Medical School, Lebanon, NH 03756, USA. Joshua.Payne@Dartmouth.edu
authors.forename: Joshua L
authors.initials: JL
authors.lastname: Payne
authors.forename: Nicholas A
authors.initials: NA
authors.lastname: Sinnott-Armstrong
authors.forename: Jason H
authors.initials: JH
authors.lastname: Moore
mesh_terms: D019295:Computational Biology / Q000379:methods*; D003196:Computer Graphics; D003201:Computers; D007802:Language; D012984:Software