27 #ifndef EMBB_MTAPI_GROUP_H_ 28 #define EMBB_MTAPI_GROUP_H_ 30 #include <embb/mtapi/c/mtapi.h> 31 #include <embb/mtapi/job.h> 32 #include <embb/mtapi/task.h> 33 #include <embb/mtapi/task_attributes.h> 34 #include <embb/mtapi/group_attributes.h> 69 ) : handle_(other.handle_) {
81 handle_ = other.handle_;
100 template <
typename ARGS,
typename RES>
102 mtapi_task_id_t task_id,
104 const ARGS * arguments,
108 return Start(task_id,
110 arguments, internal::SizeOfType<ARGS>(),
111 results, internal::SizeOfType<RES>(),
121 template <
typename ARGS,
typename RES>
123 mtapi_task_id_t task_id,
125 const ARGS * arguments,
128 return Start(task_id,
130 arguments, internal::SizeOfType<ARGS>(),
131 results, internal::SizeOfType<RES>(),
132 MTAPI_DEFAULT_TASK_ATTRIBUTES);
141 template <
typename ARGS,
typename RES>
144 const ARGS * arguments,
148 return Start(MTAPI_TASK_ID_NONE,
150 arguments, internal::SizeOfType<ARGS>(),
151 results, internal::SizeOfType<RES>(),
161 template <
typename ARGS,
typename RES>
164 const ARGS * arguments,
167 return Start(MTAPI_TASK_ID_NONE,
169 arguments, internal::SizeOfType<ARGS>(),
170 results, internal::SizeOfType<RES>(),
171 MTAPI_DEFAULT_TASK_ATTRIBUTES);
182 mtapi_timeout_t timeout,
188 mtapi_status_t status;
204 return WaitAny(MTAPI_INFINITE, result);
213 mtapi_timeout_t timeout
216 return WaitAny(timeout, MTAPI_NULL);
225 return WaitAny(MTAPI_INFINITE, MTAPI_NULL);
235 mtapi_timeout_t timeout
238 mtapi_status_t status;
250 return WaitAll(MTAPI_INFINITE);
275 mtapi_group_attributes_t
const * attributes
278 mtapi_status_t status;
280 internal::CheckStatus(status);
290 mtapi_task_id_t task_id,
291 mtapi_job_hndl_t job,
292 const void * arguments,
293 mtapi_size_t arguments_size,
295 mtapi_size_t results_size,
296 mtapi_task_attributes_t
const * attributes
299 mtapi_status_t status;
300 mtapi_task_hndl_t task_hndl =
302 results, results_size, attributes, handle_,
304 internal::CheckStatus(status);
305 return Task(task_hndl);
308 mtapi_group_hndl_t handle_;
314 #endif // EMBB_MTAPI_GROUP_H_ Definition: lock_free_mpmc_queue.h:40
mtapi_status_t WaitAll(mtapi_timeout_t timeout)
Waits for all Task in the Group to finish for timeout milliseconds.
Definition: group.h:234
A singleton representing the MTAPI runtime.
Definition: node.h:70
mtapi_status_t WaitAny(void **result)
Waits for any Task in the Group to finish and retrieves the result buffer given in Start()...
Definition: group.h:199
mtapi_status_t WaitAny(mtapi_timeout_t timeout, void **result)
Waits for any Task in the Group to finish for timeout milliseconds and retrieves the result buffer gi...
Definition: group.h:181
mtapi_group_hndl_t GetInternal() const
Returns the internal representation of this object.
Definition: group.h:260
mtapi_status_t WaitAll()
Waits for all Task in the Group to finish.
Definition: group.h:249
void mtapi_group_wait_all(const mtapi_group_hndl_t group, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of a task group.
mtapi_status_t WaitAny(mtapi_timeout_t timeout)
Waits for any Task in the Group to finish for timeout milliseconds.
Definition: group.h:212
mtapi_status_t WaitAny()
Waits for any Task in the Group to finish.
Definition: group.h:224
mtapi_group_hndl_t mtapi_group_create(const mtapi_group_id_t group_id, const mtapi_group_attributes_t *attributes, mtapi_status_t *status)
This function creates a task group and returns a handle to the group.
mtapi_task_attributes_t const & GetInternal() const
Returns the internal representation of this object.
Definition: task_attributes.h:148
Represents a collection of Actions.
Definition: job.h:41
Task Start(Job const &job, const ARGS *arguments, RES *results)
Starts a new Task in this Group.
Definition: group.h:162
Group & operator=(Group const &other)
Copies a Group.
Definition: group.h:78
Contains attributes of a Task.
Definition: task_attributes.h:42
void Delete()
Deletes a Group object.
Definition: group.h:89
mtapi_task_hndl_t mtapi_task_start(const mtapi_task_id_t task_id, const mtapi_job_hndl_t job, const void *arguments, const mtapi_size_t arguments_size, void *result_buffer, const mtapi_size_t result_size, const mtapi_task_attributes_t *attributes, const mtapi_group_hndl_t group, mtapi_status_t *status)
This function schedules a task for execution.
Task Start(Job const &job, const ARGS *arguments, RES *results, TaskAttributes const &attributes)
Starts a new Task in this Group.
Definition: group.h:142
Group()
Constructs an invalid Group.
Definition: group.h:58
Group(Group const &other)
Copies a Group.
Definition: group.h:67
void mtapi_group_delete(const mtapi_group_hndl_t group, mtapi_status_t *status)
This function deletes a task group.
Represents a facility to wait for multiple related Tasks.
Definition: group.h:52
Task Start(mtapi_task_id_t task_id, Job const &job, const ARGS *arguments, RES *results, TaskAttributes const &attributes)
Starts a new Task in this Group.
Definition: group.h:101
void mtapi_group_wait_any(const mtapi_group_hndl_t group, void **result, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function waits for the completion of any task in a task group.
Task Start(mtapi_task_id_t task_id, Job const &job, const ARGS *arguments, RES *results)
Starts a new Task in this Group.
Definition: group.h:122
Common (static) functionality for unaligned and aligned memory allocation.
Definition: memory_allocation.h:55
A Task represents a running Action of a specific Job.
Definition: task.h:41
mtapi_job_hndl_t GetInternal() const
Returns the internal representation of this object.
Definition: job.h:80