X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/0bffda160473d5f1b8e02097624671c40465ee0b..04444a3077f46c717719a05b0c10b39d16a8c53a:/src/smpi/smpi_pmpi.c diff --git a/src/smpi/smpi_pmpi.c b/src/smpi/smpi_pmpi.c index e7b5d440c1..3a3b67ea06 100644 --- a/src/smpi/smpi_pmpi.c +++ b/src/smpi/smpi_pmpi.c @@ -115,10 +115,6 @@ int PMPI_Abort(MPI_Comm comm, int errorcode) { smpi_bench_end(); smpi_process_destroy(); -#ifdef HAVE_TRACING - int rank = smpi_process_index(); - TRACE_smpi_computing_out(rank); -#endif // FIXME: should kill all processes in comm instead simcall_process_kill(SIMIX_process_self()); return MPI_SUCCESS; @@ -127,7 +123,13 @@ int PMPI_Abort(MPI_Comm comm, int errorcode) double PMPI_Wtime(void) { double time; - time = SIMIX_get_clock(); + if (smpi_process_initialized() && !smpi_process_finalized() && !smpi_sample_is_running) { + smpi_bench_end(); + time = SIMIX_get_clock(); + smpi_bench_begin(); + } else { + time = SIMIX_get_clock(); + } return time; } @@ -907,7 +909,7 @@ int PMPI_Comm_split(MPI_Comm comm, int color, int key, MPI_Comm* comm_out) } int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dst, - int tag, MPI_Comm comm, MPI_Request * request) + int tag, MPI_Comm comm, MPI_Request * request) { int retval = 0; @@ -923,12 +925,13 @@ int PMPI_Send_init(void *buf, int count, MPI_Datatype datatype, int dst, retval = MPI_SUCCESS; } smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; return retval; } int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int src, - int tag, MPI_Comm comm, MPI_Request * request) + int tag, MPI_Comm comm, MPI_Request * request) { int retval = 0; @@ -938,33 +941,37 @@ int PMPI_Recv_init(void *buf, int count, MPI_Datatype datatype, int src, } else if (comm == MPI_COMM_NULL) { retval = MPI_ERR_COMM; } else if (src == MPI_PROC_NULL) { - retval = MPI_SUCCESS; + retval = MPI_SUCCESS; } else { *request = smpi_mpi_recv_init(buf, count, datatype, src, tag, comm); retval = MPI_SUCCESS; } smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; return retval; } -int PMPI_Ssend_init(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request* request) { +int PMPI_Ssend_init(void* buf, int count, MPI_Datatype datatype, + int dst, int tag, MPI_Comm comm, MPI_Request* request) +{ int retval = 0; - smpi_bench_end(); - if (request == NULL) { - retval = MPI_ERR_ARG; - } else if (comm == MPI_COMM_NULL) { - retval = MPI_ERR_COMM; - } else if (dst == MPI_PROC_NULL) { - retval = MPI_SUCCESS; - } else { - *request = smpi_mpi_ssend_init(buf, count, datatype, dst, tag, comm); - retval = MPI_SUCCESS; - } - smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; - return retval; + smpi_bench_end(); + if (request == NULL) { + retval = MPI_ERR_ARG; + } else if (comm == MPI_COMM_NULL) { + retval = MPI_ERR_COMM; + } else if (dst == MPI_PROC_NULL) { + retval = MPI_SUCCESS; + } else { + *request = smpi_mpi_ssend_init(buf, count, datatype, dst, tag, comm); + retval = MPI_SUCCESS; + } + smpi_bench_begin(); + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; + return retval; } int PMPI_Start(MPI_Request * request) @@ -1014,7 +1021,7 @@ int PMPI_Request_free(MPI_Request * request) } int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, - int tag, MPI_Comm comm, MPI_Request * request) + int tag, MPI_Comm comm, MPI_Request * request) { int retval = 0; @@ -1040,28 +1047,29 @@ int PMPI_Irecv(void *buf, int count, MPI_Datatype datatype, int src, } else { #ifdef HAVE_TRACING - int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - int src_traced = smpi_group_index(smpi_comm_group(comm), src); - TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, count*smpi_datatype_size(datatype)); + int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; + int src_traced = smpi_group_index(smpi_comm_group(comm), src); + TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, count*smpi_datatype_size(datatype)); #endif *request = smpi_mpi_irecv(buf, count, datatype, src, tag, comm); retval = MPI_SUCCESS; #ifdef HAVE_TRACING - TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); - (*request)->recv = 1; + TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); + (*request)->recv = 1; #endif } smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; return retval; } int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, - int tag, MPI_Comm comm, MPI_Request * request) + int tag, MPI_Comm comm, MPI_Request * request) { int retval = 0; @@ -1086,29 +1094,30 @@ int PMPI_Isend(void *buf, int count, MPI_Datatype datatype, int dst, } else { #ifdef HAVE_TRACING - int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); - int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); - TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); - TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype)); + int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; + int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); + TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); + TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype)); #endif *request = smpi_mpi_isend(buf, count, datatype, dst, tag, comm); retval = MPI_SUCCESS; #ifdef HAVE_TRACING - TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); - (*request)->send = 1; - TRACE_smpi_computing_in(rank); + TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); + (*request)->send = 1; #endif } smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; return retval; } -int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MPI_Comm comm, MPI_Request* request) { +int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, + int dst, int tag, MPI_Comm comm, MPI_Request* request) +{ int retval = 0; smpi_bench_end(); @@ -1132,25 +1141,24 @@ int PMPI_Issend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, M } else { #ifdef HAVE_TRACING - int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); - int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); - TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); - TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype)); + int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; + int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); + TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); + TRACE_smpi_send(rank, rank, dst_traced, count*smpi_datatype_size(datatype)); #endif *request = smpi_mpi_issend(buf, count, datatype, dst, tag, comm); retval = MPI_SUCCESS; #ifdef HAVE_TRACING - TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); - (*request)->send = 1; - TRACE_smpi_computing_in(rank); + TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); + (*request)->send = 1; #endif } smpi_bench_begin(); - if(retval!=MPI_SUCCESS)*request=MPI_REQUEST_NULL; + if (retval != MPI_SUCCESS && request) + *request = MPI_REQUEST_NULL; return retval; } @@ -1180,7 +1188,6 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; int src_traced = smpi_group_index(smpi_comm_group(comm), src); - TRACE_smpi_computing_out(rank); TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, count*smpi_datatype_size(datatype)); #endif @@ -1192,7 +1199,6 @@ int PMPI_Recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, if(status!=MPI_STATUS_IGNORE)src_traced = smpi_group_index(smpi_comm_group(comm), status->MPI_SOURCE); TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); TRACE_smpi_recv(rank, src_traced, rank); - TRACE_smpi_computing_in(rank); #endif } @@ -1225,7 +1231,6 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype)); @@ -1236,7 +1241,6 @@ int PMPI_Send(void *buf, int count, MPI_Datatype datatype, int dst, int tag, #ifdef HAVE_TRACING TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1269,7 +1273,6 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); TRACE_smpi_send(rank, rank, dst_traced,count*smpi_datatype_size(datatype)); @@ -1280,7 +1283,6 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP #ifdef HAVE_TRACING TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1319,7 +1321,6 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int dst_traced = smpi_group_index(smpi_comm_group(comm), dst); int src_traced = smpi_group_index(smpi_comm_group(comm), src); TRACE_smpi_ptp_in(rank, src_traced, dst_traced, __FUNCTION__, sendcount*smpi_datatype_size(sendtype)); @@ -1334,7 +1335,6 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, #ifdef HAVE_TRACING TRACE_smpi_ptp_out(rank, src_traced, dst_traced, __FUNCTION__); TRACE_smpi_recv(rank, src_traced, rank); - TRACE_smpi_computing_in(rank); #endif } @@ -1378,6 +1378,7 @@ int PMPI_Test(MPI_Request * request, int *flag, MPI_Status * status) retval = MPI_ERR_ARG; } else if (*request == MPI_REQUEST_NULL) { *flag= TRUE; + smpi_empty_status(status); retval = MPI_ERR_REQUEST; } else { *flag = smpi_mpi_test(request, status); @@ -1480,7 +1481,6 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status) int rank = request && (*request)->comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int src_traced = (*request)->src; int dst_traced = (*request)->dst; @@ -1502,7 +1502,6 @@ int PMPI_Wait(MPI_Request * request, MPI_Status * status) src_traced; TRACE_smpi_recv(rank, src_traced, dst_traced); } - TRACE_smpi_computing_in(rank); #endif } @@ -1534,7 +1533,6 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta } } int rank_traced = smpi_process_index(); - TRACE_smpi_computing_out(rank_traced); TRACE_smpi_ptp_in(rank_traced, -1, -1, __FUNCTION__,count); @@ -1565,7 +1563,6 @@ int PMPI_Waitany(int count, MPI_Request requests[], int *index, MPI_Status * sta xbt_free(comms); } - TRACE_smpi_computing_in(rank_traced); #endif smpi_bench_begin(); return retval; @@ -1598,7 +1595,6 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[]) } } int rank_traced = smpi_process_index(); - TRACE_smpi_computing_out(rank_traced); TRACE_smpi_ptp_in(rank_traced, -1, -1, __FUNCTION__,count); #endif @@ -1627,7 +1623,6 @@ int PMPI_Waitall(int count, MPI_Request requests[], MPI_Status status[]) xbt_free(valid); xbt_free(comms); - TRACE_smpi_computing_in(rank_traced); #endif smpi_bench_begin(); return retval; @@ -1677,7 +1672,6 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c } else { #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int root_traced = smpi_group_index(smpi_comm_group(comm), root); TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__, count*smpi_datatype_size(datatype)); #endif @@ -1685,7 +1679,6 @@ int PMPI_Bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm c retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1704,14 +1697,12 @@ int PMPI_Barrier(MPI_Comm comm) } else { #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); TRACE_smpi_collective_in(rank, -1, __FUNCTION__, smpi_comm_size(comm)); #endif mpi_coll_barrier_fun(comm); retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, -1, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1746,7 +1737,6 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, } #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int root_traced = smpi_group_index(smpi_comm_group(comm), root); TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,sendcount*smpi_datatype_size(sendtmptype)); #endif @@ -1757,7 +1747,6 @@ int PMPI_Gather(void *sendbuf, int sendcount, MPI_Datatype sendtype, retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1793,7 +1782,6 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int root_traced = smpi_group_index(smpi_comm_group(comm), root); TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,sendcount*smpi_datatype_size(sendtmptype)); #endif @@ -1802,7 +1790,6 @@ int PMPI_Gatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1834,7 +1821,6 @@ int PMPI_Allgather(void *sendbuf, int sendcount, MPI_Datatype sendtype, } #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); TRACE_smpi_collective_in(rank, -1, __FUNCTION__,sendcount*smpi_datatype_size(sendtype)); #endif mpi_coll_allgather_fun(sendbuf, sendcount, sendtype, recvbuf, recvcount, @@ -1875,7 +1861,6 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, } #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); TRACE_smpi_collective_in(rank, -1, __FUNCTION__,sendcount*smpi_datatype_size(sendtype)); #endif mpi_coll_allgatherv_fun(sendbuf, sendcount, sendtype, recvbuf, recvcounts, @@ -1883,7 +1868,6 @@ int PMPI_Allgatherv(void *sendbuf, int sendcount, MPI_Datatype sendtype, retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, -1, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1912,7 +1896,6 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, } #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int root_traced = smpi_group_index(smpi_comm_group(comm), root); TRACE_smpi_collective_in(rank, root_traced, __FUNCTION__,sendcount*smpi_datatype_size(recvtype)); @@ -1922,7 +1905,6 @@ int PMPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype, retval = MPI_SUCCESS; #ifdef HAVE_TRACING TRACE_smpi_collective_out(rank, root_traced, __FUNCTION__); - TRACE_smpi_computing_in(rank); #endif } @@ -1952,7 +1934,6 @@ int PMPI_Scatterv(void *sendbuf, int *sendcounts, int *displs, } #ifdef HAVE_TRACING int rank = comm != MPI_COMM_NULL ? smpi_process_index() : -1; - TRACE_smpi_computing_out(rank); int root_traced = smpi_group_index(smpi_comm_group(comm), root); int count=0, i; for(i=0; i