-static void action_init(const char *const *action)
-{
- XBT_DEBUG("Initialize the counters");
- CHECK_ACTION_PARAMS(action, 0, 1)
- if(action[2])
- MPI_DEFAULT_TYPE=MPI_DOUBLE; // default MPE dataype
- else MPI_DEFAULT_TYPE= MPI_BYTE; // default TAU datatype
-
- /* start a simulated timer */
- smpi_process()->simulated_start();
- /*initialize the number of active processes */
- active_processes = smpi_process_count();
-
- set_reqq_self(new std::vector<MPI_Request>);
-}
-
-static void action_finalize(const char *const *action)
-{
- /* Nothing to do */
-}
-
-static void action_comm_size(const char *const *action)
-{
- communicator_size = parse_double(action[2]);
- log_timed_action (action, smpi_process()->simulated_elapsed());
-}
-
-static void action_comm_split(const char *const *action)
-{
- log_timed_action (action, smpi_process()->simulated_elapsed());
-}
-
-static void action_comm_dup(const char *const *action)
-{
- log_timed_action (action, smpi_process()->simulated_elapsed());
-}
-
-static void action_compute(const char *const *action)
-{
- CHECK_ACTION_PARAMS(action, 1, 0)
- double clock = smpi_process()->simulated_elapsed();
- double flops= parse_double(action[2]);
- int rank = smpi_process()->index();
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type=TRACING_COMPUTING;
- extra->comp_size=flops;
- TRACE_smpi_computing_in(rank, extra);
-
- smpi_execute_flops(flops);
-
- TRACE_smpi_computing_out(rank);
- log_timed_action (action, clock);
-}
-
-static void action_send(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_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, __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, 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, __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, 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, __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;