Parcourir la source

pdevs/mpi: add multithreading RootCoordinator

Eric Ramat il y a 7 ans
Parent
commit
305273918a
2 fichiers modifiés avec 64 ajouts et 4 suppressions
  1. 62 3
      src/tests/mpi/cluster/graph_manager.hpp
  2. 2 1
      src/tests/mpi/cluster/main.cpp

+ 62 - 3
src/tests/mpi/cluster/graph_manager.hpp

@@ -137,12 +137,12 @@ struct RootGraphManagerParameters
 	std::pair < int, int > > > > parents;
 };
 
-class RootGraphManager :
+class LevelGraphManager :
         public paradevs::pdevs::GraphManager < common::DoubleTime,
                                                RootGraphManagerParameters >
 {
 public:
-    RootGraphManager(
+    LevelGraphManager(
 	common::Coordinator < common::DoubleTime >* coordinator,
         const RootGraphManagerParameters& parameters) :
         paradevs::pdevs::GraphManager < common::DoubleTime,
@@ -194,8 +194,19 @@ public:
 	}
       }
     }
+
+    void init()
+    { }
+
+    void start(common::DoubleTime::type /* t */)
+    { }
+
+    void transition(
+        const common::Models < common::DoubleTime >& /* receivers */,
+        common::DoubleTime::type /* t */)
+    { }
   
-    virtual ~RootGraphManager()
+    virtual ~LevelGraphManager()
     {
         std::for_each(models.begin(), models.end(),
                       std::default_delete < ModelProxy >());
@@ -208,6 +219,54 @@ private:
     ModelProxies models;
 };
 
+class RootGraphManager :
+    public paradevs::pdevs::GraphManager < common::DoubleTime,
+					   RootGraphManagerParameters >
+{
+public:
+    RootGraphManager(
+        common::Coordinator < common::DoubleTime >* coordinator,
+        const RootGraphManagerParameters& parameters) :
+      paradevs::pdevs::GraphManager < common::DoubleTime,
+				      RootGraphManagerParameters >(
+					      coordinator, parameters),
+        S("S", paradevs::common::NoParameters(), parameters)
+    {
+        add_child(&S);
+    }
+
+    void init()
+    {
+        S.set_sender(
+            dynamic_cast < paradevs::pdevs::multithreading::Coordinator <
+                common::DoubleTime,
+	    paradevs::tests::mpi::cluster::RootGraphManager >*
+            >(get_coordinator())->get_sender());
+    }
+
+    void start(common::DoubleTime::type t)
+    {
+        S.get_sender().send(
+            paradevs::pdevs::multithreading::start_message <
+                common::DoubleTime >(t));
+    }
+
+    void transition(const common::Models < common::DoubleTime >& receivers,
+                    common::DoubleTime::type t)
+    {
+        S.get_sender().send(
+	    paradevs::pdevs::multithreading::transition_message <
+	        common::DoubleTime >(t));
+    }
+
+    virtual ~RootGraphManager()
+    { }
+
+private:
+    paradevs::pdevs::multithreading::Coordinator <
+  common::DoubleTime, LevelGraphManager, paradevs::common::NoParameters, RootGraphManagerParameters > S;
+};	
+
 } } } } // namespace paradevs tests mpi cluster
 
 #endif

+ 2 - 1
src/tests/mpi/cluster/main.cpp

@@ -33,6 +33,7 @@
 
 #include <paradevs/common/time/DoubleTime.hpp>
 #include <paradevs/kernel/pdevs/mpi/LogicalProcessor.hpp>
+#include <paradevs/kernel/pdevs/multithreading/Coordinator.hpp>
 #include <tests/mpi/cluster/graph_manager.hpp>
 
 #include <chrono>
@@ -194,7 +195,7 @@ void example_simple(int argc, char *argv[])
 	parameters.parents = parents;
         paradevs::common::RootCoordinator <
             DoubleTime,
-            paradevs::pdevs::Coordinator <
+	    paradevs::pdevs::multithreading::Coordinator <
                 DoubleTime,
                 paradevs::tests::mpi::cluster::RootGraphManager,
                 paradevs::common::NoParameters,