itaps-parallel iMeshP_syncPartitionAll, iMeshP_getNumGlobalParts, and communication

Devine, Karen D kddevin at sandia.gov
Wed Oct 15 11:26:53 CDT 2008


OK; I think I understand.  I hadn't considered the case where multiple
partitions would be written into a file; I had assumed just one might be in
the file.

So, yes, we could modify iMeshP_load to accept an array of partition handles
that would be filled by the load.  Then the execution would look like this:
  User creates a mesh instance.
  User creates x partition handles, with associated communicators.
  User calls iMeshP_load, passing in the mesh instance, the array of
partition handles, and some strings that help iMeshP_load know what to do
(Ken and Tim are working on some interoperable strings for basic
functionality).  iMeshP_load fills all the partition handles, calls
iMeshP_syncPartitionAll for each one, and returns them back to the
application.

We had agreed at the March bootcamp that some simple values (like number of
parts in a partition) could be precomputed and stored with the partition.
More complicated values (like the total number of tets in a partition) would
require collective communication.  Since iMeshP_getNumGlobalParts takes a
partition handle as input, you would return the precomputed value for the
input partition handle.

For parallel repartitioning, I can see two scenarios:
-  User provides an input partition handle; iZoltan modifies its contents
based on the result of a partitioning algorithm.  This case would simply
repartition an already distributed mesh.
-  User provides an input partition handle and an output partition handle;
iZoltan fills the output partition handle based on the results of a
partitioning algorithm.  This case could be used to create "secondary"
partitions.

Karen


On 10/15/08 10:12 AM, "Jason Kraftcheck" <kraftche at cae.wisc.edu> wrote:

> Devine, Karen D wrote:
>> My understanding of how one uses partition handles with iMeshP_load is as
>> follows:
>>
>> User creates a mesh instance.
>> User creates a partition handle, associating a communicator with it.
>> User calls iMeshP_load with the mesh instance and partition handle.  In
>> addition to doing everything that iMesh_load did to fill the mesh instance,
>> iMeshP_load constructs parts (either by reading part assignment from files
>> or calling Zoltan), adds the parts to the partition, adds entities to the
>> parts, etc., and calls iMeshP_syncPartitionAll.  Thus, iMeshP_load returns a
>> useable mesh instance and partition handle to the application.  After that,
>> calls to iMeshP_getNumParts do not invoke communication, as the number of
>> parts is pre-computed in iMeshP_syncPartitionAll.
>>
>> Are you saying you would like iMeshP_load to accept and return multiple
>> partition handles?  I don't mind making that change, but we haven't yet
>> worked out the details of having multiple partitions of a mesh (e.g., how to
>> specify which partition is the "active" partition).
>>
>
> No.  I don't think it should need to return multiple partitions.  The
> iMeshP_getNumPartitions and iMeshP_getPartitions should be sufficient for
> that.  I'm more concerned with how to implement iMeshP_getNumGlobalParts if
> there are more partitions than the "active" one.  I had already assumed
> there'd be multiple partitions as iMeshP_get(Num)Partitions is in the API.
>
>
>> Sorry; I admit I do not understand your use case of doing partitioning in
>> parallel.  Whether we do partitioning serially or in parallel, we create
>> generally create one partition with many parts.  Please explain your use
>> case more.  Thanks!
>>
>
> You know more about such things than I.  I had assumed that the resulting
> partitioning need not be related to the partition used to distribute the
> mesh for the parallel partitioner.
>
> - jason
>
>
>






More information about the itaps-parallel mailing list