Browse Source

Show data MPI owner in data.rec

Samuel Thibault 8 years ago
parent
commit
1c90a1af65
3 changed files with 23 additions and 1 deletions
  1. 1 0
      mpi/src/starpu_mpi.c
  2. 5 1
      mpi/src/starpu_mpi_fxt.h
  3. 17 0
      src/debug/traces/starpu_fxt.c

+ 1 - 0
mpi/src/starpu_mpi.c

@@ -1712,6 +1712,7 @@ void starpu_mpi_data_register_comm(starpu_data_handle_t data_handle, int tag, in
 	}
 	}
 	if (rank != -1)
 	if (rank != -1)
 	{
 	{
+		_STARPU_MPI_TRACE_DATA_SET_RANK(data_handle, rank);
 		mpi_data->node_tag.rank = rank;
 		mpi_data->node_tag.rank = rank;
 		mpi_data->node_tag.comm = comm;
 		mpi_data->node_tag.comm = comm;
 		_starpu_mpi_comm_register(comm);
 		_starpu_mpi_comm_register(comm);

+ 5 - 1
mpi/src/starpu_mpi_fxt.h

@@ -1,6 +1,6 @@
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
 /* StarPU --- Runtime system for heterogeneous multicore architectures.
  *
  *
- * Copyright (C) 2010  Université de Bordeaux
+ * Copyright (C) 2010, 2017  Université de Bordeaux
  * Copyright (C) 2010, 2012, 2016  CNRS
  * Copyright (C) 2010, 2012, 2016  CNRS
  *
  *
  * StarPU is free software; you can redistribute it and/or modify
  * StarPU is free software; you can redistribute it and/or modify
@@ -45,6 +45,7 @@ extern "C" {
 #define _STARPU_MPI_FUT_UTESTING_END			0x5217
 #define _STARPU_MPI_FUT_UTESTING_END			0x5217
 #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
 
 
 #ifdef STARPU_USE_FXT
 #ifdef STARPU_USE_FXT
 #define _STARPU_MPI_TRACE_START(rank, worldsize)	\
 #define _STARPU_MPI_TRACE_START(rank, worldsize)	\
@@ -89,6 +90,8 @@ extern "C" {
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_UWAIT_BEGIN, (src), (mpi_tag),  _starpu_gettid());
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_UWAIT_BEGIN, (src), (mpi_tag),  _starpu_gettid());
 #define _STARPU_MPI_TRACE_UWAIT_END(src, mpi_tag)	\
 #define _STARPU_MPI_TRACE_UWAIT_END(src, mpi_tag)	\
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_UWAIT_END, (src), (mpi_tag), _starpu_gettid());
 	FUT_DO_PROBE3(_STARPU_MPI_FUT_UWAIT_END, (src), (mpi_tag), _starpu_gettid());
+#define _STARPU_MPI_TRACE_DATA_SET_RANK(handle, rank)	\
+	FUT_DO_PROBE3(_STARPU_MPI_FUT_DATA_SET_RANK, (handle), (rank), _starpu_gettid());
 #define TRACE
 #define TRACE
 #else
 #else
 #define _STARPU_MPI_TRACE_START(a, b)				do {} while(0);
 #define _STARPU_MPI_TRACE_START(a, b)				do {} while(0);
@@ -112,6 +115,7 @@ extern "C" {
 #define _STARPU_MPI_TRACE_UTESTING_END(a, b)			do {} while(0);
 #define _STARPU_MPI_TRACE_UTESTING_END(a, b)			do {} while(0);
 #define _STARPU_MPI_TRACE_UWAIT_BEGIN(a, b)			do {} while(0);
 #define _STARPU_MPI_TRACE_UWAIT_BEGIN(a, b)			do {} while(0);
 #define _STARPU_MPI_TRACE_UWAIT_END(a, b)			do {} while(0);
 #define _STARPU_MPI_TRACE_UWAIT_END(a, b)			do {} while(0);
+#define _STARPU_MPI_TRACE_DATA_SET_RANK(a, b)			do {} while(0);
 #endif
 #endif
 
 
 #ifdef __cplusplus
 #ifdef __cplusplus

+ 17 - 0
src/debug/traces/starpu_fxt.c

@@ -235,6 +235,7 @@ struct data_info {
 	unsigned dimensions;
 	unsigned dimensions;
 	unsigned long *dims;
 	unsigned long *dims;
 	int mpi_rank;
 	int mpi_rank;
+	int mpi_owner;
 };
 };
 
 
 struct data_info *data_info;
 struct data_info *data_info;
@@ -252,6 +253,7 @@ static struct data_info *get_data(unsigned long handle, int mpi_rank)
 		data->dimensions = 0;
 		data->dimensions = 0;
 		data->dims = NULL;
 		data->dims = NULL;
 		data->mpi_rank = mpi_rank;
 		data->mpi_rank = mpi_rank;
+		data->mpi_owner = mpi_rank;
 		HASH_ADD(hh, data_info, handle, sizeof(handle), data);
 		HASH_ADD(hh, data_info, handle, sizeof(handle), data);
 	} else
 	} else
 		STARPU_ASSERT(data->mpi_rank == mpi_rank);
 		STARPU_ASSERT(data->mpi_rank == mpi_rank);
@@ -262,6 +264,7 @@ static struct data_info *get_data(unsigned long handle, int mpi_rank)
 static void data_dump(struct data_info *data)
 static void data_dump(struct data_info *data)
 {
 {
 	fprintf(data_file, "Handle: %lx\n", data->handle);
 	fprintf(data_file, "Handle: %lx\n", data->handle);
+	fprintf(data_file, "MPIRank: %d\n", data->mpi_rank);
 	if (data->name)
 	if (data->name)
 	{
 	{
 		fprintf(data_file, "Name: %s\n", data->name);
 		fprintf(data_file, "Name: %s\n", data->name);
@@ -275,6 +278,7 @@ static void data_dump(struct data_info *data)
 			fprintf(data_file, " %lu", data->dims[i]);
 			fprintf(data_file, " %lu", data->dims[i]);
 		fprintf(data_file, "\n");
 		fprintf(data_file, "\n");
 	}
 	}
+	fprintf(data_file, "MPIOwner: %d\n", data->mpi_owner);
 	fprintf(data_file, "\n");
 	fprintf(data_file, "\n");
 	HASH_DEL(data_info, data);
 	HASH_DEL(data_info, data);
 	free(data);
 	free(data);
@@ -1881,6 +1885,15 @@ static void handle_data_coordinates(struct fxt_ev_64 *ev, struct starpu_fxt_opti
 		data->dims[i] = ev->param[i+2];
 		data->dims[i] = ev->param[i+2];
 }
 }
 
 
+static void handle_mpi_data_set_rank(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	unsigned long handle = ev->param[0];
+	unsigned long rank = ev->param[1];
+	struct data_info *data = get_data(handle, options->file_rank);
+
+	data->mpi_owner = rank;
+}
+
 static const char *copy_link_type(unsigned prefetch)
 static const char *copy_link_type(unsigned prefetch)
 {
 {
 	switch (prefetch)
 	switch (prefetch)
@@ -3234,6 +3247,10 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
 				handle_mpi_uwait_end(&ev, options);
 				handle_mpi_uwait_end(&ev, options);
 				break;
 				break;
 
 
+			case _STARPU_MPI_FUT_DATA_SET_RANK:
+				handle_mpi_data_set_rank(&ev, options);
+				break;
+
 			case _STARPU_FUT_SET_PROFILING:
 			case _STARPU_FUT_SET_PROFILING:
 				handle_set_profiling(&ev, options);
 				handle_set_profiling(&ev, options);
 				break;
 				break;