CustomTopology

CustomTopology()

The CustomTopology class provides a mechanism to describe parametric domain decompositions. It allows users to specify how the dimensions of a domain are decomposed into chunks based on certain parameters.

Examples

For example, let’s consider a domain with three distributed dimensions: x, y, and z, and an MPI communicator with N processes. Here are a few examples of CustomTopology:

With N known, say N=4: * (1, 1, 4): the z Dimension is decomposed into 4 chunks * (2, 1, 2): the x Dimension is decomposed into 2 chunks and the z Dimension is decomposed into 2 chunks

With N unknown: * (1, '*', 1): the wildcard '*' indicates that the runtime should decompose the y Dimension into N chunks * ('*', '*', 1): the wildcard '*' indicates that the runtime should decompose both the x and y Dimensions in nstars factors of N, prioritizing the outermost dimension

Assuming that the number of ranks N cannot evenly be decomposed to the requested stars=6 we decompose as evenly as possible by prioritising the outermost dimension

For N=3 * ('*', '*', 1) gives: (3, 1, 1) * ('*', 1, '*') gives: (3, 1, 1) * (1, '*', '*') gives: (1, 3, 1)

For N=6 * ('*', '*', 1) gives: (3, 2, 1) * ('*', 1, '*') gives: (3, 1, 2) * (1, '*', '*') gives: (1, 3, 2)

For N=8 * ('*', '*', '*') gives: (2, 2, 2) * ('*', '*', 1) gives: (4, 2, 1) * ('*', 1, '*') gives: (4, 1, 2) * (1, '*', '*') gives: (1, 4, 2)

Notes

Users should not directly use the CustomTopology class. It is instantiated by the Devito runtime based on user input.

Back to top