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]