Browse Source

add some contents on workers operations

Olivier Aumage 6 years ago
parent
commit
e8263e7fc5
1 changed files with 73 additions and 1 deletions
  1. 73 1
      doc/doxygen_dev/chapters/010_core.doxy

+ 73 - 1
doc/doxygen_dev/chapters/010_core.doxy

@@ -85,7 +85,7 @@ _starpu_get_multi_worker_task()). These calls ensure that any pending
 conflicting operation deferred while the worker was in the
 conflicting operation deferred while the worker was in the
 state_sched_op_pending state is performed in an orderly manner.
 state_sched_op_pending state is performed in an orderly manner.
 
 
-
+<br>
 <b>Scheduling contexts related states</b>
 <b>Scheduling contexts related states</b>
 
 
 Flag state_changing_ctx_notice is set to !0 when a thread is about to
 Flag state_changing_ctx_notice is set to !0 when a thread is about to
@@ -102,6 +102,7 @@ worker is currently performing a scheduling operation to tell the targeted
 worker that the initiator thread is waiting for the scheduling operation to
 worker that the initiator thread is waiting for the scheduling operation to
 complete and should be woken up upon completion.
 complete and should be woken up upon completion.
 
 
+<br>
 <b>Relaxed synchronization related states</b>
 <b>Relaxed synchronization related states</b>
 
 
 Any StarPU worker may participate to scheduling operations, and in this process,
 Any StarPU worker may participate to scheduling operations, and in this process,
@@ -127,6 +128,7 @@ resolved after the fact. When the relaxed mode is off, the consistency model
 becomes a mutual exclusion model, where the sched_mutex of the worker must be
 becomes a mutual exclusion model, where the sched_mutex of the worker must be
 held in order to access or change the worker state.
 held in order to access or change the worker state.
 
 
+<br>
 <b>Parallel tasks related states</b>
 <b>Parallel tasks related states</b>
 
 
 When a worker is scheduled to participate to the execution of a parallel task,
 When a worker is scheduled to participate to the execution of a parallel task,
@@ -190,6 +192,76 @@ governed by the following set of state flags and counters:
   worker's sched_mutex.
   worker's sched_mutex.
 
 
 
 
+\subsubsection CoreEntitiesWorkersOperations Operations
+
+<b>Entry point</b>
+
+All the operations of a worker are handled in an iterative fashion, either by
+the application code on a thread launched by the application, or automatically
+by StarPU on a device-dependent CPU thread launched by StarPU. Whether a
+worker's operation cycle is managed automatically or
+not is controlled per session by the field \c not_launched_drivers of the \c
+starpu_conf struct, and is decided in \ref _starpu_launch_drivers() function.
+
+When managed automatically, cycles of operations for a worker are handled by the corresponding
+driver specific <code>_starpu_<DRV>_worker()</code> function, where \c DRV is a driver name such as
+cpu (\c _starpu_cpu_worker) or cuda (\c _starpu_cuda_worker), for instance. 
+Otherwise, the application must supply a thread which will repeatedly call \ref
+starpu_driver_run_once() for the corresponding worker.
+
+In both cases, control is then transferred to 
+\ref _starpu_cpu_driver_run_once() (or the corresponding driver specific func).
+The cycle of operations typically includes, at least, the following operations:
+
+- <b>task scheduling</b>
+- <b>parallel task team build-up</b>
+- <b>task input processing</b>
+- <b>data transfer processing</b>
+- <b>task execution</b>
+
+When the worker cycles are handled by StarPU automatically, the iterative
+operation processing ends when the \c running field of \c _starpu_config
+becomes false. This field should not be read directly, instead it should be read
+through the \ref _starpu_machine_is_running() function.
+
+<br>
+<b>Task scheduling</b>
+
+If the worker does not yet have a queued task, it calls
+_starpu_get_worker_task() to try and obtain a task. This may involve scheduling
+operations such as stealing a queued but not yet executed task from another
+worker. The operation may not necessarily succeed if no tasks are ready and/or
+suitable to run on the worker's computing unit.
+
+<br>
+<b>Parallel task team build-up</b>
+
+If the worker has a task ready to run and the corresponding job has a size
+\c >1, then the task is a parallel job and the worker must synchronize with the
+other workers participating to the parallel execution of the job to assign a
+unique rank for each worker. The synchronization is done throught the job's \c
+sync_mutex mutex.
+
+<br>
+<b>Task input processing</b>
+
+Before the task can be executed, its input data must be made available on a
+memory node reachable by the worker's computing unit. To do so, the worker calls
+\ref _starpu_fetch_task_input()
+
+<br>
+<b>Data transfer processing</b>
+
+TODO
+
+<br>
+<b>Task execution</b>
+
+Once the worker has a pending task assigned and the input data for that task are
+available in the memory node reachable by the worker's computing unit, the
+worker calls \ref _starpu_cpu_driver_execute_task() (or the corresponding driver
+specific function) to proceed to the execution of the task.
+
 
 
 \subsection CoreEntitiesContexts Scheduling Contexts
 \subsection CoreEntitiesContexts Scheduling Contexts