Skip to content

Partitioning

Cameron Smith edited this page Oct 16, 2019 · 11 revisions

A local partitioner partitions the mesh elements assigned to each process independently of the other processes. For Zoltan, ParMETIS, and our geometric partitioners we run one instance of the partitioner per process using the MPI_COMM_SELF communicator; the partitioner runs in serial on each process. A global partitioner partitions the mesh elements assigned to all processes. For Zoltan, ParMETIS, and our geometric partitioners we run one instance of the partitioner across all processes; the partitioner runs in parallel.

zsplit is a local partitioner that calls the ParMETIS multi-level part k-way graph method. When it is run on a serial mesh it is effectively operating a as global partitioner as it sees all the mesh elements.

ptnParma

The ptnParma tool from SCOREC/core provides a command line tool to partition and load balance a mesh using Zoltan and ParMA.

Running the ptnParma without arguments will output the following usage statement:

Usage: ptnParma <model> <mesh> <outMesh> <factor> <method> <approach> <0:global|1:local>

The factor argument is defined as the finalPartCount/initialPartCount. So, for example, to partition a serial (one part) mesh to eight parts set factor to eight. To partition the eight part mesh to 32 parts set factor to four.

The method argument sets Zoltan's partitioning algorithm. The following options are available:

  • rib for recursive inertial bisection
  • rcb for recursive coordinate bisection
  • hg for hyper-graph
  • pmetis for ParMETIS (see below for options)

The approach argument controls the application of the selected partitioning algorithm. The following options are available (see the Zoltan Manual):

  • ptn partition without consideration of the initial distribution
  • reptn limit the migration costs to build the new partition
  • refine reduces the cut weight
  • kway (pmetis only) multilevel Kernighan-Lin partitioning
  • geomkway (pmetis only) hybrid method based on PartKway and space filling curves"
  • refkway (pmetis only) refine the current partition (balance)

Setting the last argument, <0:global|1:local>, to 0 runs one instance of the selected partitioner that can use information about the entire partition to make 'global' decisions. Setting the argument to 1 runs one instance per-process ('local') that can only use the on-process partition information to make decisions.

When creating a partition with less than 16Ki parts, the recommended settings are pmetis for method and reptn for approach and 1 for <0:global|1:local>. Assuming the input partition is fairly well balanced, then pmetis, reptn, and 0 should be used local ParMETIS graph-based.

After partitioning ParMA Vertex>Element balancing runs to reduce the vertex and element imbalances.

Clone this wiki locally