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