I see. Then I'm not sure if any optimization I'll get from it would
offset the error risks.
Thanks for the insight.
Best regards
Javier
On 11/12/17 17:56, Wolfgang Bangerth wrote:
On 12/11/2017 06:57 AM, Bruno Turcksin wrote:
My current problem involves the use of a relatively big main
domain that
is distributed accross a number of mpi process. The solution on this
domain is coupled with the solutions on smaller domains. At the
moment the
smaller domains are distributed on the same number of mpi
processes as the
main one. However, I wonder if it would be more efficient to
assing each
of these smaller domains to a specific mpi process instead of
distribute
them, and if so, what would be the best way to do this.
p::d::Triangulation takes a communicator in the constructor. So if
you split your communicator, the smaller domains won't use the same
processors as the largest one. However, I am not sure how the linear
algebra is going to work. The distributed vectors also take
communicators so depending if you work on a sub-problem or on the
whole problem you will need to use different communicators. I have
never done anything like that so I can't say if it is easy or hard to
do.
It's conceptually not difficult to do -- every parallel object we have
takes a communicator argument, and these communicators need not be
equal to MPI_COMM_WORLD: they can contain a subset of processors, and
in that case only a subset of processors will own the object and
participate in communication.
The much more difficult aspect of this is that you now need to make
sure that every processor knows which objects it owns and which
communication it is supposed to participate in. In other words, you
lose the fact that in all programs you've likely seen before, every
processor does the same thing at all times, because every processor
participates in every communication step. By splitting objects to a
subset of processors, you will end up with code that has a lot of
statements such as
if (my processor participates in object A)
{
do something with object A;
builds some linear system;
solve linear system;
}
if (my processor participates in object B)
...
It's not *difficult* to write code like this, it's just error prone
and unwieldy.
Best
W.
--
The deal.II project is located at http://www.dealii.org/
For mailing list/forum options, see
https://groups.google.com/d/forum/dealii?hl=en
---
You received this message because you are subscribed to the Google Groups "deal.II User Group" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.