diff --git a/src/clocks.c b/src/clocks.c index 2d2cac90ddb5e7dca1fb5feddb1c8086c57458d8..20152c07d103e7cf7f1dd9620e196a8aefd4389f 100644 --- a/src/clocks.c +++ b/src/clocks.c @@ -83,7 +83,8 @@ double clocks_diff(struct clocks_time *start, struct clocks_time *end) { } return (double)temp.tv_sec * 1000.0 + (double)temp.tv_nsec * 1.0E-6; #else - return elapsed(end->time, start->time) / clocks_get_cpufreq() * clocks_units_scale; + return elapsed(end->time, start->time) / clocks_get_cpufreq() * + clocks_units_scale; #endif } @@ -219,6 +220,20 @@ double clocks_from_ticks(ticks tics) { * * @result the current time units. */ -const char *clocks_getunit() { - return clocks_units[clocks_units_index]; +const char *clocks_getunit() { return clocks_units[clocks_units_index]; } + +const char *clocks_get_timeofday() { + + struct timeval time; + struct tm *local_time; + static char buffer[40]; + + /* Get the local time of day */ + gettimeofday(&time, NULL); + local_time = localtime(&time.tv_sec); + + /* Make it a string */ + strftime(buffer, 40, "[%F %T]", local_time); + + return buffer; } diff --git a/src/clocks.h b/src/clocks.h index 59b9f52b0303ac74dd237c7fd19cf689cac99cc3..20ac6f954b4bc2cdeed04396b3a59bf381d34bc7 100644 --- a/src/clocks.h +++ b/src/clocks.h @@ -39,5 +39,6 @@ void clocks_set_cpufreq(unsigned long long freq); unsigned long long clocks_get_cpufreq(); double clocks_from_ticks(ticks tics); double clocks_diff_ticks(ticks tic, ticks toc); +const char *clocks_get_timeofday(); #endif /* SWIFT_CLOCKS_H */ diff --git a/src/engine.c b/src/engine.c index 3c8c1f60a1529735d8dfe9992a6538197d90ba9e..3e8570cde08e2faf05658ddd42d2fce7a427e4e0 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1116,7 +1116,8 @@ int engine_marktasks(struct engine *e) { } } - // message( "took %.3f %s." , clocks_from_ticks(getticks() - tic), clocks_getunit()); + // message( "took %.3f %s." , clocks_from_ticks(getticks() - tic), + // clocks_getunit()); /* All is well... */ return 0; @@ -1142,10 +1143,11 @@ void engine_print(struct engine *e) { else counts[task_type_count] += 1; #ifdef WITH_MPI - printf("[%03i] engine_print: task counts are [ %s=%i", e->nodeID, - taskID_names[0], counts[0]); + printf("[%03i] %s engine_print: task counts are [ %s=%i", e->nodeID, + clocks_get_timeofday(), taskID_names[0], counts[0]); #else - printf("engine_print: task counts are [ %s=%i", taskID_names[0], counts[0]); + printf("%s engine_print: task counts are [ %s=%i", clocks_get_timeofday(), + taskID_names[0], counts[0]); #endif for (k = 1; k < task_type_count; k++) printf(" %s=%i", taskID_names[k], counts[k]); @@ -1167,29 +1169,29 @@ void engine_rebuild(struct engine *e) { /* Re-build the space. */ // tic = getticks(); space_rebuild(e->s, 0.0, e->nodeID == 0); - // message( "space_rebuild took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); +// message( "space_rebuild took %.3f %s." , +// clocks_from_ticks(getticks() - tic), clocks_getunit()); /* If in parallel, exchange the cell structure. */ #ifdef WITH_MPI // tic = getticks(); engine_exchange_cells(e); - // message( "engine_exchange_cells took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); +// message( "engine_exchange_cells took %.3f %s." , +// clocks_from_ticks(getticks() - tic), clocks_getunit()); #endif /* Re-build the tasks. */ // tic = getticks(); engine_maketasks(e); // message( "engine_maketasks took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); + // clocks_from_ticks(getticks() - tic), clocks_getunit()); /* Run through the tasks and mark as skip or not. */ // tic = getticks(); if (engine_marktasks(e)) error("engine_marktasks failed after space_rebuild."); // message( "engine_marktasks took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); + // clocks_from_ticks(getticks() - tic), clocks_getunit()); /* Print the status of the system */ engine_print(e); @@ -1210,8 +1212,8 @@ void engine_prepare(struct engine *e) { /* Run through the tasks and mark as skip or not. */ // tic = getticks(); rebuild = (e->forcerebuild || engine_marktasks(e)); - // message( "space_marktasks took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); +// message( "space_marktasks took %.3f %s." , +// clocks_from_ticks(getticks() - tic), clocks_getunit()); /* Collect the values of rebuild from all nodes. */ #ifdef WITH_MPI @@ -1221,8 +1223,8 @@ void engine_prepare(struct engine *e) { MPI_SUCCESS) error("Failed to aggregate the rebuild flag across nodes."); rebuild = buff; - // message( "rebuild allreduce took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); +// message( "rebuild allreduce took %.3f %s." , +// clocks_from_ticks(getticks() - tic), clocks_getunit()); #endif e->tic_step = getticks(); @@ -1231,7 +1233,7 @@ void engine_prepare(struct engine *e) { // tic = getticks(); engine_rebuild(e); // message( "engine_rebuild took %.3f %s." , - //clocks_from_ticks(getticks() - tic), clocks_getunit()); + // clocks_from_ticks(getticks() - tic), clocks_getunit()); } /* Re-rank the tasks every now and then. */ @@ -1239,7 +1241,7 @@ void engine_prepare(struct engine *e) { // tic = getticks(); scheduler_reweight(&e->sched); // message( "scheduler_reweight took %.3f %s." , - //clocks_from_ticks(getticks() -tic), clocks_getunit()); + // clocks_from_ticks(getticks() -tic), clocks_getunit()); } e->tasks_age += 1; @@ -1625,7 +1627,7 @@ void engine_step(struct engine *e) { clocks_gettime(&time2); - e->wallclock_time = (float) clocks_diff(&time1, &time2); + e->wallclock_time = (float)clocks_diff(&time1, &time2); // printParticle(e->s->parts, e->s->xparts,1000, e->s->nr_parts); // printParticle(e->s->parts, e->s->xparts,515050, e->s->nr_parts); } @@ -1874,9 +1876,10 @@ void engine_init(struct engine *e, struct space *s, float dt, int nr_threads, if (nodeID == 0) { #ifdef WITH_MPI - printf("[%03i] engine_init: cpu map is [ ", nodeID); + printf("[%03i] %s engine_init: cpu map is [ ", nodeID, + clocks_get_timeofday()); #else - printf("engine_init: cpu map is [ "); + printf("%s engine_init: cpu map is [ ", clocks_get_timeofday()); #endif for (i = 0; i < nr_cores; i++) printf("%i ", cpuid[i]); printf("].\n"); @@ -2082,16 +2085,17 @@ void engine_print_policy(struct engine *e) { #ifdef WITH_MPI if (e->nodeID == 0) { - printf("[000] engine_policy: engine policies are [ "); + printf("[000] %s engine_policy: engine policies are [ ", + clocks_get_timeofday()); for (int k = 1; k < 32; k++) - if (e->policy & (1 << k)) printf(" %s,", engine_policy_names[k + 1]); + if (e->policy & (1 << k)) printf(" %s ", engine_policy_names[k + 1]); printf(" ]\n"); fflush(stdout); } #else - printf("engine_policy: engine policies are [ "); + printf("%s engine_policy: engine policies are [ ", clocks_get_timeofday()); for (int k = 1; k < 32; k++) - if (e->policy & (1 << k)) printf(" %s,", engine_policy_names[k + 1]); + if (e->policy & (1 << k)) printf(" %s ", engine_policy_names[k + 1]); printf(" ]\n"); fflush(stdout); #endif diff --git a/src/error.h b/src/error.h index 5a06d69ad90a1bc436cf3f9e4a70087d88cb9dc4..774bfffdece9a86e076beb9dd7d7c9b78c5e21c9 100644 --- a/src/error.h +++ b/src/error.h @@ -24,6 +24,8 @@ /* Some standard headers. */ #include <stdio.h> +#include "clocks.h" + /* MPI headers. */ #ifdef WITH_MPI #include <mpi.h> @@ -35,18 +37,18 @@ */ #ifdef WITH_MPI extern int engine_rank; -#define error(s, ...) \ - { \ - fprintf(stderr, "[%04i] %s:%s():%i: " s "\n", engine_rank, __FILE__, \ - __FUNCTION__, __LINE__, ##__VA_ARGS__); \ - MPI_Abort(MPI_COMM_WORLD, -1); \ - } -#else #define error(s, ...) \ { \ - fprintf(stderr, "%s:%s():%i: " s "\n", __FILE__, __FUNCTION__, __LINE__, \ - ##__VA_ARGS__); \ - abort(); \ + fprintf(stderr, "[%04i] %s %s:%s():%i: " s "\n", clocks_get_timeofday(), \ + engine_rank, __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ + MPI_Abort(MPI_COMM_WORLD, -1); \ + } +#else +#define error(s, ...) \ + { \ + fprintf(stderr, "%s %s:%s():%i: " s "\n", clocks_get_timeofday(), \ + __FILE__, __FUNCTION__, __LINE__, ##__VA_ARGS__); \ + abort(); \ } #endif @@ -56,25 +58,27 @@ extern int engine_rank; * followed by the MPI error string and aborts. * */ -#define mpi_error(res, s, ...) \ - { \ - fprintf(stderr, "[%04i] %s:%s():%i: " s "\n", engine_rank, __FILE__, \ - __FUNCTION__, __LINE__, ##__VA_ARGS__); \ - int len = 1024; \ - char buf[len]; \ - MPI_Error_string(res, buf, &len); \ - fprintf(stderr, "%s\n\n", buf); \ - MPI_Abort(MPI_COMM_WORLD, -1); \ +#define mpi_error(res, s, ...) \ + { \ + fprintf(stderr, "[%04i] %s %s:%s():%i: " s "\n", engine_rank, \ + clocks_get_timeofday(), __FILE__, __FUNCTION__, __LINE__, \ + ##__VA_ARGS__); \ + int len = 1024; \ + char buf[len]; \ + MPI_Error_string(res, buf, &len); \ + fprintf(stderr, "%s\n\n", buf); \ + MPI_Abort(MPI_COMM_WORLD, -1); \ } -#define mpi_error_string(res, s, ...) \ - { \ - fprintf(stderr, "[%04i] %s:%s():%i: " s "\n", engine_rank, __FILE__, \ - __FUNCTION__, __LINE__, ##__VA_ARGS__); \ - int len = 1024; \ - char buf[len]; \ - MPI_Error_string(res, buf, &len); \ - fprintf(stderr, "%s\n\n", buf); \ +#define mpi_error_string(res, s, ...) \ + { \ + fprintf(stderr, "[%04i] %s %s:%s():%i: " s "\n", engine_rank, \ + clocks_get_timeofday(), __FILE__, __FUNCTION__, __LINE__, \ + ##__VA_ARGS__); \ + int len = 1024; \ + char buf[len]; \ + MPI_Error_string(res, buf, &len); \ + fprintf(stderr, "%s\n\n", buf); \ } #endif @@ -84,10 +88,12 @@ extern int engine_rank; */ #ifdef WITH_MPI extern int engine_rank; -#define message(s, ...) \ - printf("[%04i] %s: " s "\n", engine_rank, __FUNCTION__, ##__VA_ARGS__) +#define message(s, ...) \ + printf("[%04i] %s %s: " s "\n", engine_rank, clocks_get_timeofday(), \ + __FUNCTION__, ##__VA_ARGS__) #else -#define message(s, ...) printf("%s: " s "\n", __FUNCTION__, ##__VA_ARGS__) +#define message(s, ...) \ + printf("%s %s: " s "\n", clocks_get_timeofday(), __FUNCTION__, ##__VA_ARGS__) #endif /** @@ -96,25 +102,26 @@ extern int engine_rank; */ #ifdef WITH_MPI extern int engine_rank; -#define assert(expr) \ - { \ - if (!(expr)) { \ - fprintf(stderr, "[%04i] %s:%s():%i: FAILED ASSERTION: " #expr " \n", \ - engine_rank, __FILE__, __FUNCTION__, __LINE__); \ - fflush(stderr); \ - MPI_Abort(MPI_COMM_WORLD, -1); \ - } \ - } -#else #define assert(expr) \ { \ if (!(expr)) { \ - fprintf(stderr, "%s:%s():%i: FAILED ASSERTION: " #expr " \n", __FILE__, \ - __FUNCTION__, __LINE__); \ + fprintf(stderr, "[%04i] %s %s:%s():%i: FAILED ASSERTION: " #expr " \n", \ + engine_rank, clocks_get_timeofday(), __FILE__, __FUNCTION__, \ + __LINE__); \ fflush(stderr); \ - abort(); \ + MPI_Abort(MPI_COMM_WORLD, -1); \ } \ } +#else +#define assert(expr) \ + { \ + if (!(expr)) { \ + fprintf(stderr, "%s %s:%s():%i: FAILED ASSERTION: " #expr " \n", \ + clocks_get_timeofday(), __FILE__, __FUNCTION__, __LINE__); \ + fflush(stderr); \ + abort(); \ + } \ + } #endif #endif /* SWIFT_ERROR_H */