+void SendRecvAction::kernel(simgrid::xbt::ReplayAction&)
+{
+ XBT_DEBUG("Enters SendRecv");
+ const SendRecvParser& args = get_args();
+ aid_t my_proc_id = simgrid::s4u::this_actor::get_pid();
+ aid_t src_traced = MPI_COMM_WORLD->group()->actor(args.src);
+ aid_t dst_traced = MPI_COMM_WORLD->group()->actor(args.dst);
+
+ MPI_Status status;
+ int sendtag=0;
+ int recvtag=0;
+
+ // FIXME: Hack the way to trace this one
+ auto dst_hack = std::make_shared<std::vector<int>>();
+ auto src_hack = std::make_shared<std::vector<int>>();
+ dst_hack->push_back(dst_traced);
+ src_hack->push_back(src_traced);
+ TRACE_smpi_comm_in(my_proc_id, __func__,
+ new simgrid::instr::VarCollTIData(
+ "sendRecv", -1, args.sendcount,
+ dst_hack, args.recvcount, src_hack,
+ simgrid::smpi::Datatype::encode(args.datatype1), simgrid::smpi::Datatype::encode(args.datatype2)));
+
+ TRACE_smpi_send(my_proc_id, my_proc_id, dst_traced, sendtag, args.sendcount * args.datatype1->size());
+
+ simgrid::smpi::Request::sendrecv(nullptr, args.sendcount, args.datatype1, args.dst, sendtag, nullptr, args.recvcount, args.datatype2, args.src,
+ recvtag, MPI_COMM_WORLD, &status);
+
+ TRACE_smpi_recv(src_traced, my_proc_id, recvtag);
+ TRACE_smpi_comm_out(my_proc_id);
+ XBT_DEBUG("Exits SendRecv");
+}
+