Browse Source

Add SubmitOrder trace field

Samuel Thibault 7 years ago
parent
commit
2f8e0ab004
6 changed files with 43 additions and 13 deletions
  1. 1 0
      ChangeLog
  2. 1 0
      include/starpu_task.h
  3. 1 1
      src/common/fxt.h
  4. 12 0
      src/core/task.c
  5. 19 8
      src/debug/traces/starpu_fxt.c
  6. 9 4
      src/debug/traces/starpu_paje.c

+ 1 - 0
ChangeLog

@@ -46,6 +46,7 @@ Small features:
   * Add a field starpu_task::where similar to starpu_codelet::where
     which allows to restrict where to execute a task. Also add
     STARPU_TASK_WHERE to be used when calling starpu_task_insert().
+  * Add SubmitOrder trace field.
 
 Changes:
   * Vastly improve simgrid simulation time.

+ 1 - 0
include/starpu_task.h

@@ -165,6 +165,7 @@ struct starpu_task
 	void *prologue_callback_pop_arg;
 
 	starpu_tag_t tag_id;
+	unsigned long submit_order;
 
 	unsigned cl_arg_free:1;
 	unsigned callback_arg_free:1;

+ 1 - 1
src/common/fxt.h

@@ -734,7 +734,7 @@ do {										\
 	FUT_DO_PROBE1(_STARPU_FUT_WORKER_SLEEP_END, _starpu_gettid());
 
 #define _STARPU_TRACE_TASK_SUBMIT(job, iter, subiter)	\
-	FUT_DO_PROBE4(_STARPU_FUT_TASK_SUBMIT, (job)->job_id, iter, subiter, _starpu_gettid());
+	FUT_DO_PROBE5(_STARPU_FUT_TASK_SUBMIT, (job)->job_id, iter, subiter, (job)->task->submit_order, _starpu_gettid());
 
 #define _STARPU_TRACE_TASK_SUBMIT_START()	\
 	FUT_DO_PROBE1(_STARPU_FUT_TASK_SUBMIT_START, _starpu_gettid());

+ 12 - 0
src/core/task.c

@@ -661,9 +661,21 @@ int starpu_task_submit(struct starpu_task *task)
 	}
 
 	if (!j->internal && !continuation)
+	{
+#ifdef STARPU_USE_FXT
+		{
+			static unsigned long submit_order = 0;
+			if (task->submit_order == 0)
+			{
+				task->submit_order = STARPU_ATOMIC_ADDL(&submit_order, 1);
+				STARPU_ASSERT(task->submit_order != ULONG_MAX);
+			}
+		}
+#endif
 		_STARPU_TRACE_TASK_SUBMIT(j,
 			_starpu_get_sched_ctx_struct(task->sched_ctx)->iterations[0],
 			_starpu_get_sched_ctx_struct(task->sched_ctx)->iterations[1]);
+	}
 
 	/* If this is a continuation, we don't modify the implicit data dependencies detected earlier. */
 	if (task->cl && !continuation)

+ 19 - 8
src/debug/traces/starpu_fxt.c

@@ -96,6 +96,7 @@ struct task_info
 	char *name;
 	int exclude_from_dag;
 	unsigned long job_id;
+	unsigned long submit_order;
 	uint64_t tag;
 	int workerid;
 	int node;
@@ -128,6 +129,7 @@ static struct task_info *get_task(unsigned long job_id, int mpi_rank)
 		task->name = NULL;
 		task->exclude_from_dag = 0;
 		task->job_id = job_id;
+		task->submit_order = 0;
 		task->tag = 0;
 		task->workerid = -1;
 		task->node = -1;
@@ -174,6 +176,8 @@ static void task_dump(struct task_info *task)
 		free(task->model_name);
 	}
 	fprintf(tasks_file, "JobId: %lu\n", task->job_id);
+	if (task->submit_order)
+		fprintf(tasks_file, "SubmitOrder: %lu\n", task->submit_order);
 	if (task->dependencies)
 	{
 		fprintf(tasks_file, "DependsOn:");
@@ -852,8 +856,9 @@ static void thread_pop_state(double time, const char *prefix, long unsigned int
 #endif
 }
 
-static void worker_set_detailed_state(double time, const char *prefix, long unsigned int workerid, const char *name, unsigned long size, const char *parameters, unsigned long footprint, unsigned long long tag, unsigned long job_id, double gflop, unsigned X, unsigned Y, unsigned Z, long iteration, long subiteration)
+static void worker_set_detailed_state(double time, const char *prefix, long unsigned int workerid, const char *name, unsigned long size, const char *parameters, unsigned long footprint, unsigned long long tag, unsigned long job_id, double gflop, unsigned X, unsigned Y, unsigned Z, long iteration, long subiteration, struct starpu_fxt_options *options)
 {
+	struct task_info *task = get_task(job_id, options->file_rank);
 #ifdef STARPU_HAVE_POTI
 	char container[STARPU_POTI_STR_LEN];
 	worker_container_alias(container, STARPU_POTI_STR_LEN, prefix, workerid);
@@ -871,6 +876,7 @@ static void worker_set_detailed_state(double time, const char *prefix, long unsi
 	snprintf(footprint_str, sizeof(footprint_str), "%08lx", footprint);
 	snprintf(tag_str, sizeof(tag_str), "%016llx", tag);
 	snprintf(jobid_str, sizeof(jobid_str), "%s%lu", prefix, job_id);
+	snprintf(submitorder_str, sizeof(submitorder_str), "%s%lu", prefix, task->submit_order);
 	snprintf(gflop_str, sizeof(gflop_str), "%f", gflop);
 	snprintf(X_str, sizeof(X_str), "%u", X);
 	snprintf(Y_str, sizeof(Y_str), "%u", Y);
@@ -879,22 +885,23 @@ static void worker_set_detailed_state(double time, const char *prefix, long unsi
 	snprintf(subiteration_str, sizeof(subiteration_str), "%ld", subiteration);
 
 #ifdef HAVE_POTI_INIT_CUSTOM
-	poti_user_SetState(_starpu_poti_extendedSetState, time, container, "WS", name, 11, size_str,
+	poti_user_SetState(_starpu_poti_extendedSetState, time, container, "WS", name, 12, size_str,
 			   parameters_str,
 			   footprint_str,
 			   tag_str,
 			   jobid_str,
+			   submitorder_str,
 			   gflop_str,
 			   X_str,
 			   Y_str,
-			   Z_str,
+			   /* Z_str, */
 			   iteration_str,
 			   subiteration_str);
 #else
 	poti_SetState(time, container, "WS", name);
 #endif
 #else
-	fprintf(out_paje_file, "20	%.9f	%sw%lu	WS	%s	%lu	%s	%08lx	%016llx	%s%lu	%f	%u	%u	%u	%ld	%ld\n", time, prefix, workerid, name, size, parameters, footprint, tag, prefix, job_id, gflop, X, Y, Z, iteration, subiteration);
+	fprintf(out_paje_file, "20	%.9f	%sw%lu	WS	%s	%lu	%s	%08lx	%016llx	%s%lu	%s%lu	%f	%u	%u	"/*"%u	"*/"%ld	%ld\n", time, prefix, workerid, name, size, parameters, footprint, tag, prefix, job_id, prefix, task->submit_order, gflop, X, Y, /*Z,*/ iteration, subiteration);
 #endif
 }
 
@@ -1577,7 +1584,7 @@ static void handle_codelet_details(struct fxt_ev_64 *ev, struct starpu_fxt_optio
 		char *prefix = options->file_prefix;
 		unsigned sched_ctx = ev->param[0];
 
-		worker_set_detailed_state(last_codelet_start[worker], prefix, worker, _starpu_last_codelet_symbol[worker], ev->param[1], parameters, ev->param[2], ev->param[4], job_id, ((double) task->kflops) / 1000000, X, Y, Z, task->iterations[0], task->iterations[1]);
+		worker_set_detailed_state(last_codelet_start[worker], prefix, worker, _starpu_last_codelet_symbol[worker], ev->param[1], parameters, ev->param[2], ev->param[4], job_id, ((double) task->kflops) / 1000000, X, Y, Z, task->iterations[0], task->iterations[1], options);
 		if (sched_ctx != 0)
 		{
 #ifdef STARPU_HAVE_POTI
@@ -1600,18 +1607,20 @@ static void handle_codelet_details(struct fxt_ev_64 *ev, struct starpu_fxt_optio
 			snprintf(footprint_str, sizeof(footprint_str), "%08lx", ev->param[2]);
 			snprintf(tag_str, sizeof(tag_str), "%016lx", ev->param[4]);
 			snprintf(jobid_str, sizeof(jobid_str), "%s%lu", prefix, job_id);
+			snprintf(submitorder_str, sizeof(submitorder_str), "%s%lu", prefix, task->submit_order);
 
 #ifdef HAVE_POTI_INIT_CUSTOM
-			poti_user_SetState(_starpu_poti_semiExtendedSetState, last_codelet_start[worker], container, typectx, name, 5, size_str,
+			poti_user_SetState(_starpu_poti_semiExtendedSetState, last_codelet_start[worker], container, typectx, name, 6, size_str,
 					   parameters_str,
 					   footprint_str,
 					   tag_str,
-					   jobid_str);
+					   jobid_str,
+					   submitorder_str);
 #else
 			poti_SetState(last_codelet_start[worker], container, typectx, name);
 #endif
 #else
-			fprintf(out_paje_file, "21	%.9f	%sw%d	Ctx%u	%s	%ld	%s	%08lx	%016lx	%s%lu\n", last_codelet_start[worker], prefix, worker, sched_ctx, _starpu_last_codelet_symbol[worker], ev->param[1], parameters,  ev->param[2], ev->param[4], prefix, job_id);
+			fprintf(out_paje_file, "21	%.9f	%sw%d	Ctx%u	%s	%ld	%s	%08lx	%016lx	%s%lu	%s%lu\n", last_codelet_start[worker], prefix, worker, sched_ctx, _starpu_last_codelet_symbol[worker], ev->param[1], parameters,  ev->param[2], ev->param[4], prefix, job_id, prefix, task->submit_order);
 #endif
 		}
 	}
@@ -2530,9 +2539,11 @@ static void handle_task_submit(struct fxt_ev_64 *ev, struct starpu_fxt_options *
 	unsigned long job_id = ev->param[0];
 	unsigned long iteration = ev->param[1];
 	unsigned long subiteration = ev->param[2];
+	unsigned long submit_order = ev->param[3];
 
 	struct task_info *task = get_task(job_id, options->file_rank);
 	task->submit_time = get_event_time_stamp(ev, options);
+	task->submit_order = submit_order;
 	task->iterations[0] = iteration;
 	task->iterations[1] = subiteration;
 }

+ 9 - 4
src/debug/traces/starpu_paje.c

@@ -42,19 +42,22 @@ void _starpu_fxt_write_paje_header(FILE *file STARPU_ATTRIBUTE_UNUSED)
 						     "Footprint string",
 						     "Tag string",
 						     "JobId string",
+						     "SubmitOrder string",
 						     "GFlop string",
 						     "X string",
 						     "Y string",
-						     "Z string",
+						     /* "Z string", */
 						     "Iteration string",
 						     "Subiteration string");
 	_starpu_poti_semiExtendedSetState = poti_header_DeclareEvent (PAJE_SetState,
-						     5,
+						     6,
 						     "Size string",
 						     "Params string",
 						     "Footprint string",
 						     "Tag string",
-						     "JobId string");
+						     "JobId string",
+						     "SubmitOrder string"
+						     );
 #else
 	poti_header(1,1);
 #endif
@@ -171,10 +174,11 @@ void _starpu_fxt_write_paje_header(FILE *file STARPU_ATTRIBUTE_UNUSED)
 	fprintf(file, "%%	Footprint	string\n");
 	fprintf(file, "%%	Tag	string\n");
 	fprintf(file, "%%	JobId	string\n");
+	fprintf(file, "%%	SubmitOrder	string\n");
 	fprintf(file, "%%	GFlop	string\n");
 	fprintf(file, "%%	X	string\n");
 	fprintf(file, "%%	Y	string\n");
-	fprintf(file, "%%	Z	string\n");
+	/* fprintf(file, "%%	Z	string\n"); */
 	fprintf(file, "%%	Iteration	string\n");
 	fprintf(file, "%%	Subiteration	string\n");
 	fprintf(file, "%%EndEventDef\n");
@@ -188,6 +192,7 @@ void _starpu_fxt_write_paje_header(FILE *file STARPU_ATTRIBUTE_UNUSED)
 	fprintf(file, "%%	Footprint	string\n");
 	fprintf(file, "%%	Tag	string\n");
 	fprintf(file, "%%	JobId	string\n");
+	fprintf(file, "%%	SubmitOrder	string\n");
 	fprintf(file, "%%EndEventDef\n");
 #endif