  Allreduce is one of the most frequently used MPI collective operations, and
thus its performance attracts much attention in the past decades. Many
algorithms were developed with different properties and purposes. We present a
novel approach to communication description based on the permutations inspired
by the mathematics of a Rubik's cube where the moves form a mathematical
structure called group. Similarly, cyclic communication patterns between a set
of $P$ processes may be described by a permutation group. This new approach
allows constructing a generalization of the widely used Allreduce algorithms
such as Ring, Recursive Doubling and Recursive Halving. Using the developed
approach we build an algorithm that successfully solves the well-known problem
of the non-power-of-two number of processes which breaks down the performance
of many existing algorithms. The proposed algorithm provides a general solution
for any number of processes with the dynamically changing amount of
communication steps between $\lceil \log{P} \rceil$ for the latency-optimal
version and $2 \cdot \lceil \log{P} \rceil$ for the bandwidth-optimal case.
