diff --git a/configure.ac b/configure.ac index 3ec22c1ed0a4ff137b9eb966f43620c06295a097..08930b81c40d78f6f3b66b11f75242afe2a5b4df 100644 --- a/configure.ac +++ b/configure.ac @@ -99,6 +99,17 @@ if test "$enable_san" = "yes"; then fi fi +AC_ARG_ENABLE([task-timers], + [AS_HELP_STRING([--enable-task-timers], + [Enables task timer output and collection of extra data to enable it])]. + [enable_tts]="$enableval$"], + [enable_tts]="no"] +) + +if test "$enable_tts" = "yes"; then + AC_DEFINE(WITH_TASK_TIMERS,1,[Define if Task Timer recording is enabled]) +fi + # Autoconf stuff AC_PROG_INSTALL AC_PROG_MAKE_SET diff --git a/src/qsched.c b/src/qsched.c index f6ce8b26349b91fc1f64afcab843266a5b0dc274..b21a8306d5593590060e129f827a31d213055bba 100644 --- a/src/qsched.c +++ b/src/qsched.c @@ -608,6 +608,9 @@ void qsched_done ( struct qsched *s , struct task *t ) { /* Set the task stats. */ t->toc = getticks(); + #ifdef WITH_TASK_TIMERS + t->tid = qsched_get_tid(); + #endif if (!(s->flags & qsched_flag_norecost)) t->cost = t->toc - t->tic; @@ -1646,3 +1649,26 @@ void qsched_init ( struct qsched *s , int nr_queues , int flags ) { lock_init( &s->lock ); } + + + +void qsched_dump_task_timers( struct qsched *s, char *filename ){ +#ifdef WITH_TASK_TIMERS +FILE *task_file; + +task_file = fopen(filename, "w"); + +for(int i = 0; i < s->nr_tasks; i++) +{ + struct task *t = s->tasks[i]; + + fprintf("%i %i %lli %lli\n", t->type, t->tid, t->tic, t->toc); + +} + + +fclose(task_file); +#else +error("Quicksched wasn't compiled with task timers enabled\n"); +#endif +} diff --git a/src/qsched.h b/src/qsched.h index b9ee503cc4e1d5afd08179c7a56eaed516dcb2c1..df9b00a0b57847d607fe81eb35e82a621346eead 100644 --- a/src/qsched.h +++ b/src/qsched.h @@ -211,3 +211,4 @@ void qsched_reset ( struct qsched *s ); void qsched_addtask_dynamic ( struct qsched *s , int type , unsigned int flags , void *data , int data_size , int cost , qsched_res_t *locks , int nr_locks , qsched_res_t *uses , int nr_uses ); void qsched_ensure ( struct qsched *s , int nr_tasks , int nr_res , int nr_deps , int nr_locks , int nr_uses , int size_data ); void qsched_res_own ( struct qsched *s , qsched_res_t res , int owner ); +void qsched_dump_task_timers( struct qsched *s, char *filename ); diff --git a/src/task.h b/src/task.h index c9c57d6436fe659352133ce38b79fc63c719da7e..d12229081ea84fc16a4786e425ceca8f1ff22182 100644 --- a/src/task.h +++ b/src/task.h @@ -57,4 +57,9 @@ struct task { /* Task weight for queue selection. */ int cost, weight; + #ifdef WITH_TASK_TIMERS + int tid; + + #endif + };