[PATCH] Fix and test (unused) CollectFromContexts

Jeffrey D. Oldham oldham at codesourcery.com
Mon Dec 8 16:04:40 UTC 2003


Richard Guenther wrote:
> Hi!
> 
> This patch fixes bugs in CollectFromContexts and adds a testcase for it.
> It's currently unused, but see the next patch.
> 
> Ok?

Yes.

> Richard.
> 
> 
> 2003Dec08  Richard Guenther <richard.guenther at uni-tuebingen.de>
> 
> 	* src/Tulip/CollectFromContexts.h: pack/unpack CollectionValue
> 	correctly, cleanup object, if valid.
> 	* src/Tulip/tests/CollectFromContextsTest.cpp: new.
> 	* src/Tulip/tests/makefile: add CollectFromContextsTest.
> 
> ===== CollectFromContexts.h 1.3 vs edited =====
> --- 1.3/r2/src/Tulip/CollectFromContexts.h	Wed Dec  3 12:30:45 2003
> +++ edited/CollectFromContexts.h	Mon Dec  8 13:21:43 2003
> @@ -34,7 +34,7 @@
>  /** @file
>   * @ingroup Tulip
>   * @brief
> - * Undocumented.
> + * CollectFromContext encapsulates functionality like MPI_Gather.
>   */
> 
>  #ifndef POOMA_MESSAGING_COLLECTFROMCONTEXTS_H
> @@ -136,7 +136,7 @@
>    static inline int pack(const CollectionValue<T> &v, char *buffer)
>    {
>      int nBytes = Serialize<CHEETAH, bool>::pack(v.valid(), buffer);
> -    nBytes += Serialize<CHEETAH, int>::pack(v.context(), buffer);
> +    nBytes += Serialize<CHEETAH, int>::pack(v.context(), buffer + nBytes);
> 
>      if (v.valid())
>        {
> @@ -154,7 +154,7 @@
> 
>      int nBytes = Serialize<CHEETAH, bool>::unpack(pvalid, buffer);
> 
> -    nBytes += Serialize<CHEETAH, int>::unpack(pcon, buffer);
> +    nBytes += Serialize<CHEETAH, int>::unpack(pcon, buffer + nBytes);
> 
>      if (*pvalid)
>        {
> @@ -163,6 +163,9 @@
> 
>      vp = new CollectionValue<T>(*pvalid, *pval, *pcon);
> 
> +    if (*pvalid)
> +      Serialize<CHEETAH, T>::cleanup(pval);
> +
>      return nBytes;
>    }
> 
> --- /dev/null	Fri Mar 14 14:07:09 2003
> +++ tests/CollectFromContextsTest.cpp	Mon Dec  8 12:50:01 2003
> @@ -0,0 +1,82 @@
> +// -*- C++ -*-
> +// ACL:license
> +// ----------------------------------------------------------------------
> +// This software and ancillary information (herein called "SOFTWARE")
> +// called POOMA (Parallel Object-Oriented Methods and Applications) is
> +// made available under the terms described here.  The SOFTWARE has been
> +// approved for release with associated LA-CC Number LA-CC-98-65.
> +//
> +// Unless otherwise indicated, this SOFTWARE has been authored by an
> +// employee or employees of the University of California, operator of the
> +// Los Alamos National Laboratory under Contract No. W-7405-ENG-36 with
> +// the U.S. Department of Energy.  The U.S. Government has rights to use,
> +// reproduce, and distribute this SOFTWARE. The public may copy, distribute,
> +// prepare derivative works and publicly display this SOFTWARE without
> +// charge, provided that this Notice and any statement of authorship are
> +// reproduced on all copies.  Neither the Government nor the University
> +// makes any warranty, express or implied, or assumes any liability or
> +// responsibility for the use of this SOFTWARE.
> +//
> +// If SOFTWARE is modified to produce derivative works, such modified
> +// SOFTWARE should be clearly marked, so as not to confuse it with the
> +// version available from LANL.
> +//
> +// For more information about POOMA, send e-mail to pooma at acl.lanl.gov,
> +// or visit the POOMA web page at http://www.acl.lanl.gov/pooma/.
> +// ----------------------------------------------------------------------
> +// ACL:license
> +
> +//-----------------------------------------------------------------------------
> +// Test of PatchSizeSyncer
> +//-----------------------------------------------------------------------------
> +
> +// Include files
> +
> +#include "Tulip/Messaging.h"
> +#include "Tulip/CollectFromContexts.h"
> +#include "Pooma/Pooma.h"
> +#include "Utilities/Tester.h"
> +
> +
> +int main(int argc, char *argv[])
> +{
> +  Pooma::initialize(argc, argv);
> +  Pooma::Tester tester(argc, argv);
> +
> +  const int numContexts = Pooma::contexts();
> +  const int myContext   = Pooma::context();
> +
> +  tester.out() << "Running with " << numContexts << " contexts." << std::endl;
> +
> +  CollectFromContexts<int> ranks(2*(Pooma::context()+1));
> +  if (Pooma::context() == 0) {
> +    bool check = true;
> +    for (int i=0; i<Pooma::contexts(); ++i)
> +      if (ranks[i] != 2*(i+1)) {
> +	tester.out() << "[" << i << "] should be "
> +		     << 2*(i+1) << ", but is " << ranks[i] << "\n";
> +        check = false;
> +      }
> +    tester.check("Collecting ranks", check);
> +  }
> +
> +  CollectFromContexts<int> ranks2(Pooma::context()+1, 0,
> +			          Pooma::context() > 0
> +				  && Pooma::context() < Pooma::contexts()-1);
> +  if (Pooma::context() == 0) {
> +    bool check = true;
> +    for (int i=1; i<Pooma::contexts()-1; ++i)
> +      if (ranks2[i] != i+1) {
> +	tester.out() << "[" << i << "] should be "
> +		     << (i+1) << ", but is " << ranks[i] << "\n";
> +        check = false;
> +      }
> +    tester.check("Collecting ranks, but not first and last", check);
> +  }
> +
> +  int ret = tester.results("CollectFromContextsTest");
> +  Pooma::finalize();
> +
> +  return ret;
> +}
> +
> ===== tests/makefile 1.3 vs edited =====
> --- 1.3/r2/src/Tulip/tests/makefile	Wed Jan  8 10:27:36 2003
> +++ edited/tests/makefile	Fri Dec  5 16:03:32 2003
> @@ -36,7 +36,7 @@
> 
>  TESTS = ReduceOverContextsTest GridMessageTest \
>  	GridBroadcastTest PatchSizeSyncerTest \
> -	VectorBroadcastTest
> +	VectorBroadcastTest CollectFromContextsTest
> 
>  default:: build
> 


-- 
Jeffrey D. Oldham
oldham at codesourcery.com




More information about the pooma-dev mailing list