Load Balancing
Parthenon supports some load balancing capabilities. By default load
balancing is done “round robin” so that each MPI rank has a roughly
equal number of MeshBlock
s. However, this behaviour can be
modified.
On a per MeshBlock
basis, you call the
function
void MeshBlock::SetCostForLoadBalancing(double cost);
where the cost is any positive real number. For example, you might call the above function in an application driver like:
for (int pmb : pmy_mesh->block_list) {
pmb->SetCostForLoadBalancing(SomeHeuristicFunction(pmb));
}
Then, if you set the following block in your input file:
<parthenon/loadbalancing>
balancer = manual
parthenon will try to give each MPI rank a set of meshblocks with
equal total cost. To disable this functionality and recover default
behaviour, set the balancer
option to default
.
Note
Parthenon does not currently support timer based load balancing, however this is a planned feature.