From: Martin Kronbichler Date: Wed, 25 May 2022 10:16:15 +0000 (+0200) Subject: Remove unnecessary MPI barriers X-Git-Tag: v9.4.0-rc1~149^2 X-Git-Url: https://gitweb.dealii.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=23074daeb9cc467835a0910184999217d46fb42a;p=dealii.git Remove unnecessary MPI barriers --- diff --git a/source/dofs/dof_handler_policy.cc b/source/dofs/dof_handler_policy.cc index 60bf7b8cb2..96fc91bf24 100644 --- a/source/dofs/dof_handler_policy.cc +++ b/source/dofs/dof_handler_policy.cc @@ -3789,35 +3789,6 @@ namespace internal GridTools::exchange_cell_data_to_ghosts< std::vector, DoFHandler>(dof_handler, pack, unpack, filter); - - // have a barrier so that sends between two calls to this - // function are not mixed up. - // - // this is necessary because above we just see if there are - // messages and then receive them, without discriminating - // where they come from and whether they were sent in phase - // 1 or 2 (the function is called twice in a row). the need - // for a global communication step like this barrier could - // be avoided by receiving messages specifically from those - // processors from which we expect messages, and by using - // different tags for phase 1 and 2, but the cost of a - // barrier is negligible compared to everything else we do - // here - if (const auto *triangulation = - dynamic_cast *>( - &dof_handler.get_triangulation())) - { - const int ierr = MPI_Barrier(triangulation->get_communicator()); - AssertThrowMPI(ierr); - } - else - { - Assert(false, - ExcMessage( - "The function communicate_dof_indices_on_marked_cells() " - "only works with parallel distributed triangulations.")); - } # endif } @@ -4213,22 +4184,6 @@ namespace internal // will request them again in the step below. communicate_mg_ghost_cells(*triangulation, *dof_handler); - // have a barrier so that sends from above and below this - // place are not mixed up. - // - // this is necessary because above we just see if there are - // messages and then receive them, without discriminating - // where they come from and whether they were sent in phase - // 1 or 2 in communicate_mg_ghost_cells() on another - // processor. the need for a global communication step like - // this barrier could be avoided by receiving messages - // specifically from those processors from which we expect - // messages, and by using different tags for phase 1 and 2, - // but the cost of a barrier is negligible compared to - // everything else we do here - const int ierr = MPI_Barrier(triangulation->get_communicator()); - AssertThrowMPI(ierr); - // Phase 2, only request the cells that were not completed // in Phase 1. communicate_mg_ghost_cells(*triangulation, *dof_handler);