-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 datatype
- 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();
-
- TRACE_smpi_computing_in(rank, flops);
- 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);
-
- TRACE_smpi_comm_in(rank, __FUNCTION__,
- new simgrid::instr::Pt2PtTIData("send", dst_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
- 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);
-
- TRACE_smpi_comm_out(rank);
-
- log_timed_action(action, clock);
-}
-
-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);
- TRACE_smpi_comm_in(rank, __FUNCTION__,
- new simgrid::instr::Pt2PtTIData("Isend", dst_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
- 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_comm_out(rank);
-
- 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);
-
- TRACE_smpi_comm_in(rank, __FUNCTION__,
- new simgrid::instr::Pt2PtTIData("recv", src_traced, size, encode_datatype(MPI_CURRENT_TYPE)));
-
- //unknown size from the receiver point of view
- if (size <= 0.0) {
- Request::probe(from, 0, MPI_COMM_WORLD, &status);
- size=status.count;