itaps-parallel Part handles

Tim Tautges tautges at mcs.anl.gov
Fri Jun 20 00:09:21 CDT 2008


Hi all,
   I realize now why I missed this discussion in March, it was in the
middle of a 3 week/3 trip stretch for me, and I got overwhelmed and
didn't follow the discussion closely.

Anyway, this email is an attempt to summarize my objection to embedding
the proc rank in the part handle.  As background, you should know that I
almost went this way in MOAB (to the point where it's still implemented
in MOAB) but ultimately decided not to, for many of the same reasons I
note below.

And, sorry if this is dumb and/or offensive, but I still don't see a 
logical, non-pejorative statement of the problem whose only, or most 
logical, solution is the two primary requirements causing me such 
heartburn (part handles must be unique, and processor must be derivable 
from part handle).  And that's after reading the March email thread at 
least three times, and thinking about this for at least 4 hours over the 
last couple of days.

The remainder of this email consists of 3 parts:
Part I: my objections
Part II: questions about the requirements Karen sent out Wed afternoon
Part III: questions/comments arising while looking through current
interface draft


Part I

1. If we are required to embed the proc rank in the handle, then either 
I cannot use entity sets to represent parts, or I have to embed the proc 
in all my set handles, which allows at most 2**(32-n)-1 other sets 
available on any processor, where n is the log of the number of 
processors; if we need to support millions of processors, n >= 20, 
leaving me only 4k sets.  Putting that kind of limitation on the number 
of sets will not be acceptable for some important applications of sets, 
e.g. geometric topology sets, sets to represent kdtree decomposition of 
the local mesh (for point location), or OBB tree decomposition of 
surface triangulations (for ray firing).  Saying we must not implement 
parts as sets is at least as bad as saying we must implement parts as 
sets; furthermore, it prevents the dual-use of a given set as a part 
also (something which I already do, and which is quite useful).

2. Deriving the proc from a part handle will still need to be done
through a function in iMeshP, to avoid forcing applications to do
bit-wise operations on the handles (e.g. Fortran 77 doesn't have bitwise
operations).  If we need to do this interpretation in a function anyway, 
why not also let the implementation decide how to track the part/proc 
assignment?

3. If you allow applications to directly find the proc from the part 
handle (without going through an iMesh function), then besides 
specifying embedding the proc in the handle, you'll also
need to specify exactly how that's done, e.g. which bits hold the rank,
and whether that number of bits can change depending on the max # procs
you'd like to support with that mesh.  Are we confident we can get a
consensus on that?

4. If the application is telling Zoltan about the parts, and a part can 
reside on only one processor, then doesn't that mean that Zoltan finds 
out where the parts reside at the same time?  If messages are sent 
containing the part handle, is it so much trouble to add one extra 
integer denoting the proc where that part resides?  If it's a point to 
point message, you won't even have to do that, since you know where the 
message came from (for MPI, anyway).

Part II

Also, some comments on the proposed requirements and justification of them:

   + Part handles are globally unique (so that remote part handles make
sense and Zoltan doesn't go insane);
- remote part handles won't exist on a processor unless they were 
communicated there somehow; in that case the implementation will be able 
to store the proc # with (not in) the handle if it so chooses
- didn't I hear you say, Karen, that Zoltan computes its own 0..n-1
numbering of parts anyway?  Or, will you eliminate that if we have
unique part handles?
- are we assuming an application will allocate all the part handles
before calling Zoltan for the partitioning case?  Does it actually have
to migrate entities to the processor owning a part in order to assign
those entities to that part?  Or, can a given processor only assign 
local entities to local parts?  That seems like a pretty severe 
limitation (and would only allow you to partition for increasing #'s of 
processors besides)

    +  Part handles allow identification (without communication or
O(#parts) storage) of what process the part lives on;

- so let the implementation decide whether to store the process 
alongside the part handle.  Even if an implementation decides to do 
that, that still allows retrieval of the process assignment w/o 
communication or O(#parts) storage, except in the case where you have 
O(#parts) handles, in which case you're already storing that amount of 
information.


Part III: questions/comments arising from reading current draft:

_createPartitionPar: do all processors have to assign the same handle to
the partition?  How does one designate partitions on the remote processor?

_getNumPartsOnRank, _getPartsOnRank: having unique part handles and proc
rank embedded in the part handle is insufficient for satisfying these
functions.  These functions require either O(n) storage or communication
(or assumptions about how a total # parts is distributed).  I just noted 
that that was discussed in the bootcamp and email thread.  However, 
these functions are still in the DraftInterface doc as of 5/27 (with 
comments later about this issue)



- tim


-- 
================================================================
"You will keep in perfect peace him whose mind is
   steadfast, because he trusts in you."               Isaiah 26:3

              Tim Tautges            Argonne National Laboratory
          (tautges at mcs.anl.gov)      (telecommuting from UW-Madison)
          phone: (608) 263-8485      1500 Engineering Dr.
            fax: (608) 263-4499      Madison, WI 53706







More information about the itaps-parallel mailing list