Преглед на файлове

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 години
родител
ревизия
5524d2fc31
променени са 4 файла, в които са добавени 46 реда и са изтрити 20 реда
  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);