[PATCH] Make PatchSizeSyncer::calcGlobalGrid() generic
Jeffrey D. Oldham
oldham at codesourcery.com
Mon Dec 8 16:05:03 UTC 2003
Richard Guenther wrote:
> Hi!
>
> This patch makes use of CollectFromContexts inside
> PatchSizeSyncer::calcGlobalGrid(), instead of handcrafting a Cheetah based
> implementation. This reduces explicit Cheetah dependence to fewer places
> (to aid adding a native MPI implementation).
>
> Tested with a native MPI implementation.
>
> Ok?
Yes. Thanks.
> Richard.
>
>
> 2003Dec08 Richard Guenther <richard.guenther at uni-tuebingen.de>
>
> * src/Tulip/PatchSizeSyncer.cmpl.cpp: use CollectFromContexts for
> gather operation.
>
> ===== PatchSizeSyncer.cmpl.cpp 1.1 vs edited =====
> --- 1.1/r2/src/Tulip/PatchSizeSyncer.cmpl.cpp Mon May 13 17:47:45 2002
> +++ edited/PatchSizeSyncer.cmpl.cpp Fri Dec 5 16:46:01 2003
> @@ -34,19 +34,16 @@
> // Includes:
> //-----------------------------------------------------------------------------
>
> +#include "Tulip/Messaging.h"
> #include "Tulip/PatchSizeSyncer.h"
> #include "Tulip/RemoteProxy.h"
> +#include "Tulip/CollectFromContexts.h"
>
> +#include <utility>
> #include <algorithm>
>
> namespace Pooma {
>
> -int PatchSizeSyncer::tag_s = 0;
> -
> -#if POOMA_CHEETAH
> -Cheetah::MatchingHandler *PatchSizeSyncer::handler_s = 0;
> -#endif
> -
> //-----------------------------------------------------------------------------
> // PatchSize constructor & destructor...
> //-----------------------------------------------------------------------------
> @@ -68,19 +65,6 @@
> }
>
> //-----------------------------------------------------------------------------
> -// PatchSizeSyncer::receiveGrid
> -//
> -// This function is passed on to the matching-handler and is invoked when
> -// a message is received.
> -//-----------------------------------------------------------------------------
> -
> -void PatchSizeSyncer::receiveGrid(std::pair<int,Grid_t> &incoming)
> -{
> - gridList_m.push_back(
> - std::make_pair(incoming.first,new Grid_t(incoming.second)));
> -}
> -
> -//-----------------------------------------------------------------------------
> // PatchSizeSyncer::calcGlobalGrid
> //
> // Does a reduction of the grids, sending all the local grids to
> @@ -108,40 +92,12 @@
> {
> #if POOMA_CHEETAH
>
> - // Each context will send their local Grid to context 0.
> - // We'll offset the base tag by the context number - 1 to
> - // generate the tags for this.
> -
> - int tagbase = tag_s;
> - tag_s += numContexts_m - 1;
> -
> Grid<1> result;
>
> - if (myContext_m != 0)
> - {
> - handler_s->send(0, tagbase + myContext_m - 1,
> - std::make_pair(localKey_m,localGrid_m));
> - }
> - else
> + CollectFromContexts<std::pair<int, Grid_t> > collection
> + (std::make_pair(localKey_m,localGrid_m));
> + if (myContext_m == 0)
> {
> - // Push the context 0 grid onto the list:
> -
> - gridList_m.push_back(std::make_pair(localKey_m,new Grid_t(localGrid_m)));
> -
> - // Request messages from the other contexts, which
> - // will result in receiveGrid being invoked and
> - // the remainder of gridList_m being filled.
> -
> - for (int i = 1; i < numContexts_m; ++i)
> - {
> - handler_s->request(i, tagbase + i - 1,
> - &PatchSizeSyncer::receiveGrid,
> - this);
> - }
> -
> - while (gridList_m.size() < numContexts_m)
> - Pooma::poll();
> -
> // The grid list is full. We sort it and then renormalize the
> // domains to make them globally consistent. The
> // renormalization is done by looking through the list and
> @@ -149,6 +105,10 @@
> // have been added on the previous grids. We simultaneously
> // calculate the total number of points, needed to form the
> // global result.
> +
> + for (int j = 0; j < numContexts_m; ++j)
> + gridList_m.push_back(Elem_t(collection[j].first,
> + new Grid_t(collection[j].second)));
>
> std::sort(gridList_m.begin(),gridList_m.end(),ElemCompare());
>
--
Jeffrey D. Oldham
oldham at codesourcery.com
More information about the pooma-dev
mailing list