ソースを参照

Include the hash and the size in the FxT event associated to each task
beginning.

Cédric Augonnet 14 年 前
コミット
7d8f11e9f5
共有5 個のファイルを変更した39 個の追加19 個の削除を含む
  1. 22 3
      src/common/fxt.h
  2. 1 4
      src/core/perfmodel/perfmodel_history.c
  3. 6 1
      src/datawizard/footprint.c
  4. 1 1
      src/datawizard/footprint.h
  5. 9 10
      src/debug/traces/starpu_fxt.c

+ 22 - 3
src/common/fxt.h

@@ -146,6 +146,22 @@ do {									\
 	sprintf((char *)futargs, "%s", str);				\
 } while (0);
 
+#define STARPU_FUT_DO_PROBE5STR(CODE, P1, P2, P3, P4, P5, str)		\
+do {									\
+	/* we add a \0 just in case ... */				\
+	size_t len = strlen((str)) + 1;					\
+	unsigned nbargs = 5 + (len + sizeof(unsigned long) - 1)/(sizeof(unsigned long));\
+	size_t total_len = FUT_SIZE(nbargs);				\
+	unsigned long *futargs =						\
+		fut_getstampedbuffer(FUT_CODE(CODE, nbargs), total_len);\
+	*(futargs++) = (unsigned long)(P1);				\
+	*(futargs++) = (unsigned long)(P2);				\
+	*(futargs++) = (unsigned long)(P3);				\
+	*(futargs++) = (unsigned long)(P4);				\
+	*(futargs++) = (unsigned long)(P5);				\
+	sprintf((char *)futargs, "%s", str);				\
+} while (0);
+
 
 
 /* workerkind = STARPU_FUT_CPU_KEY for instance */
@@ -160,7 +176,7 @@ do {									\
 
 #define STARPU_TRACE_START_CODELET_BODY(job)				\
 do {									\
-        const char *model_name = _starpu_get_model_name((job));               \
+        const char *model_name = _starpu_get_model_name((job));         \
 	if (model_name)                                                 \
 	{								\
 		/* we include the symbol name */			\
@@ -171,9 +187,12 @@ do {									\
 	}								\
 } while(0);
 
-
 #define STARPU_TRACE_END_CODELET_BODY(job)	\
-	FUT_DO_PROBE2(STARPU_FUT_END_CODELET_BODY, job, syscall(SYS_gettid));
+do {						\
+	const size_t job_size = _starpu_job_get_data_size((job));	\
+	const uint32_t job_hash = _starpu_compute_buffers_footprint(job);\
+	FUT_DO_PROBE4(STARPU_FUT_END_CODELET_BODY, job, (job_size), (job_hash), syscall(SYS_gettid));	\
+} while(0);
 
 #define STARPU_TRACE_START_CALLBACK(job)	\
 	FUT_DO_PROBE2(STARPU_FUT_START_CALLBACK, job, syscall(SYS_gettid));

+ 1 - 4
src/core/perfmodel/perfmodel_history.c

@@ -643,10 +643,7 @@ double _starpu_history_based_job_expected_perf(struct starpu_perfmodel_t *model,
 
 	load_history_based_model(model, 1);
 
-	if (STARPU_UNLIKELY(!j->footprint_is_computed))
-		_starpu_compute_buffers_footprint(j);
-		
-	uint32_t key = j->footprint;
+	uint32_t key = _starpu_compute_buffers_footprint(j);
 
 	per_arch_model = &model->per_arch[arch];
 

+ 6 - 1
src/datawizard/footprint.c

@@ -18,8 +18,11 @@
 #include <datawizard/footprint.h>
 #include <common/hash.h>
 
-void _starpu_compute_buffers_footprint(starpu_job_t j)
+uint32_t _starpu_compute_buffers_footprint(starpu_job_t j)
 {
+	if (j->footprint_is_computed)
+		return j->footprint;
+
 	uint32_t footprint = 0;
 	unsigned buffer;
 
@@ -36,6 +39,8 @@ void _starpu_compute_buffers_footprint(starpu_job_t j)
 
 	j->footprint = footprint;
 	j->footprint_is_computed = 1;
+
+	return footprint;
 }
 
 inline uint32_t _starpu_compute_data_footprint(starpu_data_handle handle)

+ 1 - 1
src/datawizard/footprint.h

@@ -24,7 +24,7 @@
 
 /* Compute the footprint that characterizes the job and cache it into the job
  * structure. */
-void _starpu_compute_buffers_footprint(struct starpu_job_s *j);
+uint32_t _starpu_compute_buffers_footprint(struct starpu_job_s *j);
 
 /* Compute the footprint that characterizes the layout of the data handle. */
 uint32_t _starpu_compute_data_footprint(starpu_data_handle handle);

+ 9 - 10
src/debug/traces/starpu_fxt.c

@@ -79,7 +79,6 @@ static unsigned get_colour_symbol_blue(char *name)
 	return (unsigned)_starpu_crc32_string("blue", hash_symbol) % 1024;
 }
 
-static uint64_t last_codelet_hash[STARPU_NMAXWORKERS];
 static float last_codelet_start[STARPU_NMAXWORKERS];
 static char last_codelet_symbol[128][STARPU_NMAXWORKERS];
 
@@ -330,14 +329,11 @@ static void handle_start_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_op
 
 	char *prefix = options->file_prefix;
 
-	unsigned long has_name = ev->param[2];
-	char *name = has_name?(char *)&ev->param[3]:"unknown";
+	unsigned long has_name = ev->param[4];
+	char *name = has_name?(char *)&ev->param[5]:"unknown";
 
 	snprintf(last_codelet_symbol[worker], 128, "%s", name);
 
-	/* TODO */
-	last_codelet_hash[worker] = 0;
-
 	float start_codelet_time = get_event_time_stamp(ev, options);
 	last_codelet_start[worker] = start_codelet_time;
 
@@ -349,22 +345,25 @@ static void handle_start_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_op
 static void handle_end_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)
 {
 	int worker;
-	worker = find_worker_id(ev->param[1]);
+	worker = find_worker_id(ev->param[3]);
 	if (worker < 0) return;
 
 	char *prefix = options->file_prefix;
 
 	float end_codelet_time = get_event_time_stamp(ev, options);
 
-	fprintf(out_paje_file, "10       %f	S      %s%"PRIu64"      B\n", end_codelet_time, prefix, ev->param[1]);
+	size_t codelet_size = ev->param[1];
+	uint32_t codelet_hash = ev->param[2];
+
+	fprintf(out_paje_file, "10       %f	S      %s%"PRIu64"      B\n", end_codelet_time, prefix, ev->param[3]);
 
 	float codelet_length = (end_codelet_time - last_codelet_start[worker]);
 
 	update_accumulated_time(worker, 0.0, codelet_length, end_codelet_time, 0);
 	
 	if (options->generate_distrib)
-	fprintf(distrib_time, "%s\t%s%d\t%"PRIx64"\t%f\n", last_codelet_symbol[worker],
-				prefix, worker, last_codelet_hash[worker], codelet_length);
+	fprintf(distrib_time, "%s\t%s%d\t%ld\t%"PRIx64"\t%f\n", last_codelet_symbol[worker],
+				prefix, worker, codelet_size, codelet_hash, codelet_length);
 }
 
 static void handle_user_event(struct fxt_ev_64 *ev, struct starpu_fxt_options *options)