diff options
author | Erik Schnetter <schnetter@cct.lsu.edu> | 2011-11-22 13:47:41 -0500 |
---|---|---|
committer | Barry Wardell <barry.wardell@gmail.com> | 2011-12-14 19:55:01 +0000 |
commit | bacf462840317b7a7d74809a639d474fba26e583 (patch) | |
tree | 21232c7635d282034a2085c3d68fa51c6d149cbf /Carpet/Carpet/src/LoadBalanceReal | |
parent | aa7b8be416c812bf5575ee4c86c6f7b98fda0df2 (diff) |
Carpet: Recursive load balancing: Renumber components
Add more self-checks.
Number components sequentially and per-patch.
Diffstat (limited to 'Carpet/Carpet/src/LoadBalanceReal')
-rw-r--r-- | Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc b/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc index ab6bfe3cd..49e619a1f 100644 --- a/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc +++ b/Carpet/Carpet/src/LoadBalanceReal/splitregions_recursively.cc @@ -164,12 +164,16 @@ namespace Carpet { if (recompose_verbose) cout << "SRMR enter" << endl; int const nmaps = superregss.size(); + assert (int(regss.size()) == nmaps); int map_offset = 1000000000; + int max_map = 0; for (int m=0; m<nmaps; ++m) { for (int r=0; r<int(superregss.AT(m).size()); ++r) { map_offset = min (map_offset, superregss.AT(m).AT(r).map); + max_map = max (max_map, superregss.AT(m).AT(r).map); } } + assert (max_map - map_offset == nmaps - 1); int nsuperregs = 0; for (int m=0; m<nmaps; ++m) { @@ -272,6 +276,17 @@ namespace Carpet { assert (m>=0 and m<nmaps); superregss.AT(m).push_back (superregs.AT(r)); } + // Renumber components + for (int m=0; m<nmaps; ++m) { + int c=0; + for (size_t r=0; r<superregss.AT(m).size(); ++r) { + ipfulltree* const procs = superregss.AT(m).AT(r).processors; + assert (procs); + for (ipfulltree::iterator it (*procs); not it.done(); ++it) { + (*it).payload().component = c++; + } + } + } for (int r=0; r<nregs; ++r) { int const s = regs.AT(r).map; assert (s>=0 and s<nsuperregs); |