Isorropia: Partitioning and Rebalancing package

Version 1.0d

Introduction

Isorropia is a repartitioning/rebalancing package, intended to assist with redistributing objects such as matrices and matrix-graphs in a parallel execution setting, to allow for more efficient computations. To enable Isorropia in your Trilinos build, provide the argument '--enable-isorropia' to configure.

Isorropia is primarily an interface to the Zoltan library, but can be built and used with minimal capability without Zoltan. To enable Isorropia's Zoltan support, you need to add '--enable-isorropia-zoltan' and '--enable-epetraext' to your Trilinos configure command, and provide include-paths and library specifications for Zoltan version 3.0 or higher (provide these to configure using the '--with-incdirs' and '--with-libs' configure arguments). If you built Zoltan with third party libraries, e.g. ParMETIS, then you must also link with these libraries.

Overview of Isorropia.

Isorropia's user interface consists primarily of the Isorropia::Partitioner, Isorropia::Redistributor and Isorropia::CostDescriber classes, as well as the Isorropia::Epetra::create_balanced_copy functions.

The Isorropia::create_balanced_copy functions are free-standing functions (not class members) which simply take an input object (Epetra_CrsGraph, Epetra_CrsMatrix, etc.) and return a copy which is balanced across partitions.

For more sophisticated use-cases, such as performing one partitioning and then using it to redistribute multiple objects, it is more efficient to use the Isorropia::Partitioner and Isorropia::Redistributor classes. The general usage model is to:

  1. create a Isorropia::Partitioner instance (providing as input the matrix-graph or row-matrix object that is to be re-partitioned, and optionally a Isorropia::CostDescriber instance with weights/costs to influence the partitioning).
  2. create a Isorropia::Redistributor object (providing as input a Isorropia::Partitioner instance)
  3. Use the Isorropia::Redistributor to redistribute one or more objects to the new partitioning.

Isorropia is currently aimed primarily at repartitioning/redistributing Epetra objects, including Epetra_CrsGraph, Epetra_RowMatrix (which includes Epetra_CrsMatrix and Epetra_VbrMatrix) and Epetra_MultiVector.

Example Programs

A number of example programs which demonstrate using Isorropia are provided in the 'packages/isorropia/example' subdirectory.

matrix_1.cpp demonstrates creating a balanced copy of Epetra_CrsGraph and Epetra_CrsMatrix objects using Isorropia::Epetra::create_balanced_copy functions.

part_redist.cpp demonstrates repartitioning and redistributing the contents of an Epetra_LinearProblem object, using the Isorropia::Partitioner and Isorropia::Redistributor classes. This program does not use user-specified weights/costs.

Other programs in the example subdirectory demonstrate the use of weights/costs data to influence the partitioner. See vert_weights.cpp, graphedge_weights.cpp and hgedge_weights.cpp.

Defaults, Parameters, ...

Several Isorropia classes and methods accept Teuchos::ParameterList objects, allowing the user to control certain behavior.