Commit b24ca8c5 authored by lhausamm's avatar lhausamm
Browse files

Open only once dependency file and add an option in debugging-checks mode for...

Open only once dependency file and add an option in debugging-checks mode for writing task dependency graph
parent 1fa4eb60
......@@ -59,6 +59,9 @@ void print_help_message() {
printf(" swift_mpi [OPTION]... PARAMFILE\n\n");
printf("Valid options are:\n");
#ifdef SWIFT_DEBUG_CHECKS
printf(" %2s %14s %s\n", "-x", "", "Write task dependencies.");
#endif
printf(" %2s %14s %s\n", "-a", "", "Pin runners using processor affinity.");
printf(" %2s %14s %s\n", "-c", "",
"Run with cosmological time integration.");
......@@ -171,6 +174,9 @@ int main(int argc, char *argv[]) {
int with_fp_exceptions = 0;
int with_drift_all = 0;
int with_mpole_reconstruction = 0;
#ifdef SWIFT_DEBUG_CHECKS
int write_dependencies = 0;
#endif
int verbose = 0;
int nr_threads = 1;
int with_verbose_timers = 0;
......@@ -181,7 +187,11 @@ int main(int argc, char *argv[]) {
/* Parse the parameters */
int c;
while ((c = getopt(argc, argv, "acCdDef:FgGhMn:P:sSt:Tv:y:Y:")) != -1)
char parameters[200] = "acCdDef:FgGhMn:P:sSt:Tv:y:Y:";
#ifdef SWIFT_DEBUG_CHECKS
strcat(parameters, "x:");
#endif
while ((c = getopt(argc, argv, parameters)) != -1)
switch (c) {
case 'a':
#if defined(HAVE_SETAFFINITY) && defined(HAVE_LIBNUMA)
......@@ -193,6 +203,11 @@ int main(int argc, char *argv[]) {
case 'c':
with_cosmology = 1;
break;
#ifdef SWIFT_DEBUG_CHECKS
case 'x':
write_dependencies = 1;
break;
#endif
case 'C':
with_cooling = 1;
break;
......@@ -697,6 +712,11 @@ int main(int argc, char *argv[]) {
/* File for the timers */
if (with_verbose_timers) timers_open_file(myrank);
#ifdef SWIFT_DEBUG_CHECKS
if (write_dependencies)
scheduler_write_dependency(&e.sched);
#endif
/* Main simulation loop */
for (int j = 0; !engine_is_done(&e) && e.step - 1 != nsteps; j++) {
......
......@@ -2640,10 +2640,6 @@ void engine_maketasks(struct engine *e) {
/* Set the tasks age. */
e->tasks_age = 0;
#ifdef SWIFT_DEBUG_CHECKS
if (e->ti_current == 0) scheduler_write_dependency(sched);
#endif
if (e->verbose)
message("took %.3f %s (including reweight).",
clocks_from_ticks(getticks() - tic), clocks_getunit());
......
......@@ -120,19 +120,10 @@ void scheduler_write_dependency(struct scheduler *s) {
message("Writing dependencies");
/* create file */
char filename[200] = "dependency_graph.dot";
char tmp[200]; /* text to write */
char *line = NULL; /* buff for reading line */
size_t len = 0;
ssize_t read;
FILE *f; /* file containing the output */
int test;
int i, j;
struct task *ta, *tb;
/* create file */
f = open_and_check_file(filename, "w");
f = open_and_check_file(filename, "wr");
/* write header */
fprintf(f, "digraph task_dep {\n");
......@@ -140,43 +131,44 @@ void scheduler_write_dependency(struct scheduler *s) {
fprintf(f, "\t ratio=0.66;\n");
fprintf(f, "\t node[nodesep=0.15];\n");
fclose(f);
/* loop over all tasks */
int i, j;
for (i = 0; i < s->nr_tasks; i++) {
struct task *ta;
ta = &s->tasks[i];
/* and theirs dependencies */
for (j = 0; j < ta->nr_unlock_tasks; j++) {
struct task *tb;
tb = ta->unlock_tasks[j];
char tmp[200]; /* text to write */
/* construct line */
sprintf(tmp, "\t \"%s %s\"->\"%s %s\";\n", taskID_names[ta->type],
subtaskID_names[ta->subtype], taskID_names[tb->type],
subtaskID_names[tb->subtype]);
f = open_and_check_file(filename, "r");
/* check if dependency already written */
test = 1;
int test = 1;
/* loop over all lines */
char *line = NULL; /* buff for reading line */
size_t len = 0;
ssize_t read;
fseek(f, 0, SEEK_SET);
while (test && (read = getline(&line, &len, f)) != -1) {
/* check if line == dependency word */
if (strcmp(tmp, line) == 0) test = 0;
}
fclose(f);
fseek(f, 0, SEEK_END);
/* Not written yet => write it */
if (test) {
f = open_and_check_file(filename, "a");
fprintf(f, tmp);
fclose(f);
}
}
}
f = open_and_check_file(filename, "a");
fprintf(f, "}");
fclose(f);
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment