Pārlūkot izejas kodu

Fix tracing GPU thread progress: stop and restart progress close to the main loop, which avoids intermixing with other trace events

Samuel Thibault 8 gadi atpakaļ
vecāks
revīzija
b6110e1eff
1 mainītis faili ar 4 papildinājumiem un 4 dzēšanām
  1. 4 4
      src/drivers/cuda/driver_cuda.c

+ 4 - 4
src/drivers/cuda/driver_cuda.c

@@ -763,6 +763,7 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 		task = worker->task_transferring;
 		task = worker->task_transferring;
 		if (task && worker->nb_buffers_transferred == worker->nb_buffers_totransfer)
 		if (task && worker->nb_buffers_transferred == worker->nb_buffers_totransfer)
 		{
 		{
+			_STARPU_TRACE_END_PROGRESS(memnode);
 			j = _starpu_get_job_associated_to_task(task);
 			j = _starpu_get_job_associated_to_task(task);
 
 
 			_starpu_set_local_worker_key(worker);
 			_starpu_set_local_worker_key(worker);
@@ -779,10 +780,9 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 			}
 			}
 			else
 			else
 			{
 			{
-				_STARPU_TRACE_END_PROGRESS(memnode);
 				execute_job_on_cuda(task, worker);
 				execute_job_on_cuda(task, worker);
-				_STARPU_TRACE_START_PROGRESS(memnode);
 			}
 			}
+			_STARPU_TRACE_START_PROGRESS(memnode);
 		}
 		}
 
 
 		/* Then test for termination of queued tasks */
 		/* Then test for termination of queued tasks */
@@ -811,6 +811,7 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 		else
 		else
 #endif /* !STARPU_SIMGRID */
 #endif /* !STARPU_SIMGRID */
 		{
 		{
+			_STARPU_TRACE_END_PROGRESS(memnode);
 			/* Asynchronous task completed! */
 			/* Asynchronous task completed! */
 			_starpu_set_local_worker_key(worker);
 			_starpu_set_local_worker_key(worker);
 			finish_job_on_cuda(_starpu_get_job_associated_to_task(task), worker);
 			finish_job_on_cuda(_starpu_get_job_associated_to_task(task), worker);
@@ -831,11 +832,9 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 					 * flushing the pipeline, we can now at
 					 * flushing the pipeline, we can now at
 					 * last execute it.  */
 					 * last execute it.  */
 
 
-					_STARPU_TRACE_END_PROGRESS(memnode);
 					_STARPU_TRACE_EVENT("sync_task");
 					_STARPU_TRACE_EVENT("sync_task");
 					execute_job_on_cuda(task, worker);
 					execute_job_on_cuda(task, worker);
 					_STARPU_TRACE_EVENT("end_sync_task");
 					_STARPU_TRACE_EVENT("end_sync_task");
-					_STARPU_TRACE_START_PROGRESS(memnode);
 					worker->pipeline_stuck = 0;
 					worker->pipeline_stuck = 0;
 				}
 				}
 			}
 			}
@@ -848,6 +847,7 @@ int _starpu_cuda_driver_run_once(struct _starpu_worker_set *worker_set)
 				/* Everybody busy */
 				/* Everybody busy */
 				_STARPU_TRACE_END_EXECUTING()
 				_STARPU_TRACE_END_EXECUTING()
 #endif
 #endif
+			_STARPU_TRACE_START_PROGRESS(memnode);
 		}
 		}
 
 
 		if (!worker->pipeline_length || worker->ntasks < worker->pipeline_length)
 		if (!worker->pipeline_length || worker->ntasks < worker->pipeline_length)