int rank = smpi_process()->index();
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_IRECV;
- extra->src = comm->group()->index(src);
- extra->dst = rank;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("Irecv", comm->group()->index(src),
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
*request = simgrid::smpi::Request::irecv(buf, count, datatype, src, tag, comm);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = smpi_process()->index();
- int dst_traced = comm->group()->index(dst);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_ISEND;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
- TRACE_smpi_send(rank, rank, dst_traced, tag, count*datatype->size());
+ int rank = smpi_process()->index();
+ int trace_dst = comm->group()->index(dst);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("Isend", trace_dst,
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
+
+ TRACE_smpi_send(rank, rank, trace_dst, tag, count * datatype->size());
*request = simgrid::smpi::Request::isend(buf, count, datatype, dst, tag, comm);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else if(tag<0 && tag != MPI_ANY_TAG){
retval = MPI_ERR_TAG;
} else {
- int rank = smpi_process()->index();
- int dst_traced = comm->group()->index(dst);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_ISSEND;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
- TRACE_smpi_send(rank, rank, dst_traced, tag, count*datatype->size());
+ int rank = smpi_process()->index();
+ int trace_dst = comm->group()->index(dst);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("ISsend", trace_dst,
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
+ TRACE_smpi_send(rank, rank, trace_dst, tag, count * datatype->size());
*request = simgrid::smpi::Request::issend(buf, count, datatype, dst, tag, comm);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else {
int rank = smpi_process()->index();
int src_traced = comm->group()->index(src);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
- extra->type = TRACING_RECV;
- extra->src = src_traced;
- extra->dst = rank;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("recv", src_traced,
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
simgrid::smpi::Request::recv(buf, count, datatype, src, tag, comm, status);
retval = MPI_SUCCESS;
TRACE_smpi_recv(src_traced, rank, tag);
}
}
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else {
int rank = smpi_process()->index();
int dst_traced = comm->group()->index(dst);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_SEND;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("send", dst_traced,
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
if (not TRACE_smpi_view_internals()) {
TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
}
simgrid::smpi::Request::send(buf, count, datatype, dst, tag, comm);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else {
int rank = smpi_process()->index();
int dst_traced = comm->group()->index(dst);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_SSEND;
- extra->src = rank;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(datatype);
- extra->send_size = datatype->is_basic() ? count : count * datatype->size();
-
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::Pt2PtTIData("Ssend", dst_traced,
+ datatype->is_replayable() ? count : count * datatype->size(),
+ encode_datatype(datatype)));
TRACE_smpi_send(rank, rank, dst_traced, tag, count * datatype->size());
simgrid::smpi::Request::ssend(buf, count, datatype, dst, tag, comm);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
int rank = smpi_process()->index();
int dst_traced = comm->group()->index(dst);
int src_traced = comm->group()->index(src);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t, 1);
- extra->type = TRACING_SENDRECV;
- extra->src = src_traced;
- extra->dst = dst_traced;
- extra->datatype1 = encode_datatype(sendtype);
- extra->send_size = sendtype->is_basic() ? sendcount : sendcount * sendtype->size();
- extra->datatype2 = encode_datatype(recvtype);
- extra->recv_size = recvtype->is_basic() ? recvcount : recvcount * recvtype->size();
-
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+
+ // FIXME: Hack the way to trace this one
+ std::vector<int>* dst_hack = new std::vector<int>;
+ std::vector<int>* src_hack = new std::vector<int>;
+ dst_hack->push_back(dst_traced);
+ src_hack->push_back(src_traced);
+ TRACE_smpi_comm_in(rank, __FUNCTION__,
+ new simgrid::instr::VarCollTIData(
+ "sendRecv", -1, sendtype->is_replayable() ? sendcount : sendcount * sendtype->size(), dst_hack,
+ recvtype->is_replayable() ? recvcount : recvcount * recvtype->size(), src_hack,
+ encode_datatype(sendtype), encode_datatype(recvtype)));
+
TRACE_smpi_send(rank, rank, dst_traced, sendtag, sendcount * sendtype->size());
simgrid::smpi::Request::sendrecv(sendbuf, sendcount, sendtype, dst, sendtag, recvbuf, recvcount, recvtype, src,
recvtag, comm, status);
retval = MPI_SUCCESS;
- TRACE_smpi_ptp_out(rank);
TRACE_smpi_recv(src_traced, rank, recvtag);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else {
int rank = ((*request)->comm() != MPI_COMM_NULL) ? smpi_process()->index() : -1;
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_TEST;
- TRACE_smpi_testing_in(rank, extra);
+ TRACE_smpi_testing_in(rank);
*flag = simgrid::smpi::Request::test(request,status);
int tag_traced= (*request)->tag();
MPI_Comm comm = (*request)->comm();
int is_wait_for_receive = ((*request)->flags() & RECV);
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_WAIT;
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
+ TRACE_smpi_comm_in(rank, __FUNCTION__, new simgrid::instr::NoOpTIData("wait"));
simgrid::smpi::Request::wait(request, status);
retval = MPI_SUCCESS;
//the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
- TRACE_smpi_ptp_out(rank);
+ TRACE_smpi_comm_out(rank);
if (is_wait_for_receive) {
if(src_traced==MPI_ANY_SOURCE)
src_traced = (status != MPI_STATUS_IGNORE) ? comm->group()->rank(status->MPI_SOURCE) : src_traced;
return MPI_SUCCESS;
smpi_bench_end();
- //save requests information for tracing
- struct savedvalstype {
- int src;
- int dst;
- int recv;
- int tag;
- MPI_Comm comm;
- };
- savedvalstype* savedvals = xbt_new0(savedvalstype, count);
- for (int i = 0; i < count; i++) {
- MPI_Request req = requests[i]; //already received requests are no longer valid
- if (req) {
- savedvals[i]=(savedvalstype){req->src(), req->dst(), (req->flags() & RECV), req->tag(), req->comm()};
- }
- }
int rank_traced = smpi_process()->index();
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_WAITANY;
- extra->send_size=count;
- TRACE_smpi_ptp_in(rank_traced, __FUNCTION__,extra);
+ TRACE_smpi_comm_in(rank_traced, __FUNCTION__, new simgrid::instr::CpuTIData("waitAny", static_cast<double>(count)));
*index = simgrid::smpi::Request::waitany(count, requests, status);
if(*index!=MPI_UNDEFINED){
- int src_traced = savedvals[*index].src;
- //the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
- int dst_traced = savedvals[*index].dst;
- int is_wait_for_receive = savedvals[*index].recv;
- if (is_wait_for_receive) {
- if(savedvals[*index].src==MPI_ANY_SOURCE)
- src_traced = (status != MPI_STATUSES_IGNORE) ? savedvals[*index].comm->group()->rank(status->MPI_SOURCE)
- : savedvals[*index].src;
- TRACE_smpi_recv(src_traced, dst_traced, savedvals[*index].tag);
+ MPI_Request req = requests[*index];
+ if (req != nullptr) { // Requests that were already received will be a nullptr
+ int src_traced = req->src();
+ // the src may not have been known at the beginning of the recv (MPI_ANY_SOURCE)
+ int dst_traced = req->dst();
+ int is_wait_for_receive = req->flags() & RECV;
+ if (is_wait_for_receive) {
+ if (req->src() == MPI_ANY_SOURCE)
+ src_traced = (status != MPI_STATUSES_IGNORE) ? req->comm()->group()->rank(status->MPI_SOURCE) : req->src();
+ TRACE_smpi_recv(src_traced, dst_traced, req->tag());
+ }
}
- TRACE_smpi_ptp_out(rank_traced);
+ TRACE_smpi_comm_out(rank_traced);
}
- xbt_free(savedvals);
smpi_bench_begin();
return MPI_SUCCESS;
}
}
int rank_traced = smpi_process()->index();
- instr_extra_data extra = xbt_new0(s_instr_extra_data_t,1);
- extra->type = TRACING_WAITALL;
- extra->send_size=count;
- TRACE_smpi_ptp_in(rank_traced, __FUNCTION__,extra);
+ TRACE_smpi_comm_in(rank_traced, __FUNCTION__, new simgrid::instr::CpuTIData("waitAll", static_cast<double>(count)));
int retval = simgrid::smpi::Request::waitall(count, requests, status);
}
}
}
- TRACE_smpi_ptp_out(rank_traced);
+ TRACE_smpi_comm_out(rank_traced);
xbt_free(savedvals);
smpi_bench_begin();