Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
SMPI/replay: Fix issue with recv of size =0.
[simgrid.git] / src / smpi / include / smpi_replay.hpp
index d17d5fb..3c79913 100644 (file)
@@ -35,9 +35,7 @@ XBT_PRIVATE unsigned char* smpi_get_tmp_recvbuffer(size_t size);
 
 XBT_PRIVATE void log_timed_action(const simgrid::xbt::ReplayAction& action, double clock);
 
-namespace simgrid {
-namespace smpi {
-namespace replay {
+namespace simgrid::smpi::replay {
 extern MPI_Datatype MPI_DEFAULT_TYPE;
 
 class RequestStorage; // Forward decl
@@ -60,11 +58,11 @@ public:
   void parse(xbt::ReplayAction& action, const std::string& name) override;
 };
 
-class SendRecvParser : public ActionArgParser {
+class SendOrRecvParser : public ActionArgParser {
 public:
   /* communication partner; if we send, this is the receiver and vice versa */
   int partner;
-  size_t size;
+  ssize_t size;
   int tag;
   MPI_Datatype datatype1;
 
@@ -105,6 +103,18 @@ public:
   MPI_Datatype datatype2;
 };
 
+class SendRecvParser : public ActionArgParser {
+public:
+  int dst;
+  int src;
+  int sendcount;
+  int recvcount;
+  MPI_Datatype datatype1;
+  MPI_Datatype datatype2;
+
+  void parse(xbt::ReplayAction& action, const std::string& name) override;
+};
+
 class BcastArgParser : public CollCommParser {
 public:
   void parse(xbt::ReplayAction& action, const std::string& name) override;
@@ -221,7 +231,7 @@ public:
   void kernel(xbt::ReplayAction& action) override;
 };
 
-class SendAction : public ReplayAction<SendRecvParser> {
+class SendAction : public ReplayAction<SendOrRecvParser> {
   RequestStorage& req_storage;
 
 public:
@@ -229,7 +239,7 @@ public:
   void kernel(xbt::ReplayAction& action) override;
 };
 
-class RecvAction : public ReplayAction<SendRecvParser> {
+class RecvAction : public ReplayAction<SendOrRecvParser> {
   RequestStorage& req_storage;
 
 public:
@@ -284,6 +294,12 @@ public:
   void kernel(xbt::ReplayAction& action) override;
 };
 
+class SendRecvAction : public ReplayAction<SendRecvParser> {
+public:
+  explicit SendRecvAction() : ReplayAction("sendrecv") {}
+  void kernel(xbt::ReplayAction& action) override;
+};
+
 class BarrierAction : public ReplayAction<ActionArgParser> {
 public:
   explicit BarrierAction() : ReplayAction("barrier") {}
@@ -356,8 +372,6 @@ public:
   void kernel(xbt::ReplayAction& action) override;
 };
 
-} // namespace replay
-} // namespace smpi
-} // namespace simgrid
+} // namespace simgrid::smpi::replay
 
 #endif