Bladeren bron

New STARPU_TASK_PROGRESS environment variable to show task progression.

Samuel Thibault 4 jaren geleden
bovenliggende
commit
5ef8500313
3 gewijzigde bestanden met toevoegingen van 19 en 0 verwijderingen
  1. 1 0
      ChangeLog
  2. 8 0
      doc/doxygen/chapters/501_environment_variables.doxy
  3. 10 0
      src/core/jobs.c

+ 1 - 0
ChangeLog

@@ -62,6 +62,7 @@ Small features:
   * New STARPU_WORKERS_COREID, STARPU_MAIN_THREAD_COREID and
     STARPU_MPI_THREAD_COREID environment variables to bind threads to cores
     instead of hyperthreads.
+  * New STARPU_TASK_PROGRESS environment variable to show task progression.
 
 StarPU 1.3.7
 ====================================================================

+ 8 - 0
doc/doxygen/chapters/501_environment_variables.doxy

@@ -1305,6 +1305,14 @@ be convenient for letting the application initialize data etc. before starting
 to look for idle time.
 </dd>
 
+<dt>STARPU_TASK_PROGRESS</dt>
+<dd>
+\anchor STARPU_TASK_PROGRESS
+\addindex __env__STARPU_TASK_PROGRESS
+Print the progression of tasks. This is convenient to determine whether a
+program is making progress in task execution, or is just stuck.
+</dd>
+
 <dt>STARPU_TASK_BREAK_ON_PUSH</dt>
 <dd>
 \anchor STARPU_TASK_BREAK_ON_PUSH

+ 10 - 0
src/core/jobs.c

@@ -32,6 +32,8 @@
 #include <core/workers.h>
 
 static int max_memory_use;
+static int task_progress;
+static unsigned long njobs_finished;
 static unsigned long njobs, maxnjobs;
 
 #ifdef STARPU_DEBUG
@@ -43,6 +45,7 @@ static starpu_pthread_mutex_t all_jobs_list_mutex = STARPU_PTHREAD_MUTEX_INITIAL
 void _starpu_job_init(void)
 {
 	max_memory_use = starpu_get_env_number_default("STARPU_MAX_MEMORY_USE", 0);
+	task_progress = starpu_get_env_number_default("STARPU_TASK_PROGRESS", 0);
 #ifdef STARPU_DEBUG
 	_starpu_job_multilist_head_init_all_submitted(&all_jobs_list);
 #endif
@@ -281,6 +284,13 @@ void _starpu_handle_job_termination(struct _starpu_job *j)
 		if (nb != 0) return;
 	}
 
+	if (task_progress)
+	{
+		unsigned long jobs = STARPU_ATOMIC_ADDL(&njobs_finished, 1);
+
+		printf("\r%lu tasks finished...", jobs);
+	}
+
 	struct starpu_task *task = j->task;
 	struct starpu_task *end_rdep = NULL;
 	unsigned sched_ctx = task->sched_ctx;