Selaa lähdekoodia

Fix gantt chart for starpu_mpi_irecv: it should use the termination time of the request, not the submission time

Samuel Thibault 8 vuotta sitten
vanhempi
commit
a3b0152013
3 muutettua tiedostoa jossa 31 lisäystä ja 12 poistoa
  1. 1 0
      mpi/src/starpu_mpi.c
  2. 6 0
      mpi/src/starpu_mpi_fxt.h
  3. 24 12
      src/debug/traces/starpu_fxt.c

+ 1 - 0
mpi/src/starpu_mpi.c

@@ -1065,6 +1065,7 @@ static void _starpu_mpi_handle_request_termination(struct _starpu_mpi_req *req)
 				_starpu_mpi_datatype_free(req->data_handle, &req->datatype);
 				_starpu_mpi_datatype_free(req->data_handle, &req->datatype);
 			}
 			}
 		}
 		}
+		_STARPU_MPI_TRACE_TERMINATED(req, req->node_tag.rank, req->node_tag.data_tag);
 	}
 	}
 
 
 	if (req->data_handle)
 	if (req->data_handle)

+ 6 - 0
mpi/src/starpu_mpi_fxt.h

@@ -46,6 +46,8 @@ extern "C" {
 #define _STARPU_MPI_FUT_UWAIT_BEGIN			0x5218
 #define _STARPU_MPI_FUT_UWAIT_BEGIN			0x5218
 #define _STARPU_MPI_FUT_UWAIT_END			0x5219
 #define _STARPU_MPI_FUT_UWAIT_END			0x5219
 #define _STARPU_MPI_FUT_DATA_SET_RANK			0x521a
 #define _STARPU_MPI_FUT_DATA_SET_RANK			0x521a
+#define _STARPU_MPI_FUT_IRECV_TERMINATED		0x521b
+#define _STARPU_MPI_FUT_ISEND_TERMINATED		0x521c
 
 
 #ifdef STARPU_USE_FXT
 #ifdef STARPU_USE_FXT
 #define _STARPU_MPI_TRACE_START(rank, worldsize)	\
 #define _STARPU_MPI_TRACE_START(rank, worldsize)	\
@@ -74,6 +76,9 @@ extern "C" {
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_IRECV_COMPLETE_END, (src), (mpi_tag), _starpu_gettid());
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_IRECV_COMPLETE_END, (src), (mpi_tag), _starpu_gettid());
 #define _STARPU_MPI_TRACE_COMPLETE_END(type, rank, mpi_tag)		\
 #define _STARPU_MPI_TRACE_COMPLETE_END(type, rank, mpi_tag)		\
 	if (type == RECV_REQ) { _STARPU_MPI_TRACE_IRECV_COMPLETE_END((rank), (mpi_tag)); } else if (type == SEND_REQ) { _STARPU_MPI_TRACE_ISEND_COMPLETE_END((rank), (mpi_tag), 0); }
 	if (type == RECV_REQ) { _STARPU_MPI_TRACE_IRECV_COMPLETE_END((rank), (mpi_tag)); } else if (type == SEND_REQ) { _STARPU_MPI_TRACE_ISEND_COMPLETE_END((rank), (mpi_tag), 0); }
+#define _STARPU_MPI_TRACE_TERMINATED(req, rank, mpi_tag)		\
+	if ((req)->request_type == RECV_REQ) FUT_DO_PROBE3(_STARPU_MPI_FUT_IRECV_TERMINATED, (rank), (mpi_tag), _starpu_gettid()); else \
+	if ((req)->request_type == SEND_REQ) FUT_DO_PROBE3(_STARPU_MPI_FUT_ISEND_TERMINATED, (rank), (mpi_tag), _starpu_gettid());
 #define _STARPU_MPI_TRACE_SLEEP_BEGIN()	\
 #define _STARPU_MPI_TRACE_SLEEP_BEGIN()	\
 	FUT_DO_PROBE1(_STARPU_MPI_FUT_SLEEP_BEGIN, _starpu_gettid());
 	FUT_DO_PROBE1(_STARPU_MPI_FUT_SLEEP_BEGIN, _starpu_gettid());
 #define _STARPU_MPI_TRACE_SLEEP_END()	\
 #define _STARPU_MPI_TRACE_SLEEP_END()	\
@@ -104,6 +109,7 @@ extern "C" {
 #define _STARPU_MPI_TRACE_ISEND_COMPLETE_BEGIN(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_ISEND_COMPLETE_BEGIN(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_COMPLETE_BEGIN(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_COMPLETE_BEGIN(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_COMPLETE_END(a, b, c)			do {} while(0);
 #define _STARPU_MPI_TRACE_COMPLETE_END(a, b, c)			do {} while(0);
+#define _STARPU_MPI_TRACE_TERMINATED(a, b, c)			do {} while(0);
 #define _STARPU_MPI_TRACE_ISEND_COMPLETE_END(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_ISEND_COMPLETE_END(a, b, c)		do {} while(0);
 #define _STARPU_MPI_TRACE_IRECV_COMPLETE_BEGIN(a, b)		do {} while(0);
 #define _STARPU_MPI_TRACE_IRECV_COMPLETE_BEGIN(a, b)		do {} while(0);
 #define _STARPU_MPI_TRACE_IRECV_COMPLETE_END(a, b)		do {} while(0);
 #define _STARPU_MPI_TRACE_IRECV_COMPLETE_END(a, b)		do {} while(0);

+ 24 - 12
src/debug/traces/starpu_fxt.c

@@ -2540,14 +2540,29 @@ static void handle_mpi_isend_complete_end(struct fxt_ev_64 *ev, struct starpu_fx
 
 
 static void handle_mpi_irecv_complete_begin(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 static void handle_mpi_irecv_complete_begin(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 {
 {
-	int src = ev->param[0];
-	int mpi_tag = ev->param[1];
 	double date = get_event_time_stamp(ev, options);
 	double date = get_event_time_stamp(ev, options);
 
 
 	if (out_paje_file)
 	if (out_paje_file)
 		mpicommthread_set_state(date, options->file_prefix, "RvC");
 		mpicommthread_set_state(date, options->file_prefix, "RvC");
 	if (trace_file)
 	if (trace_file)
 		recfmt_mpicommthread_set_state(date, "RvC");
 		recfmt_mpicommthread_set_state(date, "RvC");
+}
+
+static void handle_mpi_irecv_complete_end(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	double date = get_event_time_stamp(ev, options);
+
+	if (out_paje_file)
+		mpicommthread_set_state(date, options->file_prefix, "P");
+	if (trace_file)
+		recfmt_mpicommthread_set_state(date, "P");
+}
+
+static void handle_mpi_irecv_terminated(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	int src = ev->param[0];
+	int mpi_tag = ev->param[1];
+	double date = get_event_time_stamp(ev, options);
 
 
 	if (options->file_rank < 0)
 	if (options->file_rank < 0)
 	{
 	{
@@ -2561,16 +2576,6 @@ static void handle_mpi_irecv_complete_begin(struct fxt_ev_64 *ev, struct starpu_
 		_starpu_fxt_mpi_add_recv_transfer(src, options->file_rank, mpi_tag, date);
 		_starpu_fxt_mpi_add_recv_transfer(src, options->file_rank, mpi_tag, date);
 }
 }
 
 
-static void handle_mpi_irecv_complete_end(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
-{
-	double date = get_event_time_stamp(ev, options);
-
-	if (out_paje_file)
-		mpicommthread_set_state(date, options->file_prefix, "P");
-	if (trace_file)
-		recfmt_mpicommthread_set_state(date, "P");
-}
-
 static void handle_mpi_sleep_begin(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 static void handle_mpi_sleep_begin(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 {
 {
 	double date = get_event_time_stamp(ev, options);
 	double date = get_event_time_stamp(ev, options);
@@ -3220,6 +3225,13 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
 				handle_mpi_irecv_complete_end(&ev, options);
 				handle_mpi_irecv_complete_end(&ev, options);
 				break;
 				break;
 
 
+			case _STARPU_MPI_FUT_ISEND_TERMINATED:
+				break;
+
+			case _STARPU_MPI_FUT_IRECV_TERMINATED:
+				handle_mpi_irecv_terminated(&ev, options);
+				break;
+
 			case _STARPU_MPI_FUT_SLEEP_BEGIN:
 			case _STARPU_MPI_FUT_SLEEP_BEGIN:
 				handle_mpi_sleep_begin(&ev, options);
 				handle_mpi_sleep_begin(&ev, options);
 				break;
 				break;