On Thu, 1 Nov 2012, David Knezevic wrote:

> I just checked in a change, I believe this is fixed now ---  at least 
> reduced_basis_ex6 works with --enable-parmesh for me now in r6280.
>
> But I'd appreciate if you could have a look at the diff.

That was fast work!

I'm not sure it's correct, though.  What happens when a function
evaluation point falls on a ghost element?  Both the owning processor
and its neighbor will be able to evaluate it, they'll both think that
they're the root_id, the sum(root_id) will give you something
completely different, and then the broadcast will send out an
uninitialized Number.  So instead of a segfault or an assertion
failure you get an incorrect output, arguably a *much worse* problem!

> In RBEIMConstruction::evaluate_mesh_function I use the mesh function
> on a ghosted vector now, and broadcast the result. Incidentally, is
> there a better way to get the root_id for the broadcast? (I used
> Parallel::sum with libMesh::processor_id())

Well, using max() instead of sum() ought to correct the failure case I
described above.  It won't be more efficient, though.

I don't think there's a more efficient way to get the root_id
for a single broadcast, but if you're worried about the efficiency
then the thing to do is batch your broadcasts.  When you're sending
small enough messages that MPI is latency limited (and one Number per
message is definitely in this regime) you can pack a lot more data
into the send "for free".  So you could have your
evaluate_mesh_function test for ghost elements and return zero there,
stuff all the local evaluate_mesh_function results into a single
vector, and Parallel::sum the vector.  Or you could loop over sending
processors, and have each one broadcast a sparse-format version of its
non-zero chunk of the vector in turn.  I'm not sure which of those two
options would be faster; it probably depends on how many processors
you're on and how big your vector is.
---
Roy

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Libmesh-devel mailing list
Libmesh-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/libmesh-devel

Reply via email to