- CHECK_ACTION_PARAMS(action, 2, 1)
- int to = atoi(action[2]);
- double size=parse_double(action[3]);
- double clock = smpi_process()->simulated_elapsed();
-
- if(action[4])
- MPI_CURRENT_TYPE=decode_datatype(action[4]);
- else
- MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
-
- int rank = smpi_process()->index();
-
- int dst_traced = MPI_COMM_WORLD->group()->rank(to);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_SEND;
- extra->send_size = size;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
- TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
- if (not TRACE_smpi_view_internals())
- TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
-
- Request::send(nullptr, size, MPI_CURRENT_TYPE, to , 0, MPI_COMM_WORLD);
-
- log_timed_action (action, clock);
-
- TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
-}
-
-static void action_Isend(const char *const *action)
-{
- CHECK_ACTION_PARAMS(action, 2, 1)
- int to = atoi(action[2]);
- double size=parse_double(action[3]);
- double clock = smpi_process()->simulated_elapsed();
-
- if(action[4])
- MPI_CURRENT_TYPE=decode_datatype(action[4]);
- else
- MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
-
- int rank = smpi_process()->index();
- int dst_traced = MPI_COMM_WORLD->group()->rank(to);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_ISEND;
- extra->send_size = size;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
- TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra);
- if (not TRACE_smpi_view_internals())
- TRACE_smpi_send(rank, rank, dst_traced, 0, size*MPI_CURRENT_TYPE->size());
-
- MPI_Request request = Request::isend(nullptr, size, MPI_CURRENT_TYPE, to, 0,MPI_COMM_WORLD);
-
- TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__);
-
- get_reqq_self()->push_back(request);
-
- log_timed_action (action, clock);
-}
-
-static void action_recv(const char *const *action) {
- CHECK_ACTION_PARAMS(action, 2, 1)
- int from = atoi(action[2]);
- double size=parse_double(action[3]);
- double clock = smpi_process()->simulated_elapsed();
- MPI_Status status;
-
- if(action[4])
- MPI_CURRENT_TYPE=decode_datatype(action[4]);
- else
- MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
-
- int rank = smpi_process()->index();
- int src_traced = MPI_COMM_WORLD->group()->rank(from);
-
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_RECV;
- extra->send_size = size;
- extra->src = src_traced;
- extra->dst = rank;
- extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
- TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
-
- //unknown size from the receiver point of view
- if(size<=0.0){
- Request::probe(from, 0, MPI_COMM_WORLD, &status);
- size=status.count;
- }
-
- Request::recv(nullptr, size, MPI_CURRENT_TYPE, from, 0, MPI_COMM_WORLD, &status);
-
- TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
- if (not TRACE_smpi_view_internals()) {
- TRACE_smpi_recv(rank, src_traced, rank, 0);
- }
-
- log_timed_action (action, clock);
-}
-
-static void action_Irecv(const char *const *action)
-{
- CHECK_ACTION_PARAMS(action, 2, 1)
- int from = atoi(action[2]);
- double size=parse_double(action[3]);
- double clock = smpi_process()->simulated_elapsed();
-
- if(action[4])
- MPI_CURRENT_TYPE=decode_datatype(action[4]);
- else
- MPI_CURRENT_TYPE= MPI_DEFAULT_TYPE;
-
- int rank = smpi_process()->index();
- int src_traced = MPI_COMM_WORLD->group()->rank(from);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_IRECV;
- extra->send_size = size;
- extra->src = src_traced;
- extra->dst = rank;
- extra->datatype1 = encode_datatype(MPI_CURRENT_TYPE, nullptr);
- TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, extra);
- MPI_Status status;
- //unknow size from the receiver pov
- if(size<=0.0){
- Request::probe(from, 0, MPI_COMM_WORLD, &status);
- size=status.count;
- }
-
- MPI_Request request = Request::irecv(nullptr, size, MPI_CURRENT_TYPE, from, 0, MPI_COMM_WORLD);
-
- TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__);
- get_reqq_self()->push_back(request);
-
- log_timed_action (action, clock);
-}
-
-static void action_test(const char *const *action){