itaps-parallel Tag communication operations
Tim Tautges
tautges at mcs.anl.gov
Wed Feb 27 09:28:20 CST 2008
Carl Ollivier-Gooch wrote:
> Tim Tautges wrote:
>> Hi all,
>> Regarding tag communication operations, the goal is to provide in
>> the interface functions that most parallel applications are likely to
>> need. One functionality that comes to mind right away is exchanging
>> tag information on shared and/or ghosted entities. We could get fancy
>> about it, getting more into what kinds of operations would be provided
>> (min/max, average, etc.), but at this point I think it would be better
>> to keep it simple. So, I'd propose two functions:
>>
>> sendTagsShared: communicate specified tag to all processors sharing
>> entities owned by this processor
>>
>> sendTagsGhosted: same, but for ghosted entities
>>
>> The particular syntax for these functions can come later, I just want
>> to get some comments on the general idea. If applications wanted some
>> sort of higher-level behavior, like the operations mentioned above,
>> additional tags could be used to implement those fairly easily.
>
> Tim,
>
> My interpretation of what you propose is that, for a given tag name or
> handle, each process (as opposed to each part) will communicate the
> values of that tag on all entities with duplicates elsewhere.
>
> Comments/questions:
>
> 1. Just to confirm, you mean this to be a push from the owned copy of
> the entity (which, one could argue, is the only one with a right to
> change tag data on the entity anyway...).
>
A push using two-sided communication (i.e. would like to avoid 1-sided
communication for now).
> 2. What about implementations that work part-by-part, even when there
> are multiple parts in a process? Admittedly the communication overhead
> is trivial for this case, but part to part updates of tag data within a
> process are going to matter to some apps. (Ken, am I right there?)
>
I should have written the descriptions in terms of parts rather than
processes (though I still assert that most applications' need for
multiple part per processor/core has more to do with difficulty of
current data storage mechanisms and partitioning tools than a need based
on other things).
> 3. This call implies either an ability to reverse-lookup entities by
> tag handle or an iteration over all entities (of all types) or some
> clever call syntax. Or at least, I can't imagine any alternatives that
> don't....
>
I'm assuming it's easy to get which entities are shared with other
parts, and the application should know when a given tag exists on shared
entities (although maybe we need a type/topology argument to be more
specific?)
> 4. Do you envision these as collective, blocking calls with everything
> done before the functions return? Or as non-blocking send / blocking
> receive pairs?
>
We need at least blocking calls, though this doesn't necessarily imply
that every communication call is blocking (in fact, I'd expect that
within these calls non-blocking calls would be used, but the return from
the entire function would block). These wouldn't necessarily be
collective, they'd just have to match in terms of which other parts a
given part communicated with. Though maybe we should also have a
part/list of parts argument?
> 5. Somewhat off the direct topic, but what are the merits of
> implementing the global reduce sorts of operations as a service on top
> of the interface?
>
I think that would be doable.
> 6. Also somewhat off topic, and probably one to which a reply directly
> to me rather than to the list is appropriate: I can't see how one would
> efficiently implement both dense tags (like solution data) and sparse
> tags (like which vertices need smoothing). Dense tags seem to scream to
> be stored as arrays, which implies an explicit numbering of entities,
> while sparse tags seem more like they should be stored as a map or hash
> on entity handle, or a linked list attached to the entity. Anyone who
> has a good solution for handling both types efficiently, I'd love to
> hear it.
>
This is precisely what MOAB does. Dense tags are stored as arrays,
blocked by series of contiguous handles, sparse tags as a map of
handle/value pairs. This performs well in both memory and speed. It's
one of the important reasons C++ object-based storage isn't used in MOAB.
- tim
> Cheers,
> Carl
>
--
================================================================
"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