Procházet zdrojové kódy

move tracing task name to before calling the callback, so the codelet can be freed in the callback

Samuel Thibault před 7 roky
rodič
revize
918fcb1c24

+ 9 - 3
src/common/fxt.h

@@ -101,6 +101,8 @@
 
 #define	_STARPU_FUT_USED_MEM	0x512a
 
+#define _STARPU_FUT_TASK_NAME	0x512b
+
 #define	_STARPU_FUT_START_MEMRECLAIM	0x5131
 #define	_STARPU_FUT_END_MEMRECLAIM	0x5132
 
@@ -653,19 +655,22 @@ do {									\
 #define _STARPU_TRACE_GHOST_TASK_DEPS(ghost_prev_id, job_succ_id)		\
 	FUT_DO_PROBE2(_STARPU_FUT_TASK_DEPS, (ghost_prev_id), (job_succ_id))
 
-#define _STARPU_TRACE_TASK_DONE(job)						\
+#define _STARPU_TRACE_TASK_NAME(job)						\
 do {										\
 	unsigned exclude_from_dag = (job)->exclude_from_dag;			\
         const char *model_name = _starpu_job_get_task_name((job));                       \
 	if (model_name)					                        \
 	{									\
-		_STARPU_FUT_DO_PROBE4STR(_STARPU_FUT_TASK_DONE, (job)->job_id, _starpu_gettid(), (long unsigned)exclude_from_dag, 1, model_name);\
+		_STARPU_FUT_DO_PROBE4STR(_STARPU_FUT_TASK_NAME, (job)->job_id, _starpu_gettid(), (long unsigned)exclude_from_dag, 1, model_name);\
 	}									\
 	else {									\
-		FUT_DO_PROBE4(_STARPU_FUT_TASK_DONE, (job)->job_id, _starpu_gettid(), (long unsigned)exclude_from_dag, 0);\
+		FUT_DO_PROBE4(_STARPU_FUT_TASK_NAME, (job)->job_id, _starpu_gettid(), (long unsigned)exclude_from_dag, 0);\
 	}									\
 } while(0);
 
+#define _STARPU_TRACE_TASK_DONE(job)						\
+	FUT_DO_PROBE2(_STARPU_FUT_TASK_DONE, (job)->job_id, _starpu_gettid())
+
 #define _STARPU_TRACE_TAG_DONE(tag)						\
 do {										\
         struct _starpu_job *job = (tag)->job;                                  \
@@ -1091,6 +1096,7 @@ do {										\
 #define _STARPU_TRACE_TAG_DEPS(a, b)		do {(void)(a); (void)(b);} while(0)
 #define _STARPU_TRACE_TASK_DEPS(a, b)		do {(void)(a); (void)(b);} while(0)
 #define _STARPU_TRACE_GHOST_TASK_DEPS(a, b)	do {(void)(a); (void)(b);} while(0)
+#define _STARPU_TRACE_TASK_NAME(a)		do {(void)(a);} while(0)
 #define _STARPU_TRACE_TASK_DONE(a)		do {(void)(a);} while(0)
 #define _STARPU_TRACE_TAG_DONE(a)		do {(void)(a);} while(0)
 #define _STARPU_TRACE_DATA_NAME(a, b)		do {(void)(a); (void)(b);} while(0)

+ 2 - 0
src/core/jobs.c

@@ -382,6 +382,8 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 			_starpu_spin_unlock(&handle->header_lock);
 	}
 
+	_STARPU_TRACE_TASK_NAME(j);
+
 	/* If this is a continuation, we do not notify task/tag dependencies
 	 * now. Task/tag dependencies will be notified only when the continued
 	 * task fully completes */

+ 18 - 4
src/debug/traces/starpu_fxt.c

@@ -2556,7 +2556,7 @@ static void handle_task_submit(struct fxt_ev_64 *ev, struct starpu_fxt_options *
 	task->iterations[1] = subiteration;
 }
 
-static void handle_task_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+static void handle_task_name(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 {
 	char *prefix = options->file_prefix;
 
@@ -2588,10 +2588,20 @@ static void handle_task_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *op
 	struct task_info *task = get_task(job_id, options->file_rank);
 	task->exclude_from_dag = exclude_from_dag;
 
-	task_dump(task);
-
 	if (!exclude_from_dag)
-		_starpu_fxt_dag_set_task_done(options->file_prefix, job_id, name, colour);
+		_starpu_fxt_dag_set_task_name(options->file_prefix, job_id, name, colour);
+}
+
+static void handle_task_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
+{
+	char *prefix = options->file_prefix;
+
+	unsigned long job_id;
+	job_id = ev->param[0];
+
+	struct task_info *task = get_task(job_id, options->file_rank);
+
+	task_dump(task);
 }
 
 static void handle_tag_done(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
@@ -3330,6 +3340,10 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
 				handle_task_submit_event(&ev, options, ev.param[0], NULL);
 				break;
 
+			case _STARPU_FUT_TASK_NAME:
+				handle_task_name(&ev, options);
+				break;
+
 			case _STARPU_FUT_TASK_DONE:
 				handle_task_done(&ev, options);
 				break;

+ 1 - 1
src/debug/traces/starpu_fxt.h

@@ -46,7 +46,7 @@ void _starpu_fxt_dag_add_tag(const char *prefix, uint64_t tag, unsigned long job
 void _starpu_fxt_dag_add_tag_deps(const char *prefix, uint64_t child, uint64_t father);
 void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *color);
 void _starpu_fxt_dag_add_task_deps(const char *prefix, unsigned long dep_prev, unsigned long dep_succ);
-void _starpu_fxt_dag_set_task_done(const char *prefix, unsigned long job_id, const char *label, const char *color);
+void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color);
 void _starpu_fxt_dag_add_send(int src, unsigned long dep_prev, unsigned long tag, unsigned long id);
 void _starpu_fxt_dag_add_receive(int dst, unsigned long dep_prev, unsigned long tag, unsigned long id);
 void _starpu_fxt_dag_add_sync_point(void);

+ 1 - 1
src/debug/traces/starpu_fxt_dag.c

@@ -91,7 +91,7 @@ void _starpu_fxt_dag_set_tag_done(const char *prefix, uint64_t tag, const char *
 			prefix, (unsigned long long)tag, color);
 }
 
-void _starpu_fxt_dag_set_task_done(const char *prefix, unsigned long job_id, const char *label, const char *color)
+void _starpu_fxt_dag_set_task_name(const char *prefix, unsigned long job_id, const char *label, const char *color)
 {
 	if (out_file)
 		fprintf(out_file, "\t \"task_%s%lu\" [ style=filled, label=\"%s\", fillcolor=\"%s\"]\n", prefix, job_id, label, color);