Review: The Phylogenetic Likelihood Library¶
Citation
- Flouri, T., Izquierdo-Carrasco, F., Darriba, D., Aberer, A. J., Nguyen, L.-T., Minh, B. Q., von Haeseler, A., & Stamatakis, A. (2015). The Phylogenetic Likelihood Library. Systematic Biology, 64(2), 356–362.
- DOI
Abstract¶
The Phylogenetic Likelihood Library (PLL) is a highly optimized C library for maximum likelihood-based phylogenetic inference. It provides a common API abstracting over single-core and multi-core computation with SIMD vectorization. The library supports partitioned analyses with per-partition models and has been adopted by RAxML and several other programs.
PLL is the computational backbone of RAxML and several other maximum-likelihood phylogenetic programs. It abstracts over the hardware details of likelihood computation, providing a clean API for setting up partitions (contiguous blocks of alignment sites sharing a substitution model), updating branch lengths, performing NNI moves, and evaluating the log-likelihood. The library uses SIMD vectorization (SSE3/AVX) to accelerate the innermost loops of the pruning recursion.
The partitioned likelihood model is particularly relevant to Hifuku's design. A partitioned alignment assigns different substitution models (and potentially different trees) to different subsets of sites. PLL computes the total log-likelihood as a sum over partitions:
where each \( L_p \) is computed via independent pruning recursions. Hifuku's GPU kernel supports partitioned computation following the same scheme: each partition has its own rate matrix, stationary frequencies, and eigendecomposition, but they all run on the same tree topology.
Hifuku's GPU architecture borrows several conventions from PLL: the representation of partial likelihoods as two-dimensional arrays indexed by site pattern and character state, the separation of the "update partials" and "evaluate likelihood" steps, and the per-node rescaling approach. Where PLL uses SIMD vectorization on CPU, Hifuku maps the same computation to CUDA thread blocks on GPU.