Motivation
The mpirical
package was originally written to make it easy to
run MPI-parallel Python unit tests (i.e., tests of MPI parallel Python
code that require a fixed number of processes in order to execute
correctly). With mpi4py
, this has always been possible, but to
make this work, one had to run your tests with an explicit use of
mpirun
, like so:
mpirun -np 8 pytest -v my_package/tests/
While this method of running parallel MPI tests works, Imaging the
scenario where you have a mix of tests that require different numbers
of MPI ranks. For example, suppose some tests are serial, some are
parallel and require more than 2 ranks, and some are parallel and
require exactly 2 ranks. In order to run all of these tests, one
would need to run your tests in blocks with different mpirun
calls, like so:
pytest -v my_package/serial_tests/
mpirun -np 2 pytest -v my_package/rank2_tests/
mpirun -np 4 pytest -v my_package/rank4_tests/
and so on. Wouldn’t it be so much better to simply run:
pytest -v mypackage/tests/
and have each test indicate how many processes they need themselves?
That’s the motivation behind mpirical
, and while testing was the
primary motivation, it is not the only thing for which mpirical
can be used. I encourage you to come up with other clever uses for
mpirical
, but if you just use it for testing, that’s fine, too.