Browse Source

Merge branch 'master' into mpi_redux-tree

Antoine JEGO 4 years ago
parent
commit
9cc0133363

+ 12 - 0
include/starpu_data.h

@@ -606,6 +606,18 @@ void starpu_data_set_user_data(starpu_data_handle_t handle, void* user_data);
 void *starpu_data_get_user_data(starpu_data_handle_t handle);
 void *starpu_data_get_user_data(starpu_data_handle_t handle);
 
 
 /**
 /**
+   Set the field \c sched_data for the \p handle to \p sched_data . It can
+   then be retrieved with starpu_data_get_sched_data(). \p sched_data can be any
+   scheduler-defined value.
+*/
+void starpu_data_set_sched_data(starpu_data_handle_t handle, void* sched_data);
+
+/**
+   Retrieve the field \c sched_data previously set for the \p handle.
+*/
+void *starpu_data_get_sched_data(starpu_data_handle_t handle);
+
+/**
   Check whether data \p handle can be evicted now from node \p node
   Check whether data \p handle can be evicted now from node \p node
 */
 */
 int starpu_data_can_evict(starpu_data_handle_t handle, unsigned node, enum starpu_is_prefetch is_prefetch);
 int starpu_data_can_evict(starpu_data_handle_t handle, unsigned node, enum starpu_is_prefetch is_prefetch);

+ 4 - 0
src/datawizard/coherency.h

@@ -317,6 +317,10 @@ struct _starpu_data_state
 	/** A generic pointer to data in the user land (could be anything and this
 	/** A generic pointer to data in the user land (could be anything and this
 	 * is not manage by StarPU) */
 	 * is not manage by StarPU) */
 	void *user_data;
 	void *user_data;
+
+	/** A generic pointer to data in the scheduler (could be anything and this
+	 * is managed by the scheduler) */
+	void *sched_data;
 };
 };
 
 
 /** This does not take a reference on the handle, the caller has to do it,
 /** This does not take a reference on the handle, the caller has to do it,

+ 1 - 0
src/datawizard/interfaces/data_interface.c

@@ -542,6 +542,7 @@ int _starpu_data_handle_init(starpu_data_handle_t handle, struct starpu_data_int
 	//handle->coordinates = {};
 	//handle->coordinates = {};
 
 
 	//handle->user_data = NULL;
 	//handle->user_data = NULL;
+	//handle->sched_data = NULL;
 
 
 
 
 	return 0;
 	return 0;

+ 10 - 0
src/datawizard/memalloc.c

@@ -1924,3 +1924,13 @@ void *starpu_data_get_user_data(starpu_data_handle_t handle)
 {
 {
 	return handle->user_data;
 	return handle->user_data;
 }
 }
+
+void starpu_data_set_sched_data(starpu_data_handle_t handle, void* sched_data)
+{
+	handle->sched_data = sched_data;
+}
+
+void *starpu_data_get_sched_data(starpu_data_handle_t handle)
+{
+	return handle->sched_data;
+}

+ 88 - 26
src/debug/traces/starpu_fxt.c

@@ -4786,6 +4786,44 @@ static struct starpu_data_trace_kernel
 	FILE *file;
 	FILE *file;
 } *kernels;
 } *kernels;
 
 
+static struct starpu_data_trace_kernel_job
+{
+	UT_hash_handle hh;
+	int jobid;
+	char *name;
+} *kernel_jobs;
+
+static void record_kernel_job_name(int jobid, char *name)
+{
+	struct starpu_data_trace_kernel_job *kernel_job;
+	HASH_FIND_INT(kernel_jobs, &jobid, kernel_job);
+	if (kernel_job == NULL)
+	{
+		_STARPU_MALLOC(kernel_job, sizeof(*kernel_job));
+		kernel_job->jobid = jobid;
+		HASH_ADD_INT(kernel_jobs, jobid, kernel_job);
+	}
+	else
+	{
+		free(kernel_job->name);
+	}
+	kernel_job->name = strdup(name);
+}
+
+static char *extract_kernel_job_name(int jobid)
+{
+	char *name = NULL;
+	struct starpu_data_trace_kernel_job *kernel_job;
+	HASH_FIND_INT(kernel_jobs, &jobid, kernel_job);
+	if (kernel_job != NULL)
+	{
+		name = kernel_job->name;
+		HASH_DEL(kernel_jobs, kernel_job);
+		free(kernel_job);
+	}
+	return name;
+}
+
 #define NANO_SEC_TO_MILI_SEC 0.000001
 #define NANO_SEC_TO_MILI_SEC 0.000001
 
 
 static FILE *codelet_list;
 static FILE *codelet_list;
@@ -4843,14 +4881,10 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
 	fxt_blockev_t block;
 	fxt_blockev_t block;
 	block = fxt_blockev_enter(fut);
 	block = fxt_blockev_enter(fut);
 
 
-	struct fxt_ev_64 ev;
-
-	int workerid=-1;
-	unsigned long has_name = 0;
-
 	while(1)
 	while(1)
 	{
 	{
 		unsigned i;
 		unsigned i;
+		struct fxt_ev_64 ev;
 		int ret = fxt_next_ev(block, FXT_EV_TYPE_64, (struct fxt_ev *)&ev);
 		int ret = fxt_next_ev(block, FXT_EV_TYPE_64, (struct fxt_ev *)&ev);
 		for (i = ev.nb_params; i < FXT_MAX_PARAMS; i++)
 		for (i = ev.nb_params; i < FXT_MAX_PARAMS; i++)
 			ev.param[i] = 0;
 			ev.param[i] = 0;
@@ -4865,26 +4899,43 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
 			register_worker_id(0 /* TODO: Add nodeid here instead */, ev.param[6], ev.param[1], ev.param[5]);
 			register_worker_id(0 /* TODO: Add nodeid here instead */, ev.param[6], ev.param[1], ev.param[5]);
 			break;
 			break;
 
 
+		case _STARPU_FUT_TASK_NAME:
+			{
+				int jobid = (int)ev.param[0];
+				char *name = get_fxt_string(&ev,2);
+				record_kernel_job_name(jobid, name);
+			}
+			break;
+
 		case _STARPU_FUT_START_CODELET_BODY:
 		case _STARPU_FUT_START_CODELET_BODY:
-			workerid = ev.param[2];
-			tasks[workerid].workerid = (unsigned)workerid;
-			tasks[workerid].exec_time = ev.time;
-			has_name = ev.param[4];
-			free(tasks[workerid].codelet_name);
-			tasks[workerid].codelet_name = strdup(has_name ? get_fxt_string(&ev, 5): "unknown");
-			//fprintf(stderr, "start codelet :[%d][%s]\n", workerid, tasks[workerid].codelet_name);
+			{
+				int workerid = ev.param[2];
+				tasks[workerid].workerid = (unsigned)workerid;
+				tasks[workerid].exec_time = ev.time;
+			}
 			break;
 			break;
 
 
 		case _STARPU_FUT_END_CODELET_BODY:
 		case _STARPU_FUT_END_CODELET_BODY:
-			workerid = ev.param[3];
-			assert(workerid != -1);
-			tasks[workerid].exec_time = ev.time - tasks[workerid].exec_time;
-			write_task(dir, &tasks[workerid]);
+			{
+				int jobid = (int)ev.param[0];
+				int workerid = ev.param[3];
+				assert(workerid != -1);
+				tasks[workerid].exec_time = ev.time - tasks[workerid].exec_time;
+				char *name = extract_kernel_job_name(jobid);
+				if (name == NULL)
+				{
+					name = strdup("unknown");
+				}
+				tasks[workerid].codelet_name = name;
+				write_task(dir, &tasks[workerid]);
+			}
 			break;
 			break;
 
 
 		case _STARPU_FUT_DATA_LOAD:
 		case _STARPU_FUT_DATA_LOAD:
-			workerid = ev.param[0];
-			tasks[workerid].data_total = ev.param[1];
+			{
+				int workerid = ev.param[0];
+				tasks[workerid].data_total = ev.param[1];
+			}
 			break;
 			break;
 
 
 		default:
 		default:
@@ -4922,19 +4973,30 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
 
 
 	free_worker_ids();
 	free_worker_ids();
 
 
-	struct starpu_data_trace_kernel *kernel=NULL, *tmp=NULL;
-	HASH_ITER(hh, kernels, kernel, tmp)
 	{
 	{
-		if(fclose(kernel->file))
+		struct starpu_data_trace_kernel *kernel=NULL, *tmp=NULL;
+		HASH_ITER(hh, kernels, kernel, tmp)
 		{
 		{
-			perror("close failed :");
-			exit(-1);
+			if(fclose(kernel->file))
+			{
+				perror("close failed :");
+				exit(-1);
+			}
+			HASH_DEL(kernels, kernel);
+			free(kernel->name);
+			free(kernel);
 		}
 		}
-		HASH_DEL(kernels, kernel);
-		free(kernel->name);
-		free(kernel);
 	}
 	}
 
 
+	{
+		struct starpu_data_trace_kernel_job *kernel_job=NULL, *tmp=NULL;
+		HASH_ITER(hh, kernel_jobs, kernel_job, tmp)
+		{
+			HASH_DEL(kernel_jobs, kernel_job);
+			free(kernel_job->name);
+			free(kernel_job);
+		}
+	}
 }
 }
 
 
 void starpu_fxt_write_data_trace(char *filename_in)
 void starpu_fxt_write_data_trace(char *filename_in)