itaps-parallel Notes from today's meeting
Tim Tautges
tautges at mcs.anl.gov
Mon Apr 19 10:14:20 CDT 2010
Precisely.
- tim
Devine, Karen D wrote:
> I think the issue is not, "Can contact be implemented with only one
> partition of a mesh?" Rather, the issue is, "Some applications do contact
> with two separate partitions of a mesh. Can iMeshP support that?"
>
> Karen
>
>
>
> On 4/19/10 8:48 AM, "Tim Tautges" <tautges at mcs.anl.gov> wrote:
>
>> The issue addressed in the work I'm citing had to do with load balancing of
>> the surface vs. volume calculation, where
>> surface here means geometric surface, not interprocessor boundary. In that
>> work, they needed to check for contact
>> frequently (maybe even every timestep?), but keep the volumetric partition
>> also, so migration was out of the question.
>> That's why I call it different from migration before/after adaptation. I'm
>> sure there are multiple ways of implementing
>> it, though.
>>
>> - tim
>>
>>
>> Mark Shephard wrote:
>>> It is not hard at all. In fact it is quite straight forward and clean to
>>> add an implementation that already deals with fine level evolution of
>>> the simulation model.
>>>
>>> tautges at mcs.anl.gov wrote:
>>>> That sounds really hard, but ok.
>>>>
>>>> - tim
>>>>
>>>>
>>>> On Apr 19, 2010, at 8:55 AM, Mark Shephard <shephard at scorec.rpi.edu>
>>>> wrote:
>>>>
>>>>> Tim,
>>>>>
>>>>> I am sure that we can effectively implement contact, including the
>>>>> evolution of contact and inclusion of mesh adaptation if desired as I
>>>>> have indicated (a single partition of the mesh). The issue of needing
>>>>> to migrate things between parts during adaptation has nothing to do
>>>>> with it. Some form of dynamic load balancing is to account for any
>>>>> change (contact evolution or mesh adaptation) if one wants to
>>>>> continue to scale. Again, that is independent of the other questions.
>>>>>
>>>>> Mark
>>>>>
>>>>>
>>>>> tautges at mcs.anl.gov wrote:
>>>>>> I'm not sure this is true. If I understand your amr method
>>>>>> correctly, you only adapt the interior of meshes, migrating a potion
>>>>>> of an interface to make that so. Or, have you changed that?
>>>>>> Whereas with parallel contact (at least as implemented by sandia,
>>>>>> which I'm familiar with), the face partition is completely unrelated
>>>>>> to the region partition.
>>>>>> - tim
>>>>>> On Apr 19, 2010, at 5:15 AM, Mark Shephard <shephard at scorec.rpi.edu>
>>>>>> wrote:
>>>>>>> Two quick comments/questions:
>>>>>>>
>>>>>>> Is there a conference call today, Monday? If yes, what time?
>>>>>>>
>>>>>>> The issues of doing a contact problem in parallel are really much
>>>>>>> the say as doing mesh adaptivity in parallel with a form of
>>>>>>> nonmanifold model. The only new item past that of a 2-manifold
>>>>>>> situation is keeping track of the contact face interactions. There
>>>>>>> is absolutely no problem doing this within in the concept of a
>>>>>>> single partition of the mesh. On the other hand, considering how to
>>>>>>> track an evolving contact interface through the use of multiple
>>>>>>> partitions of the mesh would actually add substantial complexity to
>>>>>>> the mesh up-date and dynamic load balancing processes.
>>>>>>>
>>>>>>> Mark
>>>>>>>
>>>>>>> Carl Ollivier-Gooch wrote:
>>>>>>>> Tim Tautges wrote:
>>>>>>>>> I think Jason's argument is important here: the easy things
>>>>>>>>> should be easy, and more complicated things possible. I think
>>>>>>>>> this is related to Seegyoung's point about having a single API.
>>>>>>>>> I think what this boils down to is an assertion that we should
>>>>>>>>> think primarily in terms of one iMesh Instance per process. For
>>>>>>>>> those applications wanting to use multiple instances, that
>>>>>>>>> implies communication between the instances at least
>>>>>>>>> conceptually, if not in the implementation also. What this boils
>>>>>>>>> down to even further is that Part and iMesh instance are
>>>>>>>>> synonymous. The issue of an entity assigned to exactly one Part
>>>>>>>>> morphs to one of representation vs. ownership: an entity can be
>>>>>>>>> represented in more than one instance (e.g. faces on part
>>>>>>>>> boundaries, in an element-based partition), but can be owned by
>>>>>>>>> only one of those instances.
>>>>>>>> Personally, I'm very much in favor of the part = instance
>>>>>>>> interpretation, for reasons already outlined.
>>>>>>>> In addition, I can easily see how we'll be able to implement this,
>>>>>>>> whereas with multiple parts per instance, the easiest approach
>>>>>>>> would be for us, effectively, to have multiple of our current
>>>>>>>> instances inside a wrapper; yuck!
>>>>>>>> At a higher level, this also makes the whole parts-as-special-sets
>>>>>>>> argument moot, saving us from possibly re-visiting that. If this
>>>>>>>> is the way we decide to go, we'll want to do an audit of iMeshP
>>>>>>>> functions, because part handles will now be synonymous with iMesh
>>>>>>>> instance handles. I suspect that a whole lot of functions either
>>>>>>>> go away or get simpler. This is not a bad thing.
>>>>>>>>> One of the reasons we initially thought in terms of multiple
>>>>>>>>> parts per process was to handle over-partitionings, where a
>>>>>>>>> process could be assigned multiple parts, e.g. for better load
>>>>>>>>> balancing, and flexibility in what's stored with a mesh or how
>>>>>>>>> it's stored. I think that concept is an artifact of how a
>>>>>>>>> partitioning is stored with the mesh (or how the mesh is stored
>>>>>>>>> in files to reflect a partitioning). From an application's point
>>>>>>>>> of view, in most cases it's still going to want to access the
>>>>>>>>> mesh from a single instance on a given process, no matter how
>>>>>>>>> that mesh was loaded initially. That's also how the mesh looks
>>>>>>>>> from most applications' points of view. The use case of multiple
>>>>>>>>> parts, with shared interface entities duplicated, is mostly
>>>>>>>>> handled by having separate entities in the database, with special
>>>>>>>>> relations between them implying that they're the same.
>>>>>>>> I can see ways around the over-partitioning problem, though. Most
>>>>>>>> obviously, simply have multiple threads per processor, so that the
>>>>>>>> number of processes still matches the number of parts. Or an app
>>>>>>>> or implementation (or even the interface) could specify how to
>>>>>>>> merge parts to get the right number at run time, as Tim hints at.
>>>>>>>> Eventually, in the hyperparallel world that's coming, apps and
>>>>>>>> implementations may both have to be written to be multithreaded
>>>>>>>> shared-memory processes within a node (OpenMP?) with communication
>>>>>>>> between nodes (MPI?). This isn't in conflict with the notion of
>>>>>>>> exactly one part (and iMesh instance) per process; it just
>>>>>>>> requires more careful programming of apps/services that use the
>>>>>>>> interface.
>>>>>>>>> One of the complications that arises from having one instance per
>>>>>>>>> process (and one part per instance) is how do you repartition, or
>>>>>>>>> partition in serial. I think that concept is handled by the
>>>>>>>>> notion of initializing a given parallel mesh either a) from a
>>>>>>>>> collection of collections, or a partition of parts, stored with
>>>>>>>>> and loaded with the mesh, or b) communication from one instance
>>>>>>>>> to another, using parallel migration of entities. Of course, a)
>>>>>>>>> is easily handled using sets, if you have them; if you don't,
>>>>>>>>> it's just as easily handled using multiple files. It also
>>>>>>>>> naturally handles establishing a parallel mesh based on one of
>>>>>>>>> several "partitionings" (collection of collections) stored with a
>>>>>>>>> mesh, e.g. using the geometric volumes, material types, or true
>>>>>>>>> partitions (generated by a partitioner).
>>>>>>>> This is a problem we always had, though, didn't we? I mean, with
>>>>>>>> multiple instances per process, repartitioning to use a new
>>>>>>>> instance would require copying the whole mesh, including
>>>>>>>> adjacency, sets, tags, etc. Do-able, but non-trivial, especially
>>>>>>>> (say) tags with entity handle value.
>>>>>>>> I don't have any conceptual issues in principle with the notion of
>>>>>>>> multiple partitionings of the same entities. How an
>>>>>>>> implementation (or app) chooses to store the inactive partition is
>>>>>>>> obviously going to be implementation-dependent (sets vs tags vs
>>>>>>>> classification vs ???). This potentially makes it tricky to
>>>>>>>> define an API for switching between them.
>>>>>>>> Also, what about the different, more subtle case where we -need-
>>>>>>>> two partitions active at once? One use case is a contact problem,
>>>>>>>> where the 3D mesh and 2D surface are partitioned separately (I'm
>>>>>>>> assuming this is done, to get better load balance?). If you're
>>>>>>>> also doing mesh adaptation as you go (likely), now those 2D faces
>>>>>>>> on the interface have owners in the 3D partition (okay, some
>>>>>>>> implementation don't represent them explicitly, but it's safe to
>>>>>>>> say that a face interior to a part is going to be owned by that
>>>>>>>> part...). I see two alternatives.
>>>>>>>> 1. The easiest way to handle this in the current interfaces, as
>>>>>>>> far as parallel stuff goes, is to have two separate meshes (a 3D
>>>>>>>> mesh and a 2D manifold mesh), with tags or iRel (or something
>>>>>>>> similar) keeping the respective entities associated with each
>>>>>>>> other. This implies two iMesh instances per process, one each for
>>>>>>>> the 3D and 2D manifold meshes, which isn't in conflict with other
>>>>>>>> stuff in this thread.
>>>>>>>> 2. You could also have two partitions active within a single
>>>>>>>> instance. I'm not quite sure how this would look, even
>>>>>>>> conceptually. You'd have the full 3D mesh for the (3D) part, plus
>>>>>>>> a bunch of extra faces (and verts, at least) for the bits of the
>>>>>>>> 2D manifold mesh that isn't already resident. The problem with
>>>>>>>> this is that you've got to strictly segregate things so that
>>>>>>>> iteration over (say) faces gets you what you wanted. Yes, I know,
>>>>>>>> sets will do this, but it seems cumbersome...
>>>>>>>> I can't say I'm crazy about either of these alternatives, nor am I
>>>>>>>> invested in either one. Hopefully, someone can come up with
>>>>>>>> something better. For what's it's worth, I think this problem is
>>>>>>>> reasonably (completely?) independent of whether in "normal" single
>>>>>>>> mesh contexts we require exactly one part and iMesh instance per
>>>>>>>> process.
>>>>>>>> Having said that, I'll almost certainly be missing tomorrow's
>>>>>>>> telecon. I will, of course, be happy to kibitz afterwards by
>>>>>>>> email. :-)
>>>>>>>> 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
>>
>>
>>
>
>
>
--
================================================================
"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