freepooma-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] Fix and test (unused) CollectFromContexts


From: Jeffrey D. Oldham
Subject: Re: [PATCH] Fix and test (unused) CollectFromContexts
Date: Mon, 08 Dec 2003 08:04:40 -0800
User-agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.4) Gecko/20030624

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 <address@hidden>

        * 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 address@hidden,
+// 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
address@hidden

reply via email to

[Prev in Thread] Current Thread [Next in Thread]