Parcourir la source

Fix serialization and value

Eric Ramat il y a 8 ans
Parent
commit
72d3dc051a

+ 2 - 2
src/tests/boost_graph/models.hpp

@@ -92,7 +92,7 @@ public:
         common::Bag < common::DoubleTime > bag;
 
         bag.push_back(common::ExternalEvent < common::DoubleTime >(
-                          "out", (void*)&_value));
+                          "out", common::Value(_value)));
         return bag;
     }
 
@@ -202,7 +202,7 @@ public:
 
         if (_phase == SEND) {
             bag.push_back(common::ExternalEvent < common::DoubleTime >(
-                              "out", (void*)&_value));
+                              "out", common::Value(_value)));
         }
         return bag;
     }

+ 2 - 2
src/tests/dtss/models.hpp

@@ -97,7 +97,7 @@ public:
 
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&_value));
+                               "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -179,7 +179,7 @@ public:
 
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&_value));
+                               "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()

+ 7 - 5
src/tests/mixed/models.hpp

@@ -158,7 +158,7 @@ public:
 
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&_value));
+                               "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -303,7 +303,7 @@ public:
 
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&t));
+                               "out", common::Value(_phase)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -382,7 +382,8 @@ public:
         common::Bag < common::DoubleTime > msgs;
 
         msgs.push_back(
-            common::ExternalEvent < common::DoubleTime >( "out", (void*)&_value));
+            common::ExternalEvent < common::DoubleTime >(
+                "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -459,7 +460,8 @@ public:
         common::Bag < common::DoubleTime > msgs;
 
         msgs.push_back(
-            common::ExternalEvent < common::DoubleTime >("out", (void*)&_value));
+            common::ExternalEvent < common::DoubleTime >(
+                "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -601,7 +603,7 @@ public:
 
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&_value));
+                               "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()

+ 76 - 74
src/tests/mpi/graph_manager.hpp

@@ -35,7 +35,7 @@
 #include <paradevs/kernel/pdevs/mpi/GraphManager.hpp>
 #include <paradevs/kernel/pdevs/Simulator.hpp>
 
-#include <tests/boost_graph/graph_defs.hpp>
+// #include <tests/boost_graph/graph_defs.hpp>
 
 namespace paradevs { namespace tests { namespace mpi {
 
@@ -146,6 +146,8 @@ public:
         add_child(&S1);
         add_child(&S2);
 
+        S1.add_out_port("out");
+        S2.add_in_port("in");
         add_link(&S1, "out", &S2, "in");
     }
 
@@ -157,79 +159,79 @@ private:
     paradevs::pdevs::mpi::ModelProxy < common::DoubleTime > S2;
 };
 
-struct MPIHierarchicalGraphManagerParameters
-{
-    paradevs::tests::boost_graph::OrientedGraphs graphs;
-    paradevs::tests::boost_graph::InputEdgeList input_edges;
-    paradevs::tests::boost_graph::OutputEdgeList output_edges;
-    paradevs::tests::boost_graph::Connections parent_connections;
-    std::vector < int > ranks;
-};
-
-class MPIHierarchicalGraphManager :
-        public paradevs::pdevs::GraphManager <
-    common::DoubleTime, MPIHierarchicalGraphManagerParameters >
-{
-public:
-    MPIHierarchicalGraphManager(
-        common::Coordinator < common::DoubleTime >* coordinator,
-        const MPIHierarchicalGraphManagerParameters& parameters) :
-        paradevs::pdevs::GraphManager <
-            common::DoubleTime,
-            MPIHierarchicalGraphManagerParameters >
-        (coordinator, parameters)
-    {
-        // build model proxies (graphs)
-        for (unsigned int i = 0; i < parameters.graphs.size(); ++i) {
-            ModelProxy* model = 0;
-            std::ostringstream ss;
-
-            ss << "S" << i;
-            model = new ModelProxy(ss.str(), parameters.ranks[i], false);
-            _models.push_back(model);
-            add_child(model);
-        }
-
-        // // builds internal connections (edges)
-        // for (Connections::const_iterator it = parent_connections.begin();
-        //      it != parent_connections.end(); ++it) {
-        //     const Connection& connection = *it;
-        //     std::ostringstream ss_out;
-        //     std::ostringstream ss_in;
-
-        //     ss_out << "out_" << connection.first.second;
-        //     ss_in << "in_" << connection.first.second;
-
-        //     if (not ParallelHeapHierarchicalGraphManager <
-        //             GraphBuilder >::exist_link(
-        //                 _coordinators[connection.first.first - 1],
-        //                 ss_out.str(),
-        //                 _coordinators[connection.second.first - 1],
-        //                 ss_in.str())) {
-        //         ParallelHeapHierarchicalGraphManager <
-        //             GraphBuilder >::add_link(
-        //                 _coordinators[connection.first.first - 1],
-        //                 ss_out.str(),
-        //                 _coordinators[connection.second.first - 1],
-        //                 ss_in.str());
-        //     }
-        // }
-    }
-
-    virtual ~MPIHierarchicalGraphManager()
-    {
-        for (typename ModelProxies::const_iterator it = _models.begin();
-             it != _models.end(); ++it) {
-            delete *it;
-        }
-    }
-
-private:
-    typedef paradevs::pdevs::mpi::ModelProxy < common::DoubleTime > ModelProxy;
-    typedef std::vector < ModelProxy* > ModelProxies;
-
-    ModelProxies _models;
-};
+// struct MPIHierarchicalGraphManagerParameters
+// {
+//     paradevs::tests::boost_graph::OrientedGraphs graphs;
+//     paradevs::tests::boost_graph::InputEdgeList input_edges;
+//     paradevs::tests::boost_graph::OutputEdgeList output_edges;
+//     paradevs::tests::boost_graph::Connections parent_connections;
+//     std::vector < int > ranks;
+// };
+
+// class MPIHierarchicalGraphManager :
+//         public paradevs::pdevs::GraphManager <
+//     common::DoubleTime, MPIHierarchicalGraphManagerParameters >
+// {
+// public:
+//     MPIHierarchicalGraphManager(
+//         common::Coordinator < common::DoubleTime >* coordinator,
+//         const MPIHierarchicalGraphManagerParameters& parameters) :
+//         paradevs::pdevs::GraphManager <
+//             common::DoubleTime,
+//             MPIHierarchicalGraphManagerParameters >
+//         (coordinator, parameters)
+//     {
+//         // build model proxies (graphs)
+//         for (unsigned int i = 0; i < parameters.graphs.size(); ++i) {
+//             ModelProxy* model = 0;
+//             std::ostringstream ss;
+
+//             ss << "S" << i;
+//             model = new ModelProxy(ss.str(), parameters.ranks[i], false);
+//             _models.push_back(model);
+//             add_child(model);
+//         }
+
+//         // // builds internal connections (edges)
+//         // for (Connections::const_iterator it = parent_connections.begin();
+//         //      it != parent_connections.end(); ++it) {
+//         //     const Connection& connection = *it;
+//         //     std::ostringstream ss_out;
+//         //     std::ostringstream ss_in;
+
+//         //     ss_out << "out_" << connection.first.second;
+//         //     ss_in << "in_" << connection.first.second;
+
+//         //     if (not ParallelHeapHierarchicalGraphManager <
+//         //             GraphBuilder >::exist_link(
+//         //                 _coordinators[connection.first.first - 1],
+//         //                 ss_out.str(),
+//         //                 _coordinators[connection.second.first - 1],
+//         //                 ss_in.str())) {
+//         //         ParallelHeapHierarchicalGraphManager <
+//         //             GraphBuilder >::add_link(
+//         //                 _coordinators[connection.first.first - 1],
+//         //                 ss_out.str(),
+//         //                 _coordinators[connection.second.first - 1],
+//         //                 ss_in.str());
+//         //     }
+//         // }
+//     }
+
+//     virtual ~MPIHierarchicalGraphManager()
+//     {
+//         for (typename ModelProxies::const_iterator it = _models.begin();
+//              it != _models.end(); ++it) {
+//             delete *it;
+//         }
+//     }
+
+// private:
+//     typedef paradevs::pdevs::mpi::ModelProxy < common::DoubleTime > ModelProxy;
+//     typedef std::vector < ModelProxy* > ModelProxies;
+
+//     ModelProxies _models;
+// };
 
 } } } // namespace paradevs tests mpi
 

+ 52 - 51
src/tests/mpi/main.cpp

@@ -29,10 +29,10 @@
 #include <boost/mpi/environment.hpp>
 #include <boost/mpi/communicator.hpp>
 
-#include <tests/boost_graph/graph_defs.hpp>
-#include <tests/boost_graph/graph_builder.hpp>
-#include <tests/boost_graph/graph_generator.hpp>
-#include <tests/boost_graph/graph_partitioning.hpp>
+// #include <tests/boost_graph/graph_defs.hpp>
+// #include <tests/boost_graph/graph_builder.hpp>
+// #include <tests/boost_graph/graph_generator.hpp>
+// #include <tests/boost_graph/graph_partitioning.hpp>
 
 #include <paradevs/common/time/DoubleTime.hpp>
 #include <paradevs/kernel/pdevs/mpi/LogicalProcessor.hpp>
@@ -93,56 +93,57 @@ void example_simple(int argc, char *argv[])
     }
 }
 
-void example_grid(int argc, char *argv[])
-{
-    environment env(argc, argv);
-    communicator world;
-
-    unsigned int side = 100;
-    std::vector<std::pair<int,int>> vertex_selection;
-    std::pair<int,int> tmp;
-    tmp.first = 0;
-    tmp.second = 3;
-    vertex_selection.push_back(tmp);
-    paradevs::tests::boost_graph::Entiers weight_vertex;
-    weight_vertex.push_back(1);
-    const char *edge_weight;
-    edge_weight = "../../sortie_graphe/tests_grid.txt";
-    bool rec = false;
-
-    paradevs::tests::boost_graph::RandomGridGraphGenerator generator(
-        side, vertex_selection,  weight_vertex, edge_weight, rec);
-    paradevs::tests::boost_graph::PartitioningGraphBuilder builder(
-        4, "gggp", 20, false, generator);
-    paradevs::tests::mpi::MPIHierarchicalGraphManagerParameters parameters;
-
-    builder.build(parameters.graphs, parameters.input_edges,
-                  parameters.output_edges, parameters.parent_connections);
-    if (world.rank() == 0) {
-        paradevs::common::RootCoordinator <
-            DoubleTime, paradevs::pdevs::mpi::Coordinator <
-                DoubleTime,
-                paradevs::tests::mpi::MPIHierarchicalGraphManager,
-                paradevs::common::NoParameters,
-                paradevs::tests::mpi::MPIHierarchicalGraphManagerParameters >
-            > rc(0, 10, "root", paradevs::common::NoParameters(), parameters);
-
-        steady_clock::time_point t1 = steady_clock::now();
-
-        rc.run();
-
-        steady_clock::time_point t2 = steady_clock::now();
-
-        duration < double > time_span = duration_cast <
-            duration < double > >(t2 - t1);
-
-        std::cout << "MULTI = " << time_span.count() << std::endl;
-    } else {
-    }
-}
+// void example_grid(int argc, char *argv[])
+// {
+//     environment env(argc, argv);
+//     communicator world;
+
+//     unsigned int side = 100;
+//     std::vector<std::pair<int,int>> vertex_selection;
+//     std::pair<int,int> tmp;
+//     tmp.first = 0;
+//     tmp.second = 3;
+//     vertex_selection.push_back(tmp);
+//     paradevs::tests::boost_graph::Entiers weight_vertex;
+//     weight_vertex.push_back(1);
+//     const char *edge_weight;
+//     edge_weight = "../../sortie_graphe/tests_grid.txt";
+//     bool rec = false;
+
+//     paradevs::tests::boost_graph::RandomGridGraphGenerator generator(
+//         side, vertex_selection,  weight_vertex, edge_weight, rec);
+//     paradevs::tests::boost_graph::PartitioningGraphBuilder builder(
+//         4, "gggp", 20, false, generator);
+//     paradevs::tests::mpi::MPIHierarchicalGraphManagerParameters parameters;
+
+//     builder.build(parameters.graphs, parameters.input_edges,
+//                   parameters.output_edges, parameters.parent_connections);
+//     if (world.rank() == 0) {
+//         paradevs::common::RootCoordinator <
+//             DoubleTime, paradevs::pdevs::mpi::Coordinator <
+//                 DoubleTime,
+//                 paradevs::tests::mpi::MPIHierarchicalGraphManager,
+//                 paradevs::common::NoParameters,
+//                 paradevs::tests::mpi::MPIHierarchicalGraphManagerParameters >
+//             > rc(0, 10, "root", paradevs::common::NoParameters(), parameters);
+
+//         steady_clock::time_point t1 = steady_clock::now();
+
+//         rc.run();
+
+//         steady_clock::time_point t2 = steady_clock::now();
+
+//         duration < double > time_span = duration_cast <
+//             duration < double > >(t2 - t1);
+
+//         std::cout << "MULTI = " << time_span.count() << std::endl;
+//     } else {
+//     }
+// }
 
 int main(int argc, char *argv[])
 {
     example_simple(argc, argv);
+    // example_grid(argc, argv);
     return 0;
 }

+ 2 - 2
src/tests/multithreading/lifegame/models.hpp

@@ -90,7 +90,7 @@ public:
 
         for (common::Bag < common::DoubleTime >::const_iterator it =
                  bag.begin(); it != bag.end(); ++it) {
-            if (*(bool*)(it->get_content())) {
+            if (it->get_content().get_content < bool >()) {
                 ++_true_neighbour_number;
             }
             ++_received;
@@ -147,7 +147,7 @@ public:
             //           << std::endl;
 
             bag.push_back(common::ExternalEvent < common::DoubleTime >(
-                              "out", (void*)(&_state)));
+                              "out", common::Value(_state)));
         }
         return bag;
     }

+ 25 - 2
src/tests/pdevs/models.hpp

@@ -76,7 +76,10 @@ public:
         common::Trace < common::DoubleTime >::trace().flush();
 #endif
 
+        std::cout << t << ": " << get_name() << " => dint" << std::endl;
+
         delay();
+        ++_value;
 
         if (_phase == SEND) {
             _phase = WAIT;
@@ -93,6 +96,13 @@ public:
         (void)msgs;
 #endif
 
+        for (common::Bag < common::DoubleTime >::const_iterator it =
+                 msgs.begin(); it != msgs.end(); ++it) {
+            std::cout << t << ": " << get_name()
+                      << " => " << it->get_content().get_content < double >()
+                      << std::endl;
+        }
+
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
             << common::TraceElement < common::DoubleTime >(
@@ -115,6 +125,9 @@ public:
         (void)msgs;
 #endif
 
+        std::cout << t << ": " << get_name() << " => " << msgs.to_string()
+                  << std::endl;
+
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
             << common::TraceElement < common::DoubleTime >(
@@ -178,7 +191,9 @@ public:
 
         msgs.push_back(
             common::ExternalEvent < common::DoubleTime >(
-                "out", (void*)&_value));
+                "out", common::Value(_value)));
+
+        std::cout << t << ": " << get_name() << " => lambda" << std::endl;
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
@@ -228,7 +243,10 @@ public:
         common::Trace < common::DoubleTime >::trace().flush();
 #endif
 
+        std::cout << t << ": " << get_name() << " => dint" << std::endl;
+
         delay();
+        ++_value;
 
         if (_phase == SEND) {
             _phase = WAIT;
@@ -245,6 +263,9 @@ public:
         (void)msgs;
 #endif
 
+        std::cout << t << ": " << get_name() << " => " << msgs.to_string()
+                  << std::endl;
+
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()
             << common::TraceElement < common::DoubleTime >(
@@ -328,9 +349,11 @@ public:
 #endif
         common::Bag < common::DoubleTime > msgs;
 
+        std::cout << t << ": " << get_name() << " => lambda" << std::endl;
+
         msgs.push_back(common::ExternalEvent <
                            common::DoubleTime >(
-                               "out", (void*)&_value));
+                               "out", common::Value(_value)));
 
 #ifdef WITH_TRACE
         common::Trace < common::DoubleTime >::trace()

+ 3 - 3
src/tests/plot/models.hpp

@@ -201,7 +201,7 @@ public:
     {
         for (common::Bag < common::DoubleTime >::const_iterator it =
                  bag.begin(); it != bag.end(); ++it) {
-            PlotData data = *(PlotData*)(it->get_content());
+            PlotData data; // = *(PlotData*)(it->get_content());
 
             _neighbour_data.push_back(data);
 
@@ -271,8 +271,8 @@ public:
         common::Bag < common::DoubleTime > bag;
 
         if (_phase == SEND) {
-            bag.push_back(common::ExternalEvent < common::DoubleTime >(
-                              "out", (void*)(&_data)));
+            // bag.push_back(common::ExternalEvent < common::DoubleTime >(
+            //                   "out", _data));
         }
         return bag;
     }