Skip to content

stelzch/reprored

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Logo of ReproRed

DOI

ReproRed

This repository contains the code for multiple reproducible reduction algorithms. It is used in Repro-RAxML-NG

  • MPI_Allreduce (not reproducible, used as baseline)
  • ReproBLAS achieves reproducibility through pre-rounding input data and using higher-precision accumulators
  • $k$-Gather reduces k consecutive values in parallel linearily from left to right, gathers all intermediate results on root rank and reduces from left to right
  • Binary Tree Summation uses a binary tree to dictate reduction order independent of core count
  • ReproRed (formerly Dual Tree Summation) decouples the tree used for communication from the tree used to dictate the reduction order, uses theoretically optimal message count.

Configuration

Selection of the reduction algorithm happens via environment variables

REPR_REDUCE : Chooses the reduction algorithm. Possible values:

  • ALLREDUCE
  • BINARY_TREE
  • DUAL_TREE
  • KGATHER
  • REPROBLAS

REPR_REDUCE_K : Sets the parameter $k$ for KGATHER and BINARY_TREE. Must be positive integer. Default 1.

REPR_REDUCE_M : Sets degree of the communication tree for DUAL_TREE. See this visualization on how $m$ affects where PEs send their intermediate results. Must be integer greater than 1. Default 2.

REPR_REDUCE_TWOPHASE : By default, this library will use allreduction algorithms where possible (ALLREDUCE and REPROBLAS). If the environment variable REPR_REDUCE_TWOPHASE is set to any value, it uses a two-phase approach of MPI_Reduce followed by an MPI_Bcast instead.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages