} 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_IRECV;
- extra->src = src_traced;
- extra->dst = rank;
- int known=0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if(known==0)
- dt_size_send = datatype->size();
- extra->send_size = count*dt_size_send;
- 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, rank, __FUNCTION__);
+ 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;
- int known=0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if(known==0)
- dt_size_send = datatype->size();
- extra->send_size = count*dt_size_send;
- 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, dst_traced, __FUNCTION__);
+ 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;
- int known=0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if(known==0)
- dt_size_send = datatype->size();
- extra->send_size = count*dt_size_send;
- 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, dst_traced, __FUNCTION__);
+ 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;
- int known = 0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if (known == 0)
- dt_size_send = datatype->size();
- extra->send_size = count * dt_size_send;
- 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, rank, __FUNCTION__);
+ 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;
- int known = 0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if (known == 0) {
- dt_size_send = datatype->size();
- }
- extra->send_size = count*dt_size_send;
- 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, dst_traced, __FUNCTION__);
+ 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;
- int known = 0;
- extra->datatype1 = encode_datatype(datatype, &known);
- int dt_size_send = 1;
- if(known == 0) {
- dt_size_send = datatype->size();
- }
- extra->send_size = count*dt_size_send;
- TRACE_smpi_ptp_in(rank, __FUNCTION__, extra);
- TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size());
+ 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, dst_traced, __FUNCTION__);
+ TRACE_smpi_comm_out(rank);
}
smpi_bench_begin();
} else if((sendtag<0 && sendtag != MPI_ANY_TAG)||(recvtag<0 && recvtag != MPI_ANY_TAG)){
retval = MPI_ERR_TAG;
} else {
-
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;
- int known = 0;
- extra->datatype1 = encode_datatype(sendtype, &known);
- int dt_size_send = 1;
- if (known == 0)
- dt_size_send = sendtype->size();
- extra->send_size = sendcount * dt_size_send;
- extra->datatype2 = encode_datatype(recvtype, &known);
- int dt_size_recv = 1;
- if (known == 0)
- dt_size_recv = recvtype->size();
- extra->recv_size = recvcount * dt_size_recv;
-
- 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, dst_traced, __FUNCTION__);
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, dst_traced, __FUNCTION__);
+ 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;
smpi_bench_end();
//save requests information for tracing
- typedef struct {
+ struct savedvalstype {
int src;
int dst;
int recv;
int tag;
MPI_Comm comm;
- } savedvalstype;
+ };
savedvalstype* savedvals = xbt_new0(savedvalstype, count);
for (int i = 0; i < count; i++) {
}
}
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, dst_traced, __FUNCTION__);
+ TRACE_smpi_comm_out(rank_traced);
}
xbt_free(savedvals);
{
smpi_bench_end();
//save information from requests
- typedef struct {
+ struct savedvalstype {
int src;
int dst;
int recv;
int tag;
int valid;
MPI_Comm comm;
- } savedvalstype;
+ };
savedvalstype* savedvals=xbt_new0(savedvalstype, count);
for (int i = 0; i < count; i++) {
}
}
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, -1, __FUNCTION__);
+ TRACE_smpi_comm_out(rank_traced);
xbt_free(savedvals);
smpi_bench_begin();