[dcmf] [PATCH] Issue 3867: Free storage before composites are regenerated.

Joe Ratterman jratt at us.ibm.com
Mon Feb 4 14:00:29 CST 2008


From: Bob Cernohous <bobc at us.ibm.com>

---
 sys/collectives/adaptor/dcmf/Geometry.h            |   17 +++---
 sys/collectives/adaptor/dcmf/api/dcmf.cc           |   28 ++++++++--
 .../adaptor/dcmf/protocols/allreduce/Composite.h   |    9 ++--
 .../dcmf/protocols/allreduce/binomial/Composite.h  |    6 ++
 .../dcmf/protocols/allreduce/rectangle/Composite.h |    6 ++
 .../protocols/allreduce/rectanglering/Composite.h  |    9 +++-
 .../dcmf/protocols/allreduce/tree/Composite.h      |   22 +++++---
 .../dcmf/protocols/allreduce/tree/Factory.h        |    4 +-
 .../dcmf/protocols/reduce/rectangle/Composite.h    |    6 ++
 .../protocols/reduce/rectanglering/Composite.h     |    6 ++
 sys/collectives/kernel/executor/Allreduce.h        |   25 ++++++---
 sys/collectives/kernel/executor/AllreduceBase.h    |   56 ++++++++++++++------
 sys/collectives/kernel/executor/AllreduceState.h   |   14 +++++-
 sys/collectives/kernel/interfaces/Composite.h      |   44 ++++++++++++----
 sys/collectives/kernel/interfaces/Executor.h       |   45 ++++++++++------
 sys/collectives/tests/dcmf/tree/tree_allreduce.cc  |   16 +++---
 sys/collectives/tests/dcmf/tree/tree_reduce.cc     |   16 +++---
 17 files changed, 234 insertions(+), 95 deletions(-)
 mode change 100644 => 100755 sys/collectives/adaptor/dcmf/Geometry.h
 mode change 100644 => 100755 sys/collectives/adaptor/dcmf/api/dcmf.cc
 mode change 100644 => 100755 sys/collectives/kernel/executor/Allreduce.h
 mode change 100644 => 100755 sys/collectives/kernel/interfaces/Executor.h
 mode change 100644 => 100755 sys/collectives/tests/dcmf/tree/tree_allreduce.cc
 mode change 100644 => 100755 sys/collectives/tests/dcmf/tree/tree_reduce.cc

diff --git a/sys/collectives/adaptor/dcmf/Geometry.h b/sys/collectives/adaptor/dcmf/Geometry.h
old mode 100644
new mode 100755
index c43a880..1381dd0
--- a/sys/collectives/adaptor/dcmf/Geometry.h
+++ b/sys/collectives/adaptor/dcmf/Geometry.h
@@ -164,19 +164,18 @@ namespace CCMI
 
          inline void freeAllocations ()
          {
+//            fprintf(stderr,"Geometry::freeAllocations(), _allreduce %#X, _allreduce_storage %#X\n",
+//                    (int)_allreduce, (int)_allreduce_storage);
            if (_allreduce)
            {
-             unsigned nexec = _allreduce->getNumExecutors();       
-             for (unsigned count = 0; count < nexec; count ++)
-             {
-               //Call the destructor on the executor constructor
-               delete _allreduce->getExecutor(count);
-             }
-
-             CCMI_Free (_allreduce_storage);
-             _allreduce_storage = NULL;
+              _allreduce->~Composite();
              _allreduce = NULL;
            }
+           if(_allreduce_storage)
+           {
+               CCMI_Free (_allreduce_storage);
+               _allreduce_storage = NULL;
+           }
          }
 
          inline Kernel::Executor::Executor * getCollectiveExecutor (unsigned color=0)
diff --git a/sys/collectives/adaptor/dcmf/api/dcmf.cc b/sys/collectives/adaptor/dcmf/api/dcmf.cc
old mode 100644
new mode 100755
index 04443c4..56485c2
--- a/sys/collectives/adaptor/dcmf/api/dcmf.cc
+++ b/sys/collectives/adaptor/dcmf/api/dcmf.cc
@@ -423,10 +423,16 @@ int DCMF_Allreduce (DCMF_CollectiveProtocol_t  * registration,
                                           count,
                                           DCMF_Dt_to_CCMI_Dt[dtype],
                                           DCMF_Op_to_CCMI_Op[op]);
-    if (status == DCMF_SUCCESS)
-      return DCMF_SUCCESS;
+//    if (status != DCMF_SUCCESS) fprintf(stderr, "DCMF_Allreduce::ALERT: restart failed on executor %#X with status %#X\n", (int) allreduce, status);
+      return status;
+  }
+  if ( allreduce != NULL ) // Different factory?  Cleanup old executor.
+  {
+    geometry->setAllreduceComposite(NULL);
+    allreduce->~BaseComposite();
   }
 
+//  fprintf(stderr, "DCMF_Allreduce::ALERT: generate executor %#X with factory %#X\n",(int) allreduce,(int)factory);
   void *ptr =factory->generate((CCMI_CollectiveRequest_t*)request, 
                                *(CCMI_Callback_t *) &cb_done,
                                (CCMI_Consistency) consistency,
@@ -437,7 +443,10 @@ int DCMF_Allreduce (DCMF_CollectiveProtocol_t  * registration,
                                DCMF_Dt_to_CCMI_Dt[dtype],
                                DCMF_Op_to_CCMI_Op[op]);
   if(ptr == NULL)
+  {
+//    fprintf(stderr, "DCMF_Allreduce::ALERT: generate failed\n");
     return DCMF_UNIMPL;
+  }
   
   return DCMF_SUCCESS;
 }
@@ -598,10 +607,16 @@ int DCMF_Reduce (DCMF_CollectiveProtocol_t  * registration,
                                           DCMF_Dt_to_CCMI_Dt[dtype],
                                           DCMF_Op_to_CCMI_Op[op],
                                           root);
-    if (status == DCMF_SUCCESS)
-      return DCMF_SUCCESS;
+//    if (status != DCMF_SUCCESS) fprintf(stderr, "DCMF_Reduce::ALERT: restart failed on executor %#X with status %#X\n", (int) allreduce, status);
+      return status;
+  }
+  if ( allreduce != NULL ) // Different factory?  Cleanup old executor.
+  {
+    geometry->setAllreduceComposite(NULL);
+    allreduce->~BaseComposite();
   }
 
+//  fprintf(stderr, "DCMF_Reduce::ALERT: generate executor %#X with factory %#X\n",(int) allreduce,(int)factory);
   void *ptr =factory->generate((CCMI_CollectiveRequest_t*)request, 
                                *(CCMI_Callback_t *) &cb_done,
                                (CCMI_Consistency) consistency,
@@ -612,8 +627,11 @@ int DCMF_Reduce (DCMF_CollectiveProtocol_t  * registration,
                                DCMF_Dt_to_CCMI_Dt[dtype],
                                DCMF_Op_to_CCMI_Op[op],
                                root);
-  if(ptr==NULL)
+  if(ptr == NULL)
+  {
+//    fprintf(stderr, "DCMF_Reduce::ALERT: generate failed\n");
     return DCMF_UNIMPL;
+  }
   
   return DCMF_SUCCESS;
 }
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/Composite.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/Composite.h
index ae98703..0f553db 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/Composite.h
@@ -99,16 +99,17 @@ namespace CCMI
             initializeBarrier ((Kernel::Executor::Barrier *) barrier);
         }
 
+        /// Default Destructor
         virtual ~Composite()
         {
           TRACE_ALERT((stderr,"<%#.8X>Allreduce::Composite::dtor() ALERT:\n",(int)this));
           TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::Composite::dtor()\n",(int)this));
         }
 
-        void operator delete (void *p)
-        {
-          CCMI_assert (0);
-        }
+         void operator delete (void *p)
+         {
+           CCMI_assert (0);
+         }
 
         void initializeBarrier (Kernel::Executor::Barrier *barrier)
         {
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/binomial/Composite.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/binomial/Composite.h
index 92084a2..a30a19e 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/binomial/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/binomial/Composite.h
@@ -38,6 +38,12 @@ namespace CCMI
           Kernel::Schedule::BinomialTreeSchedule  _schedule;
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Allreduce::Binomial::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::Binomial::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/rectangle/Composite.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/rectangle/Composite.h
index b0f86bd..ef7a010 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/rectangle/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/rectangle/Composite.h
@@ -40,6 +40,12 @@ namespace CCMI
           Kernel::Schedule::OneColorRectAllredSched  _schedule;
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Allreduce::Rectangle::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::Rectangle::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/rectanglering/Composite.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/rectanglering/Composite.h
index ca3621c..87b6e2e 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/rectanglering/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/rectanglering/Composite.h
@@ -21,7 +21,8 @@
 
 namespace CCMI
 {
-  namespace Adaptor  {
+  namespace Adaptor
+  {
     namespace Allreduce
     {
       namespace RectangleRing
@@ -39,6 +40,12 @@ namespace CCMI
           Kernel::Schedule::OneColorRectAllredSched  _schedule;
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Allreduce::RectangleRing::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::RectangleRing::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Composite.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Composite.h
index 40a1643..39d5d05 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Composite.h
@@ -44,6 +44,12 @@ namespace CCMI
           unsigned                        _tSize; // for convenience
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::Tree::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
@@ -91,7 +97,7 @@ namespace CCMI
                         // Disable pipelining for dual/vn 2 pass operations (double/sum) (and for SMP always)
                         (((dtype == CCMI_DOUBLE) && (op == CCMI_SUM) && (_tSize > 1) || (_tSize == 1))? 
                          (unsigned) -1 // max pipelineWidth/disabled
-                                   : 0 // none specified/calculate the default
+                         : 0 // none specified/calculate the default
                         ),
                         cb_barrierTreeDone, this);
             _executor.setMulticastInterface (mf);
@@ -115,26 +121,28 @@ namespace CCMI
             /// \todo what about freeing allocations?
             /// \todo what about operator/datatype changes? Will it recover?
             TRACE_ADAPTOR((stderr,"<%#.8X>Allreduce::Tree::Composite::restart()\n",(int)this));
-            if (checkOp(dtype,op) == -1)
+            CCMI_assert_debug (getNumExecutors() == 1);
+            Kernel::Executor::AllreduceBase * allreduce = (Kernel::Executor::AllreduceBase *) getExecutor(0);   
+            if (allreduce && ((op != allreduce->getOp()) || (dtype != allreduce->getDt())) && 
+                (checkOp(dtype,op) == -1))
             {
-              TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Composite::restart() ALERT: unsupported op\n",(int)this));
+              TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Composite::restart() ALERT: unsupported op %#X, type %#X!\n",
+                           (int)this, op, dtype));
               TRACE_ADAPTOR((stderr, "<%#.8X>Allreduce::Tree::Composite::restart():unsupported op %#X, type %#X!\n",
                              (int)this, op, dtype));
               return DCMF_UNIMPL;
             }
+
             _myClientFunction = cb_done.function;
             _myClientData     = cb_done.clientdata;
 
-            CCMI_assert_debug (getNumExecutors() == 1);
-            Kernel::Executor::AllreduceBase * allreduce =
-            (Kernel::Executor::AllreduceBase *) getExecutor(0);   
             initialize (allreduce, request, srcbuf, dstbuf, 
                         count, dtype, op, root, 
                         /// \todo re-evaluate pipelining
                         // Disable pipelining for dual/vn 2 pass operations (double/sum) (and for SMP always)
                         (((dtype == CCMI_DOUBLE) && (op == CCMI_SUM) && (_tSize > 1) || (_tSize == 1))?
                          (unsigned) -1 // max pipelineWidth/disabled
-                                   : 0 // none specified/calculate the default
+                         : 0 // none specified/calculate the default
                         ),
                         cb_barrierTreeDone, this);    
             _executor.setConsistency(consistency);
diff --git a/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Factory.h b/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Factory.h
index 58ebe0c..1258c53 100755
--- a/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Factory.h
+++ b/sys/collectives/adaptor/dcmf/protocols/allreduce/tree/Factory.h
@@ -80,12 +80,14 @@ namespace CCMI
           {
             if (checkOp(dtype,op) == -1)
             {
-            TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Factory::generate() ALERT:\n",(int)this));
+              TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Factory::generate() ALERT: unsupported op %#X, type %#X!\n",
+                           (int)this, op, dtype));
               TRACE_ADAPTOR((stderr, "<%#.8X>Allreduce::Tree::Factory::generate():unsupported op %#X, type %#X!\n",
                              (int)this, op, dtype));
               return NULL;
             }
 
+            TRACE_ALERT((stderr,"<%#.8X>Allreduce::Tree::Factory::generate() ALERT:\n",(int)this));
             TRACE_ADAPTOR ((stderr, "<%#.8X>Allreduce::Tree::Factory::generate() %#X, geometry %#X comm %#X\n",(int)this, 
                             sizeof(*this),(int) geometry, (int) geometry->comm()));
 
diff --git a/sys/collectives/adaptor/dcmf/protocols/reduce/rectangle/Composite.h b/sys/collectives/adaptor/dcmf/protocols/reduce/rectangle/Composite.h
index fb8759a..2832837 100755
--- a/sys/collectives/adaptor/dcmf/protocols/reduce/rectangle/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/reduce/rectangle/Composite.h
@@ -40,6 +40,12 @@ namespace CCMI
           Kernel::Schedule::OneColorRectRedSched  _schedule;
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Reduce::Rectangle::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Reduce::Rectangle::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
diff --git a/sys/collectives/adaptor/dcmf/protocols/reduce/rectanglering/Composite.h b/sys/collectives/adaptor/dcmf/protocols/reduce/rectanglering/Composite.h
index 1e8aa70..1cd5f3c 100755
--- a/sys/collectives/adaptor/dcmf/protocols/reduce/rectanglering/Composite.h
+++ b/sys/collectives/adaptor/dcmf/protocols/reduce/rectanglering/Composite.h
@@ -40,6 +40,12 @@ namespace CCMI
           Kernel::Schedule::OneColorRectRedSched  _schedule;
 
         public:
+          /// Default Destructor
+          virtual ~Composite()
+          {
+            TRACE_ALERT((stderr,"<%#.8X>Reduce::RectangleRing::Composite::dtor() ALERT:\n",(int)this));
+            TRACE_ADAPTOR((stderr,"<%#.8X>Reduce::RectangleRing::Composite::dtor()\n",(int)this));
+          }
           ///
           /// \brief Constructor
           ///
diff --git a/sys/collectives/kernel/executor/Allreduce.h b/sys/collectives/kernel/executor/Allreduce.h
old mode 100644
new mode 100755
index eb59024..d22066d
--- a/sys/collectives/kernel/executor/Allreduce.h
+++ b/sys/collectives/kernel/executor/Allreduce.h
@@ -106,12 +106,6 @@ namespace CCMI
         /// \brief Post receives for all expected src pe's
         inline void postReceives();
 
-        /// \brief Free all allocations
-        inline void freeAllocations()
-        {
-          return _state->freeAllocations();
-        }
-
         /// \brief Static function to be passed into the done of multisend send
         static void staticNotifySendDone (void *cd)
         {
@@ -132,6 +126,21 @@ namespace CCMI
           TRACE_FLOW((stderr,"<%#.8X>Executor::Allreduce::staticNotifyReceiveDone() exit\n",(int)cdata->allreduce));
         }
 
+        /// \brief Default Destructor
+        virtual ~Allreduce () 
+        {
+          TRACE_ALERT((stderr,"<%#.8X>Executor::Allreduce::dtor() ALERT:\n",(int)this));
+          #ifdef CCMI_DEBUG
+          _nextRecvData=0;
+          _sndInfoRequired=1;
+          _numActiveSends=0;
+          _curRcvPhase=CCMI_KERNEL_EXECUTOR_ALLREDUCE_INITIAL_PHASE;
+          _curRcvChunk=0;
+          _curSrcPeIndex=0;
+          _startRcvPhase=0;
+          _delayAdvance=0;
+          #endif
+        }
         /// \brief Default Constructor
         inline Allreduce () :
         AllreduceBase(), 
@@ -509,7 +518,7 @@ inline void CCMI::Kernel::Executor::Allreduce::start()
       if (_state->getPhaseNumDstPes(nextSrcPhase+1) != 0)
       {
         TRACE_INIT((stderr, "<%#.8X>Executor::Allreduce::start() compressing phase %#X, phase %#X\n",
-                     (int)this,_state->getStartPhase(),nextSrcPhase+1));
+                    (int)this,_state->getStartPhase(),nextSrcPhase+1));
         // Move this DstPes back to nextActivePhase by manipulating numDstPes.
         /// \todo move to state?
         _state->compressPhaseNumDstPes(_state->getStartPhase(),nextSrcPhase+1);
@@ -745,7 +754,7 @@ void CCMI::Kernel::Executor::Allreduce::advance()
             // Move this DstPes back to nextActivePhase by manipulating numDstPes.
             /// \todo move to state?
             TRACE_INIT((stderr, "<%#.8X>Executor::Allreduce::advance() compressing phase %#X, phase %#X\n",
-                         (int)this,nextActivePhase, nextSrcPhase+1));
+                        (int)this,nextActivePhase, nextSrcPhase+1));
             _state->compressPhaseNumDstPes(nextActivePhase, nextSrcPhase+1);
           }
           ++nextSrcPhase;
diff --git a/sys/collectives/kernel/executor/AllreduceBase.h b/sys/collectives/kernel/executor/AllreduceBase.h
index acc87cf..9fa7bb3 100755
--- a/sys/collectives/kernel/executor/AllreduceBase.h
+++ b/sys/collectives/kernel/executor/AllreduceBase.h
@@ -119,7 +119,7 @@ inline void CCMI_KERNEL_EXECUTOR_ALLREDUCE_trace_data(const char* string, const
 
 // TRACE_ALERT helps (minimally) trace object ctor/resets that help determine whether
 // they're being reused appropriately.
-//#define TRACE_ALERT(x) fprintf x
+//  #define TRACE_ALERT(x) fprintf x
   #ifndef TRACE_ALERT
     #define TRACE_ALERT(x)
   #endif
@@ -217,6 +217,30 @@ namespace CCMI
         unsigned        _log_sendmessage;
       public: 
 
+        /// Default Destructor
+        virtual ~AllreduceBase ()
+        {
+          TRACE_ALERT((stderr,"<%#.8X>Executor::AllreduceBase::dtor() ALERT:\n",(int)this));
+          #ifdef CCMI_DEBUG
+          _curPhase=(unsigned) -1;
+          _startPhase=(unsigned) -1;
+          _endPhase=(unsigned) -1;
+          _nAsyncRcvd=0;
+          _initialized=false;
+          _postReceives=false;
+          _enablePipelining=false;
+          _sState=NULL;
+          _srcbuf=NULL;
+          _dstbuf=NULL;
+          _op=CCMI_UNDEFINED_OP;
+          _dt=CCMI_UNDEFINED_DT;
+          _count=(unsigned) -1;
+          _reduceFunc=NULL;
+          _msendInterface=NULL;
+          _connmgr=NULL;
+          #endif
+        }
+
         /// Default Constructor
         AllreduceBase () : 
         Executor (),
@@ -338,17 +362,16 @@ namespace CCMI
         /// \param[out]  pipeWidth  pipeline width
         /// \param[out]  cb_done    receive callback function
         /// 
-        virtual
-        CCMI_Request_t *   notifyRecvHead(const DCQuad    * info,
-                                          unsigned          count,
-                                          unsigned          peer,
-                                          unsigned          sndlen,
-                                          unsigned          conn_id,
-                                          void            * arg,
-                                          unsigned        * rcvlen,
-                                          char           ** rcvbuf,
-                                          unsigned        * pipewidth,
-                                          CCMI_Callback_t * cb_done);       
+        virtual CCMI_Request_t *   notifyRecvHead(const DCQuad    * info,
+                                                  unsigned          count,
+                                                  unsigned          peer,
+                                                  unsigned          sndlen,
+                                                  unsigned          conn_id,
+                                                  void            * arg,
+                                                  unsigned        * rcvlen,
+                                                  char           ** rcvbuf,
+                                                  unsigned        * pipewidth,
+                                                  CCMI_Callback_t * cb_done);       
 
         ///
         /// \brief Set the buffer info for the allreduce collective
@@ -382,7 +405,7 @@ namespace CCMI
                                    CCMI_Dt          dt = CCMI_UNDEFINED_DT)
         {
           TRACE_INIT((stderr,"<%#.8X>Executor::AllreduceBase::setReduceInfo() "
-                             "count %#X, pipelineWidth %#X, sizeOfType %#X, func %#X, op %#X, dt %#X\n",
+                      "count %#X, pipelineWidth %#X, sizeOfType %#X, func %#X, op %#X, dt %#X\n",
                       (int)this,count,pipelineWidth,sizeOfType,(int)func,op,dt));
           CCMI_assert (pipelineWidth % sizeOfType == 0);
 
@@ -450,15 +473,15 @@ namespace CCMI
           _nAsyncRcvd = 0;
         }
 
-        void operator delete(void * p) 
+        void operator delete(void * p)
         {
-          ((AllreduceBase *) p)->_astate.freeAllocations ();
+          CCMI_abort();
         }
 
         ///
         /// \bf Query functions 
         ///
-        inline AllreduceState * getAllreduceState () 
+        inline AllreduceState * getAllreduceState ()
         {
           return &_astate; 
         }
@@ -799,3 +822,4 @@ CCMI::Kernel::Executor::AllreduceBase::notifyRecvHead
 
 
 #endif /* __simple_allreduce_executor_h__ */
+
diff --git a/sys/collectives/kernel/executor/AllreduceState.h b/sys/collectives/kernel/executor/AllreduceState.h
index 2245d63..f182d21 100755
--- a/sys/collectives/kernel/executor/AllreduceState.h
+++ b/sys/collectives/kernel/executor/AllreduceState.h
@@ -532,6 +532,18 @@ namespace CCMI
           TRACE_ALERT((stderr,"<%#.8X>Executor::AllreduceState::ctor ALERT: Constructor\n",(int)this));
           TRACE_STATE((stderr,"<%#.8X>Executor::AllreduceState::ctor(void) exit\n",(int)this));
         }
+        /// Default Destructor
+        virtual ~AllreduceState ()
+        {
+          TRACE_ALERT((stderr,"<%#.8X>Executor::AllreduceState::dtor ALERT: Destructor\n",(int)this));
+          freeAllocations();
+        }
+
+        /// NOTE: This is required to make "C" programs link successfully with virtual destructors
+        inline void operator delete(void * p)
+        {
+          CCMI_abort();
+        }
 
         inline void setExecutor (Executor *exe)
         {
@@ -580,7 +592,7 @@ namespace CCMI
           else
           {
             unsigned lastChunk = bytes / _pipelineWidth + (bytes % _pipelineWidth != 0) - 1;
-            if(lastChunk > _lastChunk)
+            if (lastChunk > _lastChunk)
             {
               TRACE_ALERT((stderr,"<%#.8X>Executor::AllreduceState::setDataFunc ALERT: Pipelining grew %#X > %#X\n",(int)this, lastChunk, _lastChunk));
               _isConfigChanged = true;
diff --git a/sys/collectives/kernel/interfaces/Composite.h b/sys/collectives/kernel/interfaces/Composite.h
index 8326c29..fa174a7 100755
--- a/sys/collectives/kernel/interfaces/Composite.h
+++ b/sys/collectives/kernel/interfaces/Composite.h
@@ -18,11 +18,14 @@
 
   #define MAX_EXECUTORS   6
 
-namespace CCMI {
-  namespace Kernel {
-    namespace Executor {
-      
-      class Composite {
+namespace CCMI
+{
+  namespace Kernel
+  {
+    namespace Executor
+    {
+      class Composite
+      {
       protected:
         ///
         /// \brief for synchronous protocols which need a barrier
@@ -39,28 +42,49 @@ namespace CCMI {
 
       public:
 
-	Composite () { 
+        Composite ()
+        {
           _barrier = NULL;
           for (int count = 0; count < MAX_EXECUTORS; count ++)
             _executors[count] = NULL; 
           _numExecutors = 0;
         }
 
-	void addExecutor (Executor *exec) {
+        /// Default Destructor
+        virtual ~Composite()
+        {
+          for (unsigned count = 0; count < _numExecutors; count ++)
+          {
+            _executors[count]->~Executor(); 
+            _executors[count] = NULL; 
+          }
+          _numExecutors = 0;
+        }
+        /// NOTE: This is required to make "C" programs link successfully with virtual destructors
+        inline void operator delete(void * p)
+        {
+          CCMI_abort();
+        }
+
+        void addExecutor (Executor *exec)
+        {
           CCMI_assert (_numExecutors < MAX_EXECUTORS);    
           _executors [_numExecutors] = exec;
           _numExecutors ++;
         }
 
-	void addBarrier (Executor *exec) {
+        void addBarrier (Executor *exec)
+        {
           _barrier = exec;
         }
 
-	Executor * getExecutor (int idx) {
+        Executor * getExecutor (int idx)
+        {
           return _executors [idx];
         }
 
-	unsigned getNumExecutors () {
+        unsigned getNumExecutors ()
+        {
           return _numExecutors;
         }
 
diff --git a/sys/collectives/kernel/interfaces/Executor.h b/sys/collectives/kernel/interfaces/Executor.h
old mode 100644
new mode 100755
index 34070eb..7f6e03f
--- a/sys/collectives/kernel/interfaces/Executor.h
+++ b/sys/collectives/kernel/interfaces/Executor.h
@@ -11,27 +11,32 @@
  * \brief ???
  */
 #ifndef         __executor_h__
-#define         __executor_h__
+  #define         __executor_h__
 
-#include "ccmi_internal.h"
-#include "Util.h"
+  #include "ccmi_internal.h"
+  #include "Util.h"
 
-namespace CCMI {
-  namespace Kernel {
-    namespace Executor {
+namespace CCMI
+{
+  namespace Kernel
+  {
+    namespace Executor
+    {
 
       /**
        * \brief Base Class for all Executors
        **/
 
-      class Executor {
+      class Executor
+      {
 
       public:
 
         /**
          * \brief  Constructor
          */
-        Executor () {
+        Executor ()
+        {
           _cb_done      =  NULL;
           _clientdata   =  NULL;
           _consistency  =  CCMI_UNDEFINED_CONSISTENCY;
@@ -40,13 +45,18 @@ namespace CCMI {
         /**
          * \brief  Destructor
          */
-        virtual ~Executor () {}
+        virtual ~Executor () 
+        {
+//           _cb_done      =  NULL;
+//           _clientdata   =  NULL;
+//           _consistency  =  CCMI_UNDEFINED_CONSISTENCY;
+        }
 
         /// NOTE: This is required to make "C" programs link successfully with virtual destructors
         inline void operator delete(void * p)
-          {
-            CCMI_abort();
-          }
+        {
+          CCMI_abort();
+        }
 
         /**
          * \brief Start method which is called when the collective
@@ -73,16 +83,19 @@ namespace CCMI {
 
         virtual void notifyRecv (unsigned src, const DCQuad &info, char * buf, unsigned bytes) = 0;
 
-        void setDoneCallback (void (*cb_done)(void *), void *cd) {
+        void setDoneCallback (void (*cb_done)(void *), void *cd)
+        {
           _cb_done    =   cb_done;
           _clientdata =   cd;
         }
 
-        void setConsistency  (CCMI_Consistency consistency) {
+        void setConsistency  (CCMI_Consistency consistency)
+        {
           _consistency = consistency;
         }
 
-        CCMI_Consistency getConsistency  () {
+        CCMI_Consistency getConsistency  ()
+        {
           return _consistency;
         }
 
@@ -97,8 +110,6 @@ namespace CCMI {
         ///  \brief Consistency required to perform the collective
         ///
         CCMI_Consistency      _consistency;
-
-
       };  //--  Executor class
     };  //-- Executor Name Space
   };  //-- Kernel
diff --git a/sys/collectives/tests/dcmf/tree/tree_allreduce.cc b/sys/collectives/tests/dcmf/tree/tree_allreduce.cc
old mode 100644
new mode 100755
index 7d48af1..b739bc4
--- a/sys/collectives/tests/dcmf/tree/tree_allreduce.cc
+++ b/sys/collectives/tests/dcmf/tree/tree_allreduce.cc
@@ -169,7 +169,7 @@ int main(int argc, char **argv)
 
 
   if (rank == 0)
-    printf("initializing elements\n");
+    fprintf(stderr,"initializing elements\n");
 
 #if 0
   #define DTYPE_TEST unsigned
@@ -190,7 +190,7 @@ int main(int argc, char **argv)
   if (rank == 0)
   {
     for (dt = 0; dt<1; dt++)
-      printf("%d  %d\n", inbuf[dt], outbuf[dt]);
+      fprintf(stderr,"%d  %d\n", inbuf[dt], outbuf[dt]);
   }
   return 0;
 #endif
@@ -205,7 +205,7 @@ int main(int argc, char **argv)
 
       // Warmup
       if (rank == 0)
-        printf("Allreduce Bandwidth Test Warmup %s %s\n",
+        fprintf(stderr,"Allreduce Bandwidth Test Warmup %s %s\n",
                dt_array_str[dt],
                op_array_str[op]);
 
@@ -218,7 +218,7 @@ int main(int argc, char **argv)
       if (rc)
       {
         if (rank == 0)
-          printf("Skipped Unsupported Test %s %s\n",
+          fprintf(stderr,"Skipped Unsupported Test %s %s\n",
                  dt_array_str[dt],
                  op_array_str[op]);
 
@@ -227,8 +227,8 @@ int main(int argc, char **argv)
 
       if (rank ==0)
       {
-        printf("Size(bytes)           cycles    bytes/cycle    usec\n");
-        printf("-----------      -----------    -----------    ---------\n");
+        fprintf(stderr,"Size(bytes)           cycles    bytes/cycle    usec\n");
+        fprintf(stderr,"-----------      -----------    -----------    ---------\n");
       }
       for (i=1; i<=COUNT; i*=2)
       {
@@ -249,7 +249,7 @@ int main(int argc, char **argv)
         if (rank==0)
         {
           double usec = ((double)treport)/((double)clockMHZ);
-          printf("%11lld %16lld %14f %12.2f\n",
+          fprintf(stderr,"%11lld %16lld %14f %12.2f\n",
                  dataSent,
                  treport,
                  (double)dataSent/(double)treport,
@@ -259,7 +259,7 @@ int main(int argc, char **argv)
       }
     }
   gibarrier();
-  if (rank==0) printf("SUCCESS\n");
+  if (rank==0) fprintf(stderr,"SUCCESS\n");
   DCMF_Messager_finalize ();
 
   return 0;
diff --git a/sys/collectives/tests/dcmf/tree/tree_reduce.cc b/sys/collectives/tests/dcmf/tree/tree_reduce.cc
old mode 100644
new mode 100755
index 555bc3d..dbaec1c
--- a/sys/collectives/tests/dcmf/tree/tree_reduce.cc
+++ b/sys/collectives/tests/dcmf/tree/tree_reduce.cc
@@ -169,7 +169,7 @@ int main(int argc, char **argv)
 
 
   if (rank == 0)
-    printf("initializing elements\n");
+    fprintf(stderr,"initializing elements\n");
 
 #if 0
   #define DTYPE_TEST unsigned
@@ -190,7 +190,7 @@ int main(int argc, char **argv)
   if (rank == 0)
   {
     for (dt = 0; dt<1; dt++)
-      printf("%d  %d\n", inbuf[dt], outbuf[dt]);
+      fprintf(stderr,"%d  %d\n", inbuf[dt], outbuf[dt]);
   }
   return 0;
 #endif
@@ -205,7 +205,7 @@ int main(int argc, char **argv)
 
       // Warmup
       if (rank == 0)
-        printf("Reduce Bandwidth Test Warmup %s %s\n",
+        fprintf(stderr,"Reduce Bandwidth Test Warmup %s %s\n",
                dt_array_str[dt],
                op_array_str[op]);
 
@@ -218,7 +218,7 @@ int main(int argc, char **argv)
       if (rc)
       {
         if (rank == 0)
-          printf("Skipped Unsupported Test %s %s\n",
+          fprintf(stderr,"Skipped Unsupported Test %s %s\n",
                  dt_array_str[dt],
                  op_array_str[op]);
 
@@ -227,8 +227,8 @@ int main(int argc, char **argv)
 
       if (rank ==0)
       {
-        printf("Size(bytes)           cycles    bytes/cycle    usec\n");
-        printf("-----------      -----------    -----------    ---------\n");
+        fprintf(stderr,"Size(bytes)           cycles    bytes/cycle    usec\n");
+        fprintf(stderr,"-----------      -----------    -----------    ---------\n");
       }
       for (i=1; i<=COUNT; i*=2)
       {
@@ -249,7 +249,7 @@ int main(int argc, char **argv)
         if (rank==0)
         {
           double usec = ((double)treport)/((double)clockMHZ);
-          printf("%11lld %16lld %14f %12.2f\n",
+          fprintf(stderr,"%11lld %16lld %14f %12.2f\n",
                  dataSent,
                  treport,
                  (double)dataSent/(double)treport,
@@ -259,7 +259,7 @@ int main(int argc, char **argv)
       }
     }
   gibarrier();
-  if (rank==0) printf("SUCCESS\n");
+  if (rank==0) fprintf(stderr,"SUCCESS\n");
   DCMF_Messager_finalize ();
 
   return 0;
-- 
1.5.4




More information about the dcmf mailing list