scheduling_contexts.doxy 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. /*
  2. * This file is part of the StarPU Handbook.
  3. * Copyright (C) 2009--2011 Universit@'e de Bordeaux
  4. * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2016 CNRS
  5. * Copyright (C) 2011, 2012 INRIA
  6. * See the file version.doxy for copying conditions.
  7. */
  8. /*! \defgroup API_Scheduling_Contexts Scheduling Contexts
  9. \brief StarPU permits on one hand grouping workers in combined workers
  10. in order to execute a parallel task and on the other hand grouping
  11. tasks in bundles that will be executed by a single specified worker.
  12. In contrast when we group workers in scheduling contexts we submit
  13. starpu tasks to them and we schedule them with the policy assigned to
  14. the context. Scheduling contexts can be created, deleted and modified
  15. dynamically.
  16. \struct starpu_sched_ctx_performance_counters
  17. Performance counters used by the starpu to indicate the
  18. hypervisor how the application and the resources are executing.
  19. \ingroup API_Scheduling_Contexts
  20. \var void (*starpu_sched_ctx_performance_counters::notify_idle_cycle)(unsigned sched_ctx_id, int worker, double idle_time)
  21. Informs the hypervisor for how long a worker has been idle in the specified context
  22. \var void (*starpu_sched_ctx_performance_counters::notify_pushed_task)(unsigned sched_ctx_id, int worker)
  23. Notifies the hypervisor that a task has been scheduled on the queue of the worker corresponding to the specified context
  24. \var void (*starpu_sched_ctx_performance_counters::notify_poped_task)(unsigned sched_ctx_id, int worker)
  25. Informs the hypervisor that a task executing a specified number of instructions has been poped from the worker
  26. \var void (*starpu_sched_ctx_performance_counters::notify_post_exec_task)(struct starpu_task *task, size_t data_size, uint32_t footprint, int hypervisor_tag, double flops)
  27. Notifies the hypervisor that a task has just been executed
  28. \var void (*starpu_sched_ctx_performance_counters::notify_submitted_job)(struct starpu_task *task, uint32_t footprint, size_t data_size)
  29. Notifies the hypervisor that a task has just been submitted
  30. \var void (*starpu_sched_ctx_performance_counters::notify_delete_context)(unsigned sched_ctx)
  31. Notifies the hypervisor that the context was deleted
  32. @name Scheduling Contexts Basic API
  33. \ingroup API_Scheduling_Contexts
  34. \def STARPU_NMAX_SCHED_CTXS
  35. \ingroup API_Scheduling_Policy
  36. Define the maximum number of scheduling contexts managed by StarPU. The default value can be
  37. modified at configure by using the option \ref enable-max-sched-ctxs "--enable-max-sched-ctxs".
  38. \fn unsigned starpu_sched_ctx_create(int *workerids_ctx, int nworkers_ctx, const char *sched_ctx_name, ...)
  39. \ingroup API_Scheduling_Contexts
  40. This function creates a scheduling context with the given parameters
  41. (see below) and assigns the workers in \p workerids_ctx to execute the
  42. tasks submitted to it. The return value represents the identifier of
  43. the context that has just been created. It will be further used to
  44. indicate the context the tasks will be submitted to. The return value
  45. should be at most \ref STARPU_NMAX_SCHED_CTXS.
  46. The arguments following the name of the scheduling context can be of
  47. the following types:
  48. <ul>
  49. <li> ::STARPU_SCHED_CTX_POLICY_NAME, followed by the name of a
  50. predefined scheduling policy
  51. </li>
  52. <li> ::STARPU_SCHED_CTX_POLICY_STRUCT, followed by a pointer to a
  53. custom scheduling policy (struct starpu_sched_policy *)
  54. </li>
  55. <li> ::STARPU_SCHED_CTX_POLICY_MIN_PRIO, followed by a integer
  56. representing the minimum priority value to be defined for the
  57. scheduling policy.
  58. </li>
  59. <li> ::STARPU_SCHED_CTX_POLICY_MAX_PRIO, followed by a integer
  60. representing the maximum priority value to be defined for the
  61. scheduling policy.
  62. </li>
  63. <li> ::STARPU_SCHED_CTX_POLICY_INIT, followed by a function pointer
  64. (ie. void init_sched(void)) allowing to initialize the scheduling policy.
  65. </li>
  66. </ul>
  67. \def STARPU_SCHED_CTX_POLICY_NAME
  68. \ingroup API_Scheduling_Contexts
  69. This macro is used when calling starpu_sched_ctx_create() to specify a
  70. name for a scheduling policy
  71. \def STARPU_SCHED_CTX_POLICY_STRUCT
  72. \ingroup API_Scheduling_Contexts
  73. This macro is used when calling starpu_sched_ctx_create() to specify a
  74. pointer to a scheduling policy
  75. \def STARPU_SCHED_CTX_POLICY_MIN_PRIO
  76. \ingroup API_Scheduling_Contexts
  77. This macro is used when calling starpu_sched_ctx_create() to specify a
  78. minimum scheduler priority value.
  79. \def STARPU_SCHED_CTX_POLICY_MAX_PRIO
  80. \ingroup API_Scheduling_Contexts
  81. This macro is used when calling starpu_sched_ctx_create() to specify a
  82. maximum scheduler priority value.
  83. \def STARPU_SCHED_CTX_POLICY_INIT
  84. \ingroup API_Scheduling_Contexts
  85. This macro is used when calling starpu_sched_ctx_create() to specify a
  86. function pointer allowing to initialize the scheduling policy.
  87. \fn unsigned starpu_sched_ctx_create_inside_interval(const char *policy_name, const char *sched_ctx_name, int min_ncpus, int max_ncpus, int min_ngpus, int max_ngpus, unsigned allow_overlap)
  88. \ingroup API_Scheduling_Contexts
  89. Create a context indicating an approximate interval of resources
  90. \fn void starpu_sched_ctx_register_close_callback(unsigned sched_ctx_id, void (*close_callback)(unsigned sched_ctx_id, void* args), void *args)
  91. \ingroup API_Scheduling_Contexts
  92. Execute the callback whenever the last task of the context finished executing, it is called with the pramaters: sched_ctx and any other paramter needed
  93. by the application (packed in a void*)
  94. \fn void starpu_sched_ctx_add_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id)
  95. \ingroup API_Scheduling_Contexts
  96. This function adds dynamically the workers in \p workerids_ctx to the
  97. context \p sched_ctx_id. The last argument cannot be greater than
  98. \ref STARPU_NMAX_SCHED_CTXS.
  99. \fn void starpu_sched_ctx_remove_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id)
  100. \ingroup API_Scheduling_Contexts
  101. This function removes the workers in \p workerids_ctx from the context
  102. \p sched_ctx_id. The last argument cannot be greater than
  103. STARPU_NMAX_SCHED_CTXS.
  104. \fn void starpu_sched_ctx_display_workers(unsigned sched_ctx_id, FILE *f)
  105. \ingroup API_Scheduling_Contexts
  106. This function prints on the file \p f the worker names belonging to the context \p sched_ctx_id
  107. \fn void starpu_sched_ctx_delete(unsigned sched_ctx_id)
  108. \ingroup API_Scheduling_Contexts
  109. Delete scheduling context \p sched_ctx_id and transfer remaining
  110. workers to the inheritor scheduling context.
  111. \fn void starpu_sched_ctx_set_inheritor(unsigned sched_ctx_id, unsigned inheritor)
  112. \ingroup API_Scheduling_Contexts
  113. Indicate which context whill inherit the resources of this context
  114. when he will be deleted.
  115. \fn void starpu_sched_ctx_set_context(unsigned *sched_ctx_id)
  116. \ingroup API_Scheduling_Contexts
  117. Set the scheduling context the subsequent tasks will be submitted to
  118. \fn unsigned starpu_sched_ctx_get_context(void)
  119. \ingroup API_Scheduling_Contexts
  120. Return the scheduling context the tasks are currently submitted to,
  121. or ::STARPU_NMAX_SCHED_CTXS if no default context has been defined
  122. by calling the function starpu_sched_ctx_set_context().
  123. \fn void starpu_sched_ctx_stop_task_submission(void)
  124. \ingroup API_Scheduling_Contexts
  125. Stop submitting tasks from the empty context list until the next time
  126. the context has time to check the empty context list
  127. \fn void starpu_sched_ctx_finished_submit(unsigned sched_ctx_id)
  128. \ingroup API_Scheduling_Contexts
  129. Indicate starpu that the application finished submitting to this
  130. context in order to move the workers to the inheritor as soon as
  131. possible.
  132. \fn unsigned starpu_sched_ctx_get_workers_list(unsigned sched_ctx_id, int **workerids)
  133. \ingroup API_Scheduling_Contexts
  134. Returns the list of workers in the array \p workerids, the returned value is the
  135. number of workers. The user should free the \p workerids table after finishing
  136. using it (it is allocated inside the function with the proper size)
  137. \fn unsigned starpu_sched_ctx_get_nworkers(unsigned sched_ctx_id)
  138. \ingroup API_Scheduling_Contexts
  139. Return the number of workers managed by the specified contexts
  140. (Usually needed to verify if it manages any workers or if it should be
  141. blocked)
  142. \fn unsigned starpu_sched_ctx_get_nshared_workers(unsigned sched_ctx_id, unsigned sched_ctx_id2)
  143. \ingroup API_Scheduling_Contexts
  144. Return the number of workers shared by two contexts.
  145. \fn unsigned starpu_sched_ctx_contains_worker(int workerid, unsigned sched_ctx_id)
  146. \ingroup API_Scheduling_Contexts
  147. Return 1 if the worker belongs to the context and 0 otherwise
  148. \fn unsigned starpu_sched_ctx_worker_get_id(unsigned sched_ctx_id)
  149. \ingroup API_Scheduling_Contexts
  150. Return the workerid if the worker belongs to the context and -1 otherwise.
  151. If the thread calling this function is not a worker the function returns -1
  152. as it calls the function starpu_worker_get_id().
  153. \fn unsigned starpu_sched_ctx_overlapping_ctxs_on_worker(int workerid)
  154. \ingroup API_Scheduling_Contexts
  155. Check if a worker is shared between several contexts
  156. @name Scheduling Context Priorities
  157. \ingroup API_Scheduling_Contexts
  158. \def STARPU_MIN_PRIO
  159. \ingroup API_Scheduling_Contexts
  160. Provided for legacy reasons.
  161. \def STARPU_MAX_PRIO
  162. \ingroup API_Scheduling_Contexts
  163. Provided for legacy reasons.
  164. \def STARPU_DEFAULT_PRIO
  165. \ingroup API_Scheduling_Contexts
  166. By convention, the default priority level should be 0 so that we can
  167. statically allocate tasks with a default priority.
  168. \fn int starpu_sched_ctx_set_min_priority(unsigned sched_ctx_id, int min_prio)
  169. \ingroup API_Scheduling_Contexts
  170. Defines the minimum task priority level supported by the scheduling
  171. policy of the given scheduler context. The default minimum priority
  172. level is the same as the default priority level which is 0 by
  173. convention. The application may access that value by calling the function
  174. starpu_sched_ctx_get_min_priority(). This function should only
  175. be called from the initialization method of the scheduling policy, and
  176. should not be used directly from the application.
  177. \fn int starpu_sched_ctx_set_max_priority(unsigned sched_ctx_id, int max_prio)
  178. \ingroup API_Scheduling_Contexts
  179. Defines the maximum priority level supported by the scheduling policy
  180. of the given scheduler context. The default maximum priority level is
  181. 1. The application may access that value by calling the
  182. starpu_sched_ctx_get_max_priority function. This function should only
  183. be called from the initialization method of the scheduling policy, and
  184. should not be used directly from the application.
  185. \fn int starpu_sched_ctx_get_min_priority(unsigned sched_ctx_id)
  186. \ingroup API_Scheduling_Contexts
  187. Returns the current minimum priority level supported by the scheduling
  188. policy of the given scheduler context.
  189. \fn int starpu_sched_ctx_get_max_priority(unsigned sched_ctx_id)
  190. \ingroup API_Scheduling_Contexts
  191. Returns the current maximum priority level supported by the scheduling
  192. policy of the given scheduler context.
  193. \fn int starpu_sched_ctx_min_priority_is_set(unsigned sched_ctx_id)
  194. \ingroup API_Scheduling_Contexts
  195. todo
  196. \fn int starpu_sched_ctx_max_priority_is_set(unsigned sched_ctx_id)
  197. \ingroup API_Scheduling_Contexts
  198. todo
  199. @name Scheduling Context Worker Collection
  200. \ingroup API_Scheduling_Contexts
  201. \fn struct starpu_worker_collection *starpu_sched_ctx_create_worker_collection(unsigned sched_ctx_id, enum starpu_worker_collection_type type)
  202. \ingroup API_Scheduling_Contexts
  203. Create a worker collection of the type indicated by the last parameter
  204. for the context specified through the first parameter.
  205. \fn void starpu_sched_ctx_delete_worker_collection(unsigned sched_ctx_id)
  206. \ingroup API_Scheduling_Contexts
  207. Delete the worker collection of the specified scheduling context
  208. \fn struct starpu_worker_collection *starpu_sched_ctx_get_worker_collection(unsigned sched_ctx_id)
  209. \ingroup API_Scheduling_Contexts
  210. Return the worker collection managed by the indicated context
  211. @name Scheduling Context Link with Hypervisor
  212. \ingroup API_Scheduling_Contexts
  213. \fn void starpu_sched_ctx_set_perf_counters(unsigned sched_ctx_id, void *perf_counters)
  214. \ingroup API_Scheduling_Contexts
  215. Indicates to starpu the pointer to the performance counter
  216. \fn void starpu_sched_ctx_call_pushed_task_cb(int workerid, unsigned sched_ctx_id)
  217. \ingroup API_Scheduling_Contexts
  218. Callback that lets the scheduling policy tell the hypervisor that a
  219. task was pushed on a worker
  220. \fn void starpu_sched_ctx_notify_hypervisor_exists(void)
  221. \ingroup API_Scheduling_Contexts
  222. Allow the hypervisor to let starpu know he's initialised
  223. \fn unsigned starpu_sched_ctx_check_if_hypervisor_exists(void)
  224. \ingroup API_Scheduling_Contexts
  225. Ask starpu if he is informed if the hypervisor is initialised
  226. \fn void starpu_sched_ctx_set_policy_data(unsigned sched_ctx_id, void *policy_data)
  227. \ingroup API_Scheduling_Contexts
  228. Allocate the scheduling policy data (private information of the scheduler like queues, variables,
  229. additional condition variables) the context
  230. \fn void *starpu_sched_ctx_get_policy_data(unsigned sched_ctx_id)
  231. \ingroup API_Scheduling_Contexts
  232. Return the scheduling policy data (private information of the scheduler) of the contexts previously
  233. assigned to.
  234. \fn void *starpu_sched_ctx_exec_parallel_code(void* (*func)(void*), void *param, unsigned sched_ctx_id)
  235. \ingroup API_Scheduling_Contexts
  236. execute any parallel code on the workers of the sched_ctx (workers are blocked)
  237. \fn int starpu_sched_ctx_get_nready_tasks(unsigned sched_ctx_id)
  238. \ingroup API_Scheduling_Contexts
  239. todo
  240. \fn double starpu_sched_ctx_get_nready_flops(unsigned sched_ctx_id)
  241. \ingroup API_Scheduling_Contexts
  242. todo
  243. */