|
|
@@ -198,15 +198,9 @@ static void task_dump(struct task_info *task, struct starpu_fxt_options *options
|
|
|
goto out;
|
|
|
|
|
|
if (task->name)
|
|
|
- {
|
|
|
fprintf(tasks_file, "Name: %s\n", task->name);
|
|
|
- free(task->name);
|
|
|
- }
|
|
|
if (task->model_name)
|
|
|
- {
|
|
|
fprintf(tasks_file, "Model: %s\n", task->model_name);
|
|
|
- free(task->model_name);
|
|
|
- }
|
|
|
fprintf(tasks_file, "JobId: %s%lu\n", prefix, task->job_id);
|
|
|
if (task->submit_order)
|
|
|
fprintf(tasks_file, "SubmitOrder: %lu\n", task->submit_order);
|
|
|
@@ -217,18 +211,13 @@ static void task_dump(struct task_info *task, struct starpu_fxt_options *options
|
|
|
for (i = 0; i < task->ndeps; i++)
|
|
|
fprintf(tasks_file, " %s%lu", prefix, task->dependencies[i]);
|
|
|
fprintf(tasks_file, "\n");
|
|
|
- free(task->dependencies);
|
|
|
}
|
|
|
if (task->dep_labels)
|
|
|
{
|
|
|
fprintf(tasks_file, "DepLabels:");
|
|
|
for (i = 0; i < task->ndeps; i++)
|
|
|
- {
|
|
|
fprintf(tasks_file, " %s", task->dep_labels[i]);
|
|
|
- free(task->dep_labels[i]);
|
|
|
- }
|
|
|
fprintf(tasks_file, "\n");
|
|
|
- free(task->dep_labels);
|
|
|
}
|
|
|
fprintf(tasks_file, "Tag: %"PRIx64"\n", task->tag);
|
|
|
if (task->workerid >= 0)
|
|
|
@@ -256,10 +245,7 @@ static void task_dump(struct task_info *task, struct starpu_fxt_options *options
|
|
|
fprintf(tasks_file, "\n");
|
|
|
}
|
|
|
if (task->parameters)
|
|
|
- {
|
|
|
fprintf(tasks_file, "Parameters: %s\n", task->parameters);
|
|
|
- free(task->parameters);
|
|
|
- }
|
|
|
if (task->data)
|
|
|
{
|
|
|
fprintf(tasks_file, "Handles:");
|
|
|
@@ -279,12 +265,22 @@ static void task_dump(struct task_info *task, struct starpu_fxt_options *options
|
|
|
for (i = 0; i < task->ndata; i++)
|
|
|
fprintf(tasks_file, " %lu", task->data[i].size);
|
|
|
fprintf(tasks_file, "\n");
|
|
|
- free(task->data);
|
|
|
}
|
|
|
fprintf(tasks_file, "MPIRank: %d\n", task->mpi_rank);
|
|
|
fprintf(tasks_file, "\n");
|
|
|
|
|
|
out:
|
|
|
+ free(task->name);
|
|
|
+ free(task->model_name);
|
|
|
+ free(task->dependencies);
|
|
|
+ if (task->dep_labels)
|
|
|
+ {
|
|
|
+ for (i = 0; i < task->ndeps; i++)
|
|
|
+ free(task->dep_labels[i]);
|
|
|
+ free(task->dep_labels);
|
|
|
+ }
|
|
|
+ free(task->parameters);
|
|
|
+ free(task->data);
|
|
|
HASH_DEL(tasks_info, task);
|
|
|
free(task);
|
|
|
}
|
|
|
@@ -363,18 +359,12 @@ static void data_dump(struct data_info *data)
|
|
|
if (data->mpi_rank >= 0)
|
|
|
fprintf(data_file, "MPIRank: %d\n", data->mpi_rank);
|
|
|
if (data->name)
|
|
|
- {
|
|
|
fprintf(data_file, "Name: %s\n", data->name);
|
|
|
- free(data->name);
|
|
|
- }
|
|
|
fprintf(data_file, "Size: %lu\n", (unsigned long) data->size);
|
|
|
if (data->max_size != -1)
|
|
|
fprintf(data_file, "MaxSize: %lu\n", (unsigned long) data->max_size);
|
|
|
if (data->description)
|
|
|
- {
|
|
|
fprintf(data_file, "Description: %s\n", data->description);
|
|
|
- free(data->description);
|
|
|
- }
|
|
|
if (data->dimensions)
|
|
|
{
|
|
|
unsigned i;
|
|
|
@@ -389,6 +379,9 @@ static void data_dump(struct data_info *data)
|
|
|
fprintf(data_file, "MPITag: %ld\n", data->mpi_tag);
|
|
|
fprintf(data_file, "\n");
|
|
|
out:
|
|
|
+ free(data->dims);
|
|
|
+ free(data->description);
|
|
|
+ free(data->name);
|
|
|
HASH_DEL(data_info, data);
|
|
|
free(data);
|
|
|
}
|
|
|
@@ -669,6 +662,16 @@ static int register_thread(unsigned long nodeid, unsigned long tid, int workerid
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+static void free_worker_ids(void)
|
|
|
+{
|
|
|
+ struct worker_entry *entry, *tmp;
|
|
|
+ HASH_ITER(hh, worker_ids, entry, tmp)
|
|
|
+ {
|
|
|
+ HASH_DEL(worker_ids, entry);
|
|
|
+ free(entry);
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
static int register_worker_id(unsigned long nodeid, unsigned long tid, int workerid, int sync)
|
|
|
{
|
|
|
nworkers++;
|
|
|
@@ -1540,8 +1543,9 @@ static void handle_start_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_op
|
|
|
|
|
|
if (worker < 0) return;
|
|
|
|
|
|
- unsigned long has_name = ev->param[4];
|
|
|
- char *name = has_name?get_fxt_string(ev, 5):"unknown";
|
|
|
+ struct task_info *task = get_task(ev->param[0], options->file_rank);
|
|
|
+ char *name = task->name;
|
|
|
+ create_paje_state_if_not_found(name, task->color, options);
|
|
|
|
|
|
snprintf(_starpu_last_codelet_symbol[worker], sizeof(_starpu_last_codelet_symbol[worker]), "%.*s", (int) sizeof(_starpu_last_codelet_symbol[worker])-1, name);
|
|
|
_starpu_last_codelet_symbol[worker][sizeof(_starpu_last_codelet_symbol[worker])-1] = 0;
|
|
|
@@ -1551,12 +1555,8 @@ static void handle_start_codelet_body(struct fxt_ev_64 *ev, struct starpu_fxt_op
|
|
|
double last_start_codelet_time = last_codelet_start[worker];
|
|
|
last_codelet_start[worker] = start_codelet_time;
|
|
|
|
|
|
- struct task_info *task = get_task(ev->param[0], options->file_rank);
|
|
|
- create_paje_state_if_not_found(name, task->color, options);
|
|
|
-
|
|
|
task->start_time = start_codelet_time;
|
|
|
task->workerid = worker;
|
|
|
- task->name = strdup(name);
|
|
|
task->node = node;
|
|
|
|
|
|
if (out_paje_file)
|
|
|
@@ -4251,6 +4251,22 @@ void _starpu_fxt_parse_new_file(char *filename_in, struct starpu_fxt_options *op
|
|
|
for (i = 0; i < STARPU_NMAXWORKERS; i++)
|
|
|
free(options->worker_archtypes[i].devices);
|
|
|
|
|
|
+ struct _starpu_symbol_name *itor, *next;
|
|
|
+ for (itor = _starpu_symbol_name_list_begin(&symbol_list);
|
|
|
+ itor != _starpu_symbol_name_list_end(&symbol_list);
|
|
|
+ itor = next)
|
|
|
+ {
|
|
|
+ next = _starpu_symbol_name_list_next(itor);
|
|
|
+
|
|
|
+ _starpu_symbol_name_list_erase(&symbol_list, itor);
|
|
|
+ free(itor->name);
|
|
|
+ _starpu_symbol_name_delete(itor);
|
|
|
+ }
|
|
|
+
|
|
|
+ _starpu_fxt_component_deinit();
|
|
|
+
|
|
|
+ free_worker_ids();
|
|
|
+
|
|
|
#ifdef HAVE_FXT_BLOCKEV_LEAVE
|
|
|
fxt_blockev_leave(block);
|
|
|
#endif
|
|
|
@@ -4877,10 +4893,10 @@ struct starpu_data_trace_kernel
|
|
|
|
|
|
static FILE *codelet_list;
|
|
|
|
|
|
-static void write_task(char *dir, struct parse_task pt)
|
|
|
+static void write_task(char *dir, struct parse_task *pt)
|
|
|
{
|
|
|
struct starpu_data_trace_kernel *kernel;
|
|
|
- char *codelet_name = pt.codelet_name;
|
|
|
+ char *codelet_name = pt->codelet_name;
|
|
|
HASH_FIND_STR(kernels, codelet_name, kernel);
|
|
|
//fprintf(stderr, "%p %p %s\n", kernel, kernels, codelet_name);
|
|
|
if(kernel == NULL)
|
|
|
@@ -4898,8 +4914,8 @@ static void write_task(char *dir, struct parse_task pt)
|
|
|
HASH_ADD_STR(kernels, name, kernel);
|
|
|
fprintf(codelet_list, "%s\n", codelet_name);
|
|
|
}
|
|
|
- double time = pt.exec_time * NANO_SEC_TO_MILI_SEC;
|
|
|
- fprintf(kernel->file, "%lf %u %u\n", time, pt.data_total, pt.workerid);
|
|
|
+ double time = pt->exec_time * NANO_SEC_TO_MILI_SEC;
|
|
|
+ fprintf(kernel->file, "%lf %u %u\n", time, pt->data_total, pt->workerid);
|
|
|
}
|
|
|
|
|
|
void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
|
|
|
@@ -4957,6 +4973,7 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
|
|
|
tasks[workerid].workerid = (unsigned)workerid;
|
|
|
tasks[workerid].exec_time = ev.time;
|
|
|
has_name = ev.param[4];
|
|
|
+ free(tasks[workerid].codelet_name);
|
|
|
tasks[workerid].codelet_name = strdup(has_name ? get_fxt_string(&ev, 5): "unknown");
|
|
|
//fprintf(stderr, "start codelet :[%d][%s]\n", workerid, tasks[workerid].codelet_name);
|
|
|
break;
|
|
|
@@ -4965,7 +4982,7 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
|
|
|
workerid = ev.param[3];
|
|
|
assert(workerid != -1);
|
|
|
tasks[workerid].exec_time = ev.time - tasks[workerid].exec_time;
|
|
|
- write_task(dir, tasks[workerid]);
|
|
|
+ write_task(dir, &tasks[workerid]);
|
|
|
break;
|
|
|
|
|
|
case _STARPU_FUT_DATA_LOAD:
|
|
|
@@ -5002,6 +5019,12 @@ void starpu_fxt_write_data_trace_in_dir(char *filename_in, char *dir)
|
|
|
exit(-1);
|
|
|
}
|
|
|
|
|
|
+ unsigned i;
|
|
|
+ for (i = 0; i < STARPU_NMAXWORKERS; i++)
|
|
|
+ free(tasks[i].codelet_name);
|
|
|
+
|
|
|
+ free_worker_ids();
|
|
|
+
|
|
|
struct starpu_data_trace_kernel *kernel=NULL, *tmp=NULL;
|
|
|
HASH_ITER(hh, kernels, kernel, tmp)
|
|
|
{
|