Browse Source

- Start to document data management
- Clarify the usage of cl_arg

Cédric Augonnet 16 years ago
parent
commit
99813e9fe2
1 changed files with 61 additions and 21 deletions
  1. 61 21
      doc/starpu.texi

+ 61 - 21
doc/starpu.texi

@@ -579,10 +579,44 @@ function on an invalid identifier results in an unspecified behaviour.
 @node Data Library
 @node Data Library
 @section Data Library
 @section Data Library
 
 
-@c data_handle_t 
+This section describes the data management facilities provided by StarPU.
+
+TODO: We show how to use existing data interfaces in [ref], but developers can
+design their own data interfaces if required.
+
+@menu
+* starpu_data_handle::  StarPU opaque data handle
+* void *interface::     StarPU data interface
+@end menu
+
+@node starpu_data_handle
+@subsection @code{starpu_data_handle} -- StarPU opaque data handle
+@table @asis 
+@item @emph{Description}:
+StarPU uses @code{starpu_data_handle} as an opaque handle to manage a piece of
+data. Once a piece of data has been registered to StarPU, it is associated to a
+@code{starpu_data_handle} which keeps track of the state of the piece of data
+over the entire machine, so that we can maintain data consistency and locate
+data replicates for instance.
+@end table
+
+@node void *interface
+@subsection @code{void *interface} -- StarPU data interface
+@table @asis 
+@item @emph{Description}:
+Data management is done at a high-level in StarPU: rather than accessing a mere
+list of contiguous buffers, the tasks may manipulate data that are described by
+a high-level construct which we call data interface.
+
+TODO
+@end table
+
 
 
 @c void starpu_delete_data(struct starpu_data_state_t *state);
 @c void starpu_delete_data(struct starpu_data_state_t *state);
 
 
+@c starpu_get_worker_memory_node TODO
+@c 
+
 @c user interaction with the DSM
 @c user interaction with the DSM
 @c   void starpu_sync_data_with_mem(struct starpu_data_state_t *state);
 @c   void starpu_sync_data_with_mem(struct starpu_data_state_t *state);
 @c   void starpu_notify_data_modification(struct starpu_data_state_t *state, uint32_t modifying_node);
 @c   void starpu_notify_data_modification(struct starpu_data_state_t *state, uint32_t modifying_node);
@@ -618,18 +652,18 @@ indicates that it is only available on Cell SPUs.
 
 
 @item @code{cpu_func} (optionnal):
 @item @code{cpu_func} (optionnal):
 Is a function pointer to the CPU implementation of the codelet. Its prototype
 Is a function pointer to the CPU implementation of the codelet. Its prototype
-must be: @code{void cpu_func(void *buffers[], void *cl_arg)}. The
-first argument being the array of data managed by the data management library,
-and the second argument is a pointer to the argument (possibly a copy of it)
-passed from the @code{.cl_arg} field of the @code{starpu_task} structure. This
-pointer is ignored if @code{STARPU_CPU} does not appear in the @code{.where} field,
-it must be non-null otherwise.
+must be: @code{void cpu_func(void *buffers[], void *cl_arg)}. The first
+argument being the array of data managed by the data management library, and
+the second argument is a pointer to the argument passed from the @code{.cl_arg}
+field of the @code{starpu_task} structure.
+The @code{cpu_func} field is ignored if @code{STARPU_CPU} does not appear in
+the @code{.where} field, it must be non-null otherwise.
 
 
 @item @code{cuda_func} (optionnal):
 @item @code{cuda_func} (optionnal):
 Is a function pointer to the CUDA implementation of the codelet. @emph{This
 Is a function pointer to the CUDA implementation of the codelet. @emph{This
 must be a host-function written in the CUDA runtime API}. Its prototype must
 must be a host-function written in the CUDA runtime API}. Its prototype must
-be: @code{void cuda_func(void *buffers[], void *cl_arg);}. This
-pointer is ignored if @code{STARPU_CUDA} does not appear in the @code{.where}
+be: @code{void cuda_func(void *buffers[], void *cl_arg);}. The @code{cuda_func}
+field is ignored if @code{STARPU_CUDA} does not appear in the @code{.where}
 field, it must be non-null otherwise.
 field, it must be non-null otherwise.
 
 
 @item @code{gordon_func} (optionnal):
 @item @code{gordon_func} (optionnal):
@@ -674,11 +708,18 @@ such empty tasks can be useful for synchronization purposes.
 TODO
 TODO
 
 
 @item @code{cl_arg} (optional) (default = NULL):
 @item @code{cl_arg} (optional) (default = NULL):
-TODO
-
-@item @code{cl_arg_size} (optional):
-TODO
-@c ignored if only executable on CPUs or CUDA ...
+This pointer is passed to the codelet through the second argument
+of the codelet implementation (eg. @code{cpu_func} or @code{cuda_func}).
+In the specific case of the Cell processor, see the @code{.cl_arg_size}
+argument.
+
+@item @code{cl_arg_size} (optional, Cell specific):
+In the case of the Cell processor, the @code{.cl_arg} pointer is not directly
+given to the SPU function. A buffer of size @code{cl_arg_size} is allocated on
+the SPU. This buffer is then filled with the @code{cl_arg_size} bytes starting
+at address @code{cl_arg}. In that case, the argument given to the SPU codelet
+is therefore not the @code{.cl_arg} pointer, but the address of the buffer in
+local store (LS) instead. 
 
 
 @item @code{callback_func} (optional) (default = @code{NULL}):
 @item @code{callback_func} (optional) (default = @code{NULL}):
 This is a function pointer of prototype @code{void (*f)(void *)} which
 This is a function pointer of prototype @code{void (*f)(void *)} which
@@ -705,13 +746,13 @@ If this flag is set, the @code{starpu_submit_task} function is blocking and
 returns only when the task has been executed (or if no worker is able to
 returns only when the task has been executed (or if no worker is able to
 process the task). Otherwise, @code{starpu_submit_task} returns immediately.
 process the task). Otherwise, @code{starpu_submit_task} returns immediately.
 
 
-@item @code{priority} (optionnal) (default = @code{DEFAULT_PRIO}):
+@item @code{priority} (optionnal) (default = @code{STARPU_DEFAULT_PRIO}):
 This field indicates a level of priority for the task. This is an integer value
 This field indicates a level of priority for the task. This is an integer value
-that must be selected between @code{MIN_PRIO} (for the least important tasks)
-and @code{MAX_PRIO} (for the most important tasks) included. Default priority
-is @code{DEFAULT_PRIO}.  Scheduling strategies that take priorities into
-account can use this parameter to take better scheduling decisions, but the
-scheduling policy may also ignore it.
+that must be selected between @code{STARPU_MIN_PRIO} (for the least important
+tasks) and @code{STARPU_MAX_PRIO} (for the most important tasks) included.
+Default priority is @code{STARPU_DEFAULT_PRIO}.  Scheduling strategies that
+take priorities into account can use this parameter to take better scheduling
+decisions, but the scheduling policy may also ignore it.
 
 
 @item @code{execute_on_a_specific_worker} (default = 0):
 @item @code{execute_on_a_specific_worker} (default = 0):
 If this flag is set, StarPU will bypass the scheduler and directly affect this
 If this flag is set, StarPU will bypass the scheduler and directly affect this
@@ -959,7 +1000,6 @@ terminated.
 @code{void starpu_tag_wait_array(unsigned ntags, starpu_tag_t *id);}
 @code{void starpu_tag_wait_array(unsigned ntags, starpu_tag_t *id);}
 @end table
 @end table
 
 
-
 @node starpu_tag_remove
 @node starpu_tag_remove
 @subsection @code{starpu_tag_remove} -- Destroy a Tag
 @subsection @code{starpu_tag_remove} -- Destroy a Tag
 @table @asis
 @table @asis