Return value of MPI_Dims_create()
Return value of MPI_Dims_create()
Assuming I have 64
processes and I want to create an MPI Cartesian Topology in 3-D
, the default topology returned by MPI_Dims_create()
is 4x4x4
. Why is it 4x4x4
and why not 8x4x2
or 4x8x2
or 16x2x2
or any other combination that is possible ?
64
3-D
MPI_Dims_create()
4x4x4
4x4x4
8x4x2
4x8x2
16x2x2
1 Answer
1
MPI_Dims_create
is specifically made as convenience function to create a balanced topology.
MPI_Dims_create
A balanced topology, i.e. ideally cube has a certain optimal properties. Consider you are doing a simulation on a 160x160x160
grid with your processes.
160x160x160
With 4x4x4
each processor gets 40x40x40
to work on and in case of a simple border exchange has to send 40x40
to each of the 6 neighbors (9600
in total)
4x4x4
40x40x40
40x40
9600
With 8x4x2
each processor gets 20x40x80
, the border is 2x20x40 + 2x20x80 + 2x40x80 = 11200
8x4x2
20x40x80
2x20x40 + 2x20x80 + 2x40x80 = 11200
With 16x2x2
each processor gets 10x80x80
, the border is 4x10x80 + 2x80x80 = 16000
16x2x2
10x80x80
4x10x80 + 2x80x80 = 16000
As you can see, the border size that needs to be exchanged is the smallest for the cube. Generally, a balanced topology is a good default.
You can also set constraints with MPI_Dims_create
or use MPI_Cart_create
to create flexible Cartesian topologies.
MPI_Dims_create
MPI_Cart_create
By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.