Explorar o código

Add task submission time to trace

Samuel Thibault %!s(int64=10) %!d(string=hai) anos
pai
achega
1ae6a139e0
Modificáronse 3 ficheiros con 28 adicións e 3 borrados
  1. 6 0
      src/common/fxt.h
  2. 3 0
      src/core/task.c
  3. 19 3
      src/debug/traces/starpu_fxt.c

+ 6 - 0
src/common/fxt.h

@@ -71,6 +71,8 @@
 #define _STARPU_FUT_WORKER_SLEEP_START	0x5118
 #define _STARPU_FUT_WORKER_SLEEP_END	0x5119
 
+#define _STARPU_FUT_TASK_SUBMIT		0x511a
+
 #define _STARPU_FUT_USER_DEFINED_START	0x5120
 #define _STARPU_FUT_USER_DEFINED_END	0x5121
 
@@ -573,6 +575,9 @@ do {										\
 #define _STARPU_TRACE_WORKER_SLEEP_END	\
 	FUT_DO_PROBE1(_STARPU_FUT_WORKER_SLEEP_END, _starpu_gettid());
 
+#define _STARPU_TRACE_TASK_SUBMIT(job)	\
+	FUT_DO_PROBE2(_STARPU_FUT_TASK_SUBMIT, (job)->job_id, _starpu_gettid());
+
 #define _STARPU_TRACE_USER_DEFINED_START	\
 	FUT_DO_PROBE1(_STARPU_FUT_USER_DEFINED_START, _starpu_gettid());
 
@@ -862,6 +867,7 @@ do {										\
 #define _STARPU_TRACE_WORKER_SCHEDULING_POP		do {} while(0)
 #define _STARPU_TRACE_WORKER_SLEEP_START		do {} while(0)
 #define _STARPU_TRACE_WORKER_SLEEP_END		do {} while(0)
+#define _STARPU_TRACE_TASK_SUBMIT(job)		do {} while(0)
 #define _STARPU_TRACE_USER_DEFINED_START		do {} while(0)
 #define _STARPU_TRACE_USER_DEFINED_END		do {} while(0)
 #define _STARPU_TRACE_START_ALLOC(memnode, size)	do {} while(0)

+ 3 - 0
src/core/task.c

@@ -619,6 +619,9 @@ int starpu_task_submit(struct starpu_task *task)
 	if (ret)
 		return ret;
 
+	if (!j->internal && !continuation)
+		_STARPU_TRACE_TASK_SUBMIT(j);
+
 	/* If this is a continuation, we don't modify the implicit data dependencies detected earlier. */
 	if (task->cl && !continuation)
 		_starpu_detect_implicit_data_deps(task);

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

@@ -58,7 +58,7 @@ struct task_info {
 	unsigned long job_id;
 	uint64_t tag;
 	int workerid;
-	/* TODO: double submit_time; */
+	double submit_time;
 	double start_time;
 	double end_time;
 	unsigned long footprint;
@@ -83,7 +83,7 @@ static struct task_info *get_task(unsigned long job_id)
 		task->job_id = job_id;
 		task->tag = 0;
 		task->workerid = -1;
-		/* task->submit_time = 0.; */
+		task->submit_time = 0.;
 		task->start_time = 0.;
 		task->end_time = 0.;
 		task->footprint = 0;
@@ -1406,6 +1406,17 @@ static void handle_task_deps(struct fxt_ev_64 *ev)
 	_starpu_fxt_dag_add_task_deps(dep_prev, dep_succ);
 }
 
+static void handle_task_submit(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	unsigned long job_id;
+	job_id = ev->param[0];
+
+        int worker;
+        worker = find_worker_id(ev->param[1]);
+
+	get_task(job_id)->submit_time = get_event_time_stamp(ev, options);
+}
+
 static void handle_task_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 {
 	unsigned long job_id;
@@ -1772,7 +1783,8 @@ void tasks_output(char *filename_out)
 			fprintf(f, "Tag: %"PRIx64"\n", task->tag);
 			if (task->workerid >= 0)
 				fprintf(f, "WorkerId: %d\n", task->workerid);
-			/* fprintf(f, "SubmitTime: %f\n", task->submit_time); */
+			if (task->start_time != 0.)
+				fprintf(f, "SubmitTime: %f\n", task->submit_time);
 			if (task->start_time != 0.)
 				fprintf(f, "StartTime: %f\n", task->start_time);
 			if (task->end_time != 0.)
@@ -1977,6 +1989,10 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
 				handle_task_deps(&ev);
 				break;
 
+			case _STARPU_FUT_TASK_SUBMIT:
+				handle_task_submit(&ev, options);
+				break;
+
 			case _STARPU_FUT_TASK_DONE:
 				handle_task_done(&ev, options);
 				break;