Skip to content

Review: BEAGLE 3: Improved Performance, Scaling, and Usability for a High-Performance Computing Library for Statistical Phylogenetics

Citation

  • Ayres, D. L., Cummings, M. P., Baele, G., Darling, A. E., Lewis, P. O., Swofford, D. L., Huelsenbeck, J. P., Lemey, P., Rambaut, A., & Suchard, M. A. (2019). BEAGLE 3: improved performance, scaling, and usability for a high-performance computing library for statistical phylogenetics. Systematic Biology, 68(6), 1052–1061.
  • DOI

Abstract

BEAGLE is a high-performance library for phylogenetic likelihood computation, supporting multi-core CPU and GPU hardware through a common API. Version 3 extends the library with improved scaling for large data sets, new substitution models, and enhanced multi-GPU support. Benchmarks demonstrate substantial speedups over CPU implementations for realistic data sizes and models.


BEAGLE (Broad-platform Evolutionary Analysis General Likelihood Evaluator) is the reference library for high-performance phylogenetic likelihood computation across BEAST, MrBayes, and other major Bayesian phylogenetic programs. Ayres et al. (2019) describes the third major version, with improvements to GPU utilization, scaling, and model coverage.

The key technique documented in Section 2 is per-node rescaling to prevent floating-point underflow. On long branches or with large trees, partial likelihoods at internal nodes near the root can fall below the minimum representable float32 value before the final summation. BEAGLE addresses this by dividing each node's partial likelihood vector by its maximum value and accumulating the log of that maximum in a separate accumulator. The rescaled partial likelihoods remain representable in float32 while the exact log probability is recovered at the root by adding the accumulated log-scalars.

This is exactly the pattern implemented in Hifuku. The constraint of using float32 for partial likelihoods (documented in CONSTRAINTS.md) is motivated by GPU memory bandwidth: float32 is twice as compact as float64 and loads twice as fast from GPU global memory. The per-node rescaling makes float32 viable for arbitrarily deep trees without loss of mathematical correctness.

BEAGLE 3 also documents the partitioned likelihood approach for partitioned models (different substitution models on different alignment regions), which informed the design of Hifuku's per-partition kernel dispatch. The paper's benchmarks demonstrate that GPU acceleration provides speedups of 10-100x over CPU implementations for typical Bayesian phylogenetic MCMC runs, validating the architectural choice to build Hifuku's likelihood evaluation on CUDA.

In-document navigation

Section Content
Section 2 Per-node rescaling and float32 stability
Section 3 GPU implementation and memory layout
Section 4 Multi-GPU scaling results
Table 1 API function list (resource allocation, partials, likelihood)