Zoltan User's Guide  |  Next  |  Previous

PHG - Parallel Hypergraph and Graph Partitioning with Zoltan

This is the built-in parallel hypergraph partitioner in Zoltan.

Value of LB_METHOD: HYPERGRAPH (for hypergraph partitioning) or
GRAPH (for graph partitioning)
Value of HYPERGRAPH_PACKAGE: PHG
Parameters:
   LB_APPROACH
The load balancing approach:.
REPARTITION  - partition but try to stay close to the current partition/distribution
REFINE  - refine the current partition/distribution; assumes only small changes
PARTITION  - partition from scratch, not taking  the current data distribution into account
   PHG_REPART_MULTIPLIER
For repartitioning, this parameter determines the trade-off between application communication (as represented by cut edges) and data migration related to rebalancing. PHG attempts to minimize the function (PHG_REPART_MULTIPLIER* edge_cut + migration volume). The migration volume is measured using the ZOLTAN_OBJ_SIZE_MULTI_FN or ZOLTAN_OBJ_SIZE_FN query functions. Make sure the units for edges and object sizes are the same.
Simply put, to emphasize communication within the application, use a large value for PHG_REPART_MULTIPLIER. Typically this should be proportional to the number of iterations between load-balancing calls.
   PHG_MULTILEVEL
This parameter specifies whether a multilevel method should be used (1) or not (0). Multilevel methods produce higher quality but require more execution time and memory.
   PHG_EDGE_WEIGHT_OPERATION Operation to be applied to edge weights supplied by different processes for the same hyperedge:
ADD - the hyperedge weight will be the sum of the supplied weights
MAX - the hyperedge weight will be the maximum of the supplied weights
ERROR - if the hyperedge weights are not equal, Zoltan will flag an error, otherwise the hyperedge weight will be the value returned by the processes
   ADD_OBJ_WEIGHT
Add another object (vertex) weight. Currently multi-weight partitioning is not supported, but this parameter may also be used for implicit vertex weights. Valid values are:
NONE
UNIT or VERTICES (each vertex has weight 1.0)
PINS or NONZEROS or vertex degree (vertex weight equals number of hyperedges containing it, i.e., the degree)
   PHG_CUT_OBJECTIVE
Selects the partitioning objective, CONNECTIVITY or HYPEREDGES. While hyperedges simply counts the number of hyperedges cut, the connectivity metric weights each cut edge by the number of participating parts minus one (aka the λ-1 cut metric). The connectivity metric better represents communication volume for most applications. The hyperedge metric is useful for certain applications, e.g., minimizing matrix border size in block matrix decompositions.
   PHG_OUTPUT_LEVEL
Level of verbosity; 0 is silent.
   CHECK_HYPERGRAPH
Check that the query functions return valid input data; 0 or 1. (This slows performance; intended for debugging.)
   PHG_COARSENING_METHOD Low-level parameter: The method to use in the matching/coarsening phase:
AGG - agglomerative inner product matching (a.k.a. agglomerative heavy connectivity matching); gives high quality.
IPM - inner product matching (a.k.a. heavy connectivity matching); gives high quality.
L-IPM -  local IPM on each processor. Faster but usually gives poorer quality.
A-IPM - alternate between IPM and L-IPM. (A compromise between speed and quality.)
none -  no coarsening
   PHG_COARSEPARTITION_METHOD Low-level parameter: Method to partition the coarsest (smallest) hypergraph; typically done in serial:
RANDOM - random
LINEAR - linear assignment of the vertices (ordered by the user query function)
GREEDY - greedy method based on minimizing cuts
AUTO -  automatically select from the above methods (in parallel, the processes will do different methods)
   PHG_REFINEMENT_METHOD
Low-level parameter: Refinement algorithm:
FM - approximate Fiduccia-Mattheyses (FM)
NO - no refinement
   PHG_REFINEMENT_QUALITY Low-level parameter: Knob to control the trade-off between run time and quality. 1 is the recommended (default) setting, >1 gives more refinement (higher quality partitions but longer run time), while <1 gives less refinement (and poorer quality).
   PHG_RANDOMIZE_INPUT
Low-level parameter: Randomize layout of vertices and hyperedges in internal parallel 2D layout?
Setting this parameter to 1 often reduces Zoltan-PHG execution time.
   PHG_EDGE_SIZE_THRESHOLD
Low-level parameter: Value 0.0 through 1.0, if number of vertices in hyperedge divided by total vertices in hypergraph exceeds this fraction, the hyperedge will be omitted.
   PHG_PROCESSOR_REDUCTION_LIMIT
Low-level parameter: In V-cycle, redistribute coarsened hypergraph to this fraction of processors when number of pins in coarsened hypergraph is less than this fraction of original number of pins. Original number of pins is redefined after each processor redistribution.
Default values:

LB_APPROACH = REPARTITION

PHG_REPART_MULTIPLIER=100

PHG_MULTILEVEL=1 if LB_APPROACH = partition or repartition; 0 otherwise.

PHG_EDGE_WEIGHT_OPERATION=max

ADD_OBJ_WEIGHT=none

PHG_CUT_OBJECTIVE=connectivity

CHECK_HYPERGRAPH=0

PHG_OUTPUT_LEVEL=0

PHG_COARSENING_METHOD=agg

PHG_COARSEPARTITION_METHOD=auto

PHG_REFINEMENT_METHOD=fm

PHG_REFINEMENT_QUALITY=1

PHG_RANDOMIZE_INPUT=0

PHG_EDGE_SIZE_THRESHOLD=0.25

PHG_PROCESSOR_REDUCTION_LIMIT=0.5
Required Query Functions for LB_METHOD = HYPERGRAPH:

ZOLTAN_NUM_OBJ_FN

ZOLTAN_OBJ_LIST_FN

ZOLTAN_HG_SIZE_CS_FN
ZOLTAN_HG_CS_FN
Optional Query Functions for LB_METHOD = HYPERGRAPH:

ZOLTAN_OBJ_SIZE_MULTI_FN or ZOLTAN_OBJ_SIZE_FN for LB_APPROACH=Repartition.

ZOLTAN_PART_MULTI_FN or ZOLTAN_PART_FN for LB_APPROACH=Repartition and for REMAP=1.

ZOLTAN_HG_SIZE_EDGE_WTS_FN

ZOLTAN_HG_EDGE_WTS_FN

ZOLTAN_NUM_FIXED_OBJ_FN

ZOLTAN_FIXED_OBJ_LIST_FN
Note for
LB_METHOD = HYPERGRAPH:


It is possible to provide the graph query functions instead of the hypergraph queries, though this is not recommended. If only graph query functions are registered, Zoltan will automatically create a hypergraph from the graph, but this is not equivalent to graph partitioning. In particular, the edge weights will not be accurate.
Required Query Functions for LB_METHOD = GRAPH:

ZOLTAN_NUM_OBJ_FN

ZOLTAN_OBJ_LIST_FN

ZOLTAN_NUM_EDGES_MULTI_FN or ZOLTAN_NUM_EDGES_FN
ZOLTAN_EDGE_LIST_MULTI_FN or ZOLTAN_EDGE_LIST_FN
Optional Query Functions for LB_METHOD = GRAPH:

ZOLTAN_OBJ_SIZE_MULTI_FN or ZOLTAN_OBJ_SIZE_FN for LB_APPROACH=Repartition.

ZOLTAN_PART_MULTI_FN or ZOLTAN_PART_FN for LB_APPROACH=Repartition and for REMAP=1.


[Table of Contents  | Next:  PaToH  |  Previous:  Hypergraph Partitioning  |  Privacy and Security]