[MOAB-dev] Re: parallel read bug, interface awkwardness
Tim Tautges
tautges at mcs.anl.gov
Thu Sep 25 10:11:02 CDT 2008
Hi Jed,
I agree that it's a real bug, and that we shouldn't assume things
about the partition which are unnecessary to assume. I'm in a middle of
a milestone exercise, which ends next Wed, and will get to it right
after. If you can't wait, I think the issue is in
MBParallelComm::resolve_shared_ents and where it calls tag_shared_ents
and create_interface_sets. tag_shared_ents builds or adds to the map
proc_nranges, where they key for the map is the list of procs sharing a
given set of entities, and the value is the range of entities.
create_interface_sets takes these key/value pairs, builds an entity set
for each, and assigns to the lowest-rank proc in the key ownership of
that set.
To fix, you'll need to assign faces to the owning proc as assigned by
the partitioner. One complication is that may produce keys which aren't
already in the map. Another way to do this would be to get all the
interface faces and their assigned processors and build the key/value
pairs for those, before tag_shared_ents is called. The block of code
which sets the NOT_OWNED part of the pstatus tag is at
MBParallelComm.cpp:2616 (in svn version 2078). That will need to be
changed to use the partitioner-determined owner rather than just taking
the min rank.
If you don't have time to fix this on your own, no problem (you've done
quite a bit already, which I appreciate).
- tim
Jed Brown wrote:
> On Mon 2008-09-22 10:25, Jed Brown wrote:
>> I have identified a MOAB parallel read bug. It appears that if all
>> nodes of an edge or face are shared, MOAB sometimes assumes that the
>> edge/face is also shared. This is incorrect since the face might
>> actually be a boundary face. I think that if
>>
>> 0 --- 1 --- 2
>> | A | B |
>> 3 --- 4 --- 5
>> | C | D |
>> 6 --- 7 --- 8
>> | E | F |
>> 9 --- 10 -- 11
>>
>> appears on a boundary where proc 0 owns all faces except face D which is
>> owned by proc 1. Then proc 0 will own all edges except 5-8, but proc 1
>> will think that 5-8 and face D are also owned by proc 0. The attached
>> tarball demonstrates the issue. If you unpack and run `make break' you
>> will see that the shared sets don't agree. Run `make repartition' to
>> produce a new partition (likely different because mbzoltan is
>> nondeterministic). I have run `make repartition break' a few times and
>> there are always sets which don't agree.
>
> To follow up on this, a recent patch has greatly improved the quality of
> mbzoltan partitions. At least for simple cases, these partitions do not
> have the property mentioned before. However, the read bug still exists
> for these `pathological' partitions such as the one attached in my
> previous message. To reproduce, just unpack and run `make break'.
> Hopefully someone more familiar with the parallel read knows how to fix
> this.
>
> A sufficiently complex mesh may not be partitionable in a way which
> avoids this so it's really not okay to assume that the process which
> owns the vertices also owns the entity; it may not be adjacent to any
> owned region. This matters to me because edges and faces are used
> explicitly as part of my function space.
>
> Jed
--
================================================================
"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 moab-dev
mailing list