From 12ea9459543dfe30ebb3b88ec04c9e75e99222f9 Mon Sep 17 00:00:00 2001 From: Martin Kronbichler Date: Fri, 18 Mar 2016 09:05:54 +0100 Subject: [PATCH] Fix two more slow parts of parallel MG. --- doc/news/changes.h | 46 ++++++++++++++++++++++---------------- source/distributed/tria.cc | 6 +++-- 2 files changed, 31 insertions(+), 21 deletions(-) diff --git a/doc/news/changes.h b/doc/news/changes.h index 5412b75f13..e103c7af5a 100644 --- a/doc/news/changes.h +++ b/doc/news/changes.h @@ -100,21 +100,29 @@ inconvenience this causes.
    -
  1. New: Added custom target "relocate" to Mac OS X builds, that runs +
  2. Improved: The distribution of degrees of freedom on multigrid levels, + DoFHandler::distribute_mg_dofs(), contained a few steps that scaled + quadratically in the number of local cells for certain configurations. These + steps have been replaced by linear complexity calls. +
    + (Martin Kronbichler, 2016/03/18) +
  3. + +
  4. New: Added custom target "relocate" to Mac OS X builds, that runs a script to make all paths absolute in the shared libraries included in the deal.II package (only enabled when building a package, and when including external libraries to the package) -
    - (Luca Heltai, 2016/03/14) -
  5. - +
    + (Luca Heltai, 2016/03/14) + +
  6. New: Add NURBSPatchManifold. This class is a child of ChartManifold and - implements a manifold descriptor for the face of a CAD imported usign + implements a manifold descriptor for the face of a CAD imported usign OpenCASCADE. -
    - (Mauro Bardelloni, 2016/03/09) -
  7. - +
    + (Mauro Bardelloni, 2016/03/09) + +
  8. New: When using C++11, there is now a function Threads::new_task() that can take as an argument either a lambda function, or the result of a std::bind expression, or anything else that can be called as in a @@ -124,7 +132,7 @@ inconvenience this causes. (Wolfgang Bangerth, 2016/03/07)
  9. -
  10. New: When using C++11, the function filter_iterators() allows to filter a +
  11. New: When using C++11, the function filter_iterators() allows to filter a range of iterators using predicates (like the ones defined in IteratorFilter).
    (Bruno Turcksin, 2016/03/04) @@ -132,18 +140,18 @@ inconvenience this causes.
  12. Fixed: The OpenCASCADE::push_forward_and_differential_forms() function is now able to change the direction of the normal vector - according to Orientation() method. -
    - (Mauro Bardelloni, 2016/03/02) -
  13. + according to Orientation() method. +
    + (Mauro Bardelloni, 2016/03/02) + -
  14. Fixed: The function IndexSet::make_trilinos_map() now works if some +
  15. Fixed: The function IndexSet::make_trilinos_map() now works if some processors have a contiguous range of indices and others do not.
    (Bruno Turcksin, 2016/02/17)
  16. -
  17. Updated: step-44 has been been expressed in a more dimension independent +
  18. Updated: step-44 has been been expressed in a more dimension independent manner, and can be now run in both 2-d and 3-d.
    (Jean-Paul Pelteret, 2016/02/17) @@ -155,8 +163,8 @@ inconvenience this causes. (Jean-Paul Pelteret, 2016/02/12)
  19. -
  20. Fixed: The GridTools::build_triangulation_from_patches() function now - also copies the locations of vertices from the cells of the source +
  21. Fixed: The GridTools::build_triangulation_from_patches() function now + also copies the locations of vertices from the cells of the source triangulation to the triangulation that is built from the list of patch cells.
    (Spencer Patty, 2016/02/11) diff --git a/source/distributed/tria.cc b/source/distributed/tria.cc index 968f267afb..59f9f93504 100644 --- a/source/distributed/tria.cc +++ b/source/distributed/tria.cc @@ -3590,7 +3590,8 @@ namespace parallel for (unsigned int lvl=this->n_levels(); lvl>0; ) { --lvl; - for (typename Triangulation::cell_iterator cell = this->begin(lvl); cell!=this->end(lvl); ++cell) + typename Triangulation::cell_iterator cell, endc = this->end(lvl); + for (cell = this->begin(lvl); cell!=endc; ++cell) { if ((!cell->has_children() && cell->subdomain_id()==this->locally_owned_subdomain()) || (cell->has_children() && cell->child(0)->level_subdomain_id()==this->locally_owned_subdomain())) @@ -3630,7 +3631,8 @@ namespace parallel for (unsigned int lvl=this->n_levels(); lvl>0;) { --lvl; - for (typename Triangulation::cell_iterator cell = this->begin(lvl); cell!=this->end(lvl); ++cell) + typename Triangulation::cell_iterator cell, endc = this->end(lvl); + for (cell = this->begin(lvl); cell!=endc; ++cell) { if (cell->has_children()) for (unsigned int c=0; c::max_children_per_cell; ++c) -- 2.39.5