  UniFrac is a commonly used metric in microbiome research for comparing
microbiome profiles to one another ("beta diversity"). The recently implemented
Striped UniFrac added the capability to split the problem into many independent
subproblems and exhibits near linear scaling. In this paper we describe steps
undertaken in porting and optimizing Striped Unifrac to GPUs. We reduced the
run time of computing UniFrac on the published Earth Microbiome Project dataset
from 13 hours on an Intel Xeon E5-2680 v4 CPU to 12 minutes on an NVIDIA Tesla
V100 GPU, and to about one hour on a laptop with NVIDIA GTX 1050 (with minor
loss in precision). Computing UniFrac on a larger dataset containing 113k
samples reduced the run time from over one month on the CPU to less than 2
hours on the V100 and 9 hours on an NVIDIA RTX 2080TI GPU (with minor loss in
precision). This was achieved by using OpenACC for generating the GPU offload
code and by improving the memory access patterns. A BSD-licensed implementation
is available, which produces a C shared library linkable by any programming
language.
