scheduling_contexts.doxy 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227
  1. /*
  2. * This file is part of the StarPU Handbook.
  3. * Copyright (C) 2009--2011 Universit@'e de Bordeaux 1
  4. * Copyright (C) 2010, 2011, 2012, 2013 Centre National de la Recherche Scientifique
  5. * Copyright (C) 2011, 2012 Institut National de Recherche en Informatique et Automatique
  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 starpu_sched_ctx_performance_counters::notify_idle_cycle
  21. Informs the hypervisor for how long a worker has been idle in the specified context
  22. \var starpu_sched_ctx_performance_counters::notify_idle_end
  23. Informs the hypervisor that after a period of idle, the worker has just executed a task in the specified context. The idle counter it though reset.
  24. \var starpu_sched_ctx_performance_counters::notify_pushed_task
  25. Notifies the hypervisor that a task has been scheduled on the queue of the worker corresponding to the specified context
  26. \var starpu_sched_ctx_performance_counters::notify_poped_task
  27. Informs the hypervisor that a task executing a specified number of instructions has been poped from the worker
  28. \var starpu_sched_ctx_performance_counters::notify_post_exec_hook
  29. Notifies the hypervisor that a task has just been executed
  30. \var starpu_sched_ctx_performance_counters::notify_submitted_job
  31. Notifies the hypervisor that a task has just been submitted
  32. \var starpu_sched_ctx_performance_counters::notify_delete_context
  33. Notifies the hypervisor that the context was deleted
  34. @name Scheduling Contexts Basic API
  35. \ingroup API_Scheduling_Contexts
  36. \fn unsigned starpu_sched_ctx_create(const char *policy_name, int *workerids_ctx, int nworkers_ctx, const char *sched_ctx_name)
  37. \ingroup API_Scheduling_Contexts
  38. This function creates a scheduling context which uses the scheduling
  39. policy \p policy_name and assigns the workers in \p workerids_ctx to
  40. execute the tasks submitted to it.
  41. The return value represents the identifier of the context that has
  42. just been created. It will be further used to indicate the context the
  43. tasks will be submitted to. The return value should be at most
  44. \ref STARPU_NMAX_SCHED_CTXS.
  45. \fn unsigned starpu_sched_ctx_create_with_custom_policy(struct starpu_sched_policy *policy, int *workerids_ctx, int nworkers_ctx, const char *sched_ctx_name)
  46. \ingroup API_Scheduling_Contexts
  47. This function creates a scheduling context which uses the scheduling
  48. policy \p policy (the pointer to the custom scheduling policy) and assigns the workers in \p workerids_ctx to
  49. execute the tasks submitted to it.
  50. The return value represents the identifier of the context that has
  51. just been created. It will be further used to indicate the context the
  52. tasks will be submitted to. The return value should be at most
  53. \ref STARPU_NMAX_SCHED_CTXS.
  54. \fn unsigned starpu_sched_ctx_create_inside_interval(const char *policy_name, const char *sched_name, int min_ncpus, int max_ncpus, int min_ngpus, int max_ngpus, unsigned allow_overlap)
  55. \ingroup API_Scheduling_Contexts
  56. Create a context indicating an approximate interval of resources
  57. \fn void starpu_sched_ctx_add_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id)
  58. \ingroup API_Scheduling_Contexts
  59. This function adds dynamically the workers in \p workerids_ctx to the
  60. context \p sched_ctx_id. The last argument cannot be greater than
  61. \ref STARPU_NMAX_SCHED_CTXS.
  62. \fn void starpu_sched_ctx_remove_workers(int *workerids_ctx, int nworkers_ctx, unsigned sched_ctx_id)
  63. \ingroup API_Scheduling_Contexts
  64. This function removes the workers in \p workerids_ctx from the context
  65. \p sched_ctx_id. The last argument cannot be greater than
  66. STARPU_NMAX_SCHED_CTXS.
  67. \fn void starpu_sched_ctx_delete(unsigned sched_ctx_id)
  68. \ingroup API_Scheduling_Contexts
  69. Delete scheduling context \p sched_ctx_id and transfer remaining
  70. workers to the inheritor scheduling context.
  71. \fn void starpu_sched_ctx_set_inheritor(unsigned sched_ctx_id, unsigned inheritor)
  72. \ingroup API_Scheduling_Contexts
  73. Indicate which context whill inherit the resources of this context
  74. when he will be deleted.
  75. \fn void starpu_sched_ctx_set_context(unsigned *sched_ctx_id)
  76. \ingroup API_Scheduling_Contexts
  77. Set the scheduling context the subsequent tasks will be submitted to
  78. \fn unsigned starpu_sched_ctx_get_context(void)
  79. \ingroup API_Scheduling_Contexts
  80. Return the scheduling context the tasks are currently submitted to
  81. \fn void starpu_sched_ctx_stop_task_submission(void)
  82. \ingroup API_Scheduling_Contexts
  83. Stop submitting tasks from the empty context list until the next time
  84. the context has time to check the empty context list
  85. \fn void starpu_sched_ctx_finished_submit(unsigned sched_ctx_id)
  86. \ingroup API_Scheduling_Contexts
  87. Indicate starpu that the application finished submitting to this
  88. context in order to move the workers to the inheritor as soon as
  89. possible.
  90. \fn unsigned starpu_sched_ctx_get_workers_list(unsigned sched_ctx_id, int **workerids)
  91. \ingroup API_Scheduling_Contexts
  92. Returns the list of workers in the array \p workerids, the returned value is the
  93. number of workers. The user should free the \p workerids table after finishing
  94. using it (it is allocated inside the function with the proper size)
  95. \fn unsigned starpu_sched_ctx_get_nworkers(unsigned sched_ctx_id)
  96. \ingroup API_Scheduling_Contexts
  97. Return the number of workers managed by the specified contexts
  98. (Usually needed to verify if it manages any workers or if it should be
  99. blocked)
  100. \fn unsigned starpu_sched_ctx_get_nshared_workers(unsigned sched_ctx_id, unsigned sched_ctx_id2)
  101. \ingroup API_Scheduling_Contexts
  102. Return the number of workers shared by two contexts.
  103. \fn unsigned starpu_sched_ctx_contains_worker(int workerid, unsigned sched_ctx_id)
  104. \ingroup API_Scheduling_Contexts
  105. Return 1 if the worker belongs to the context and 0 otherwise
  106. \fn unsigned starpu_sched_ctx_overlapping_ctxs_on_worker(int workerid)
  107. \ingroup API_Scheduling_Contexts
  108. Check if a worker is shared between several contexts
  109. @name Scheduling Context Priorities
  110. \ingroup API_Scheduling_Contexts
  111. \def STARPU_MIN_PRIO
  112. \ingroup API_Scheduling_Contexts
  113. Provided for legacy reasons.
  114. \def STARPU_MAX_PRIO
  115. \ingroup API_Scheduling_Contexts
  116. Provided for legacy reasons.
  117. \def STARPU_DEFAULT_PRIO
  118. \ingroup API_Scheduling_Contexts
  119. By convention, the default priority level should be 0 so that we can
  120. statically allocate tasks with a default priority.
  121. \fn int starpu_sched_ctx_set_min_priority(unsigned sched_ctx_id, int min_prio)
  122. \ingroup API_Scheduling_Contexts
  123. Defines the minimum task priority level supported by the scheduling
  124. policy of the given scheduler context. The default minimum priority
  125. level is the same as the default priority level which is 0 by
  126. convention. The application may access that value by calling the function
  127. starpu_sched_ctx_get_min_priority(). This function should only
  128. be called from the initialization method of the scheduling policy, and
  129. should not be used directly from the application.
  130. \fn int starpu_sched_ctx_set_max_priority(unsigned sched_ctx_id, int max_prio)
  131. \ingroup API_Scheduling_Contexts
  132. Defines the maximum priority level supported by the scheduling policy
  133. of the given scheduler context. The default maximum priority level is
  134. 1. The application may access that value by calling the
  135. starpu_sched_ctx_get_max_priority function. This function should only
  136. be called from the initialization method of the scheduling policy, and
  137. should not be used directly from the application.
  138. \fn int starpu_sched_ctx_get_min_priority(unsigned sched_ctx_id)
  139. \ingroup API_Scheduling_Contexts
  140. Returns the current minimum priority level supported by the scheduling
  141. policy of the given scheduler context.
  142. \fn int starpu_sched_ctx_get_max_priority(unsigned sched_ctx_id)
  143. \ingroup API_Scheduling_Contexts
  144. Returns the current maximum priority level supported by the scheduling
  145. policy of the given scheduler context.
  146. @name Scheduling Context Worker Collection
  147. \ingroup API_Scheduling_Contexts
  148. \fn struct starpu_worker_collection *starpu_sched_ctx_create_worker_collection(unsigned sched_ctx_id, enum starpu_worker_collection_type type)
  149. \ingroup API_Scheduling_Contexts
  150. Create a worker collection of the type indicated by the last parameter
  151. for the context specified through the first parameter.
  152. \fn void starpu_sched_ctx_delete_worker_collection(unsigned sched_ctx_id)
  153. \ingroup API_Scheduling_Contexts
  154. Delete the worker collection of the specified scheduling context
  155. \fn struct starpu_worker_collection *starpu_sched_ctx_get_worker_collection(unsigned sched_ctx_id)
  156. \ingroup API_Scheduling_Contexts
  157. Return the worker collection managed by the indicated context
  158. @name Scheduling Context Link with Hypervisor
  159. \ingroup API_Scheduling_Contexts
  160. \fn void starpu_sched_ctx_set_perf_counters(unsigned sched_ctx_id, void *perf_counters)
  161. \ingroup API_Scheduling_Contexts
  162. Indicates to starpu the pointer to the performance counter
  163. \fn void starpu_sched_ctx_call_pushed_task_cb(int workerid, unsigned sched_ctx_id)
  164. \ingroup API_Scheduling_Contexts
  165. Callback that lets the scheduling policy tell the hypervisor that a
  166. task was pushed on a worker
  167. \fn void starpu_sched_ctx_notify_hypervisor_exists(void)
  168. \ingroup API_Scheduling_Contexts
  169. Allow the hypervisor to let starpu know he's initialised
  170. \fn unsigned starpu_sched_ctx_check_if_hypervisor_exists(void)
  171. \ingroup API_Scheduling_Contexts
  172. Ask starpu if he is informed if the hypervisor is initialised
  173. \fn void starpu_sched_ctx_set_policy_data(unsigned sched_ctx_id, void *policy_data)
  174. \ingroup API_Scheduling_Contexts
  175. Allocate the scheduling policy data (private information of the scheduler like queues, variables,
  176. additional condition variables) the context
  177. \fn void *starpu_sched_ctx_get_policy_data(unsigned sched_ctx_id)
  178. \ingroup API_Scheduling_Contexts
  179. Return the scheduling policy data (private information of the scheduler) of the contexts previously
  180. assigned to.
  181. \fn void *starpu_sched_ctx_exec_parallel_code(void* (*func)(void*), void *param, unsigned sched_ctx_id)
  182. \ingroup API_Scheduling_Contexts
  183. execute any parallel code on the workers of the sched_ctx (workers are blocked)
  184. */