Przeglądaj źródła

Add a model name field into the job structure to be used by FxT as when the task does not define any codelet

Nathalie Furmento 15 lat temu
rodzic
commit
5524d2fc31
4 zmienionych plików z 46 dodań i 20 usunięć
  1. 13 19
      src/common/fxt.h
  2. 15 0
      src/core/jobs.c
  3. 4 1
      src/core/jobs.h
  4. 14 0
      src/datawizard/user_interactions.c

+ 13 - 19
src/common/fxt.h

@@ -148,16 +148,16 @@ do {									\
 #define STARPU_TRACE_WORKER_INIT_END				\
 	FUT_DO_PROBE1(STARPU_FUT_WORKER_INIT_END, syscall(SYS_gettid));
 
-#define STARPU_TRACE_START_CODELET_BODY(job)					\
+#define STARPU_TRACE_START_CODELET_BODY(job)				\
 do {									\
-	struct starpu_perfmodel_t *model = (job)->task->cl->model;	\
-	if (model && model->symbol)					\
+        char *model_name = _starpu_get_model_name((job));               \
+	if (model_name)                                                 \
 	{								\
 		/* we include the symbol name */			\
-		STARPU_FUT_DO_PROBE3STR(STARPU_FUT_START_CODELET_BODY, job, syscall(SYS_gettid), 1, model->symbol);\
+		STARPU_FUT_DO_PROBE3STR(STARPU_FUT_START_CODELET_BODY, (job), syscall(SYS_gettid), 1, model_name); \
 	}								\
-	else {								\
-		FUT_DO_PROBE3(STARPU_FUT_START_CODELET_BODY, job, syscall(SYS_gettid), 0);\
+	else {                                                          \
+		FUT_DO_PROBE3(STARPU_FUT_START_CODELET_BODY, (job), syscall(SYS_gettid), 0); \
 	}								\
 } while(0);
 
@@ -206,14 +206,11 @@ do {									\
 
 #define STARPU_TRACE_TASK_DONE(job)						\
 do {										\
-	struct starpu_task *task = (job)->task;					\
 	unsigned exclude_from_dag = (job)->exclude_from_dag;			\
-	if (task && task->cl 							\
-		&& task->cl->model						\
-		&& task->cl->model->symbol)					\
+        char *model_name = _starpu_get_model_name((job));                       \
+	if (model_name)					                        \
 	{									\
-		char *symbol = task->cl->model->symbol;				\
-		STARPU_FUT_DO_PROBE4STR(STARPU_FUT_TASK_DONE, (job)->job_id, syscall(SYS_gettid), (long unsigned)exclude_from_dag, 1, symbol);\
+		STARPU_FUT_DO_PROBE4STR(STARPU_FUT_TASK_DONE, (job)->job_id, syscall(SYS_gettid), (long unsigned)exclude_from_dag, 1, model_name);\
 	}									\
 	else {									\
 		FUT_DO_PROBE4(STARPU_FUT_TASK_DONE, (job)->job_id, syscall(SYS_gettid), (long unsigned)exclude_from_dag, 0);\
@@ -222,14 +219,11 @@ do {										\
 
 #define STARPU_TRACE_TAG_DONE(tag)						\
 do {										\
-	struct starpu_job_s *job = (tag)->job;					\
-	if (job && job->task 							\
-		&& job->task->cl						\
-		&& job->task->cl->model						\
-		&& job->task->cl->model->symbol)				\
+        struct starpu_job_s *job = (tag)->job;                                  \
+        char *model_name = _starpu_get_model_name((job));                       \
+	if (model_name)                                                         \
 	{									\
-		char *symbol = job->task->cl->model->symbol;			\
-		STARPU_FUT_DO_PROBE3STR(STARPU_FUT_TAG_DONE, (tag)->id, syscall(SYS_gettid), 1, symbol);\
+          STARPU_FUT_DO_PROBE3STR(STARPU_FUT_TAG_DONE, (tag)->id, syscall(SYS_gettid), 1, model_name); \
 	}									\
 	else {									\
 		FUT_DO_PROBE3(STARPU_FUT_TAG_DONE, (tag)->id, syscall(SYS_gettid), 0);\

+ 15 - 0
src/core/jobs.c

@@ -69,6 +69,7 @@ starpu_job_t __attribute__((malloc)) _starpu_job_create(struct starpu_task *task
 	job->job_id = STARPU_ATOMIC_ADD(&job_cnt, 1);
 	/* display all tasks by default */
 	job->exclude_from_dag = 0;
+        job->model_name = NULL;
 #endif
 
 	_starpu_cg_list_init(&job->job_successors);
@@ -343,3 +344,17 @@ int _starpu_push_local_task(struct starpu_worker_s *worker, struct starpu_job_s
 
 	return 0;
 }
+
+char *_starpu_get_model_name(starpu_job_t j) {
+        struct starpu_task *task = j->task;
+        if (task && task->cl
+            && task->cl->model
+            && task->cl->model->symbol)
+                return task->cl->model->symbol;
+#ifdef STARPU_USE_FXT
+        else {
+                return j->model_name;
+        }
+#endif
+        return NULL;
+}

+ 4 - 1
src/core/jobs.h

@@ -73,7 +73,8 @@ LIST_TYPE(starpu_job,
 
 #ifdef STARPU_USE_FXT
 	unsigned long job_id;
-	unsigned exclude_from_dag;
+        unsigned exclude_from_dag;
+        char *model_name;
 #endif
 );
 
@@ -98,4 +99,6 @@ size_t _starpu_job_get_data_size(starpu_job_t j);
 starpu_job_t _starpu_pop_local_task(struct starpu_worker_s *worker);
 int _starpu_push_local_task(struct starpu_worker_s *worker, starpu_job_t j);
 
+char *_starpu_get_model_name(starpu_job_t j);
+
 #endif // __JOBS_H__

+ 14 - 0
src/datawizard/user_interactions.c

@@ -136,6 +136,13 @@ int starpu_data_acquire_cb(starpu_data_handle handle,
 		wrapper->post_sync_task = starpu_task_create();
 		wrapper->post_sync_task->detach = 1;
 
+#ifdef STARPU_USE_FXT
+                starpu_job_t job = _starpu_get_job_associated_to_task(wrapper->pre_sync_task);
+                job->model_name = "acquire_cb_pre";
+                job = _starpu_get_job_associated_to_task(wrapper->post_sync_task);
+                job->model_name = "acquire_cb_post";
+#endif
+
 		_starpu_detect_implicit_data_deps_with_handle(wrapper->pre_sync_task, wrapper->post_sync_task, handle, mode);
 		PTHREAD_MUTEX_UNLOCK(&handle->sequential_consistency_mutex);
 
@@ -202,6 +209,13 @@ int starpu_data_acquire(starpu_data_handle handle, starpu_access_mode mode)
 		wrapper.post_sync_task = starpu_task_create();
 		wrapper.post_sync_task->detach = 1;
 
+#ifdef STARPU_USE_FXT
+                starpu_job_t job = _starpu_get_job_associated_to_task(wrapper.pre_sync_task);
+                job->model_name = "acquire_pre";
+                job = _starpu_get_job_associated_to_task(wrapper.post_sync_task);
+                job->model_name = "acquire_post";
+#endif
+
 		_starpu_detect_implicit_data_deps_with_handle(wrapper.pre_sync_task, wrapper.post_sync_task, handle, mode);
 		PTHREAD_MUTEX_UNLOCK(&handle->sequential_consistency_mutex);