27 #ifndef EMBB_MTAPI_QUEUE_H_ 28 #define EMBB_MTAPI_QUEUE_H_ 30 #include <embb/mtapi/c/mtapi.h> 31 #include <embb/mtapi/job.h> 32 #include <embb/mtapi/task.h> 33 #include <embb/mtapi/group.h> 34 #include <embb/mtapi/queue_attributes.h> 35 #include <embb/mtapi/task_attributes.h> 69 ) : handle_(other.handle_) {
82 handle_ = other.handle_;
100 mtapi_status_t status;
102 internal::CheckStatus(status);
111 mtapi_timeout_t timeout
113 mtapi_status_t status;
115 internal::CheckStatus(status);
124 Disable(MTAPI_INFINITE);
133 template <
typename ARGS,
typename RES>
135 mtapi_task_id_t task_id,
136 const ARGS * arguments,
141 return Enqueue(task_id,
142 arguments, internal::SizeOfType<ARGS>(),
143 results, internal::SizeOfType<RES>(),
153 template <
typename ARGS,
typename RES>
155 mtapi_task_id_t task_id,
156 const ARGS * arguments,
160 return Enqueue(task_id,
161 arguments, internal::SizeOfType<ARGS>(),
162 results, internal::SizeOfType<RES>(),
163 MTAPI_DEFAULT_TASK_ATTRIBUTES, group.
GetInternal());
172 template <
typename ARGS,
typename RES>
174 mtapi_task_id_t task_id,
175 const ARGS * arguments,
179 return Enqueue(task_id,
180 arguments, internal::SizeOfType<ARGS>(),
181 results, internal::SizeOfType<RES>(),
191 template <
typename ARGS,
typename RES>
193 mtapi_task_id_t task_id,
194 const ARGS * arguments,
197 return Enqueue(task_id,
198 arguments, internal::SizeOfType<ARGS>(),
199 results, internal::SizeOfType<RES>(),
200 MTAPI_DEFAULT_TASK_ATTRIBUTES, MTAPI_GROUP_NONE);
209 template <
typename ARGS,
typename RES>
211 const ARGS * arguments,
216 return Enqueue(MTAPI_TASK_ID_NONE,
217 arguments, internal::SizeOfType<ARGS>(),
218 results, internal::SizeOfType<RES>(),
228 template <
typename ARGS,
typename RES>
230 const ARGS * arguments,
234 return Enqueue(MTAPI_TASK_ID_NONE,
235 arguments, internal::SizeOfType<ARGS>(),
236 results, internal::SizeOfType<RES>(),
237 MTAPI_DEFAULT_TASK_ATTRIBUTES, group.
GetInternal());
246 template <
typename ARGS,
typename RES>
248 const ARGS * arguments,
252 return Enqueue(MTAPI_TASK_ID_NONE,
253 arguments, internal::SizeOfType<ARGS>(),
254 results, internal::SizeOfType<RES>(),
264 template <
typename ARGS,
typename RES>
266 const ARGS * arguments,
269 return Enqueue(MTAPI_TASK_ID_NONE,
270 arguments, internal::SizeOfType<ARGS>(),
271 results, internal::SizeOfType<RES>(),
272 MTAPI_DEFAULT_TASK_ATTRIBUTES, MTAPI_GROUP_NONE);
291 mtapi_queue_id_t queue_id,
293 mtapi_queue_attributes_t
const * attributes
295 mtapi_status_t status;
297 attributes, &status);
298 internal::CheckStatus(status);
302 mtapi_task_id_t task_id,
303 const void * arguments,
304 mtapi_size_t arguments_size,
306 mtapi_size_t results_size,
307 mtapi_task_attributes_t
const * attributes,
308 mtapi_group_hndl_t group
310 mtapi_status_t status;
311 mtapi_task_hndl_t task_hndl =
313 results, results_size, attributes, group,
315 internal::CheckStatus(status);
316 return Task(task_hndl);
319 mtapi_queue_hndl_t handle_;
325 #endif // EMBB_MTAPI_QUEUE_H_ Definition: lock_free_mpmc_queue.h:40
A singleton representing the MTAPI runtime.
Definition: node.h:70
Task Enqueue(const ARGS *arguments, RES *results)
Enqueues a new Task.
Definition: queue.h:265
mtapi_group_hndl_t GetInternal() const
Returns the internal representation of this object.
Definition: group.h:260
void mtapi_queue_enable(const mtapi_queue_hndl_t queue, mtapi_status_t *status)
This function may be called from any node with a valid queue handle to re-enable a queue previously d...
Task Enqueue(mtapi_task_id_t task_id, const ARGS *arguments, RES *results, TaskAttributes const &attributes)
Enqueues a new Task.
Definition: queue.h:173
mtapi_queue_hndl_t mtapi_queue_create(const mtapi_queue_id_t queue_id, const mtapi_job_hndl_t job, const mtapi_queue_attributes_t *attributes, mtapi_status_t *status)
This function creates a software queue object and associates it with the specified job...
void Delete()
Deletes a Queue object.
Definition: queue.h:90
void mtapi_queue_disable(const mtapi_queue_hndl_t queue, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function disables the specified queue in such a way that it can be resumed later.
void mtapi_queue_delete(const mtapi_queue_hndl_t queue, const mtapi_timeout_t timeout, mtapi_status_t *status)
This function deletes the specified software queue.
Task Enqueue(const ARGS *arguments, RES *results, TaskAttributes const &attributes, Group const &group)
Enqueues a new Task.
Definition: queue.h:210
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 Enqueue(const ARGS *arguments, RES *results, Group const &group)
Enqueues a new Task.
Definition: queue.h:229
Allows for stream processing, either ordered or unordered.
Definition: queue.h:52
Contains attributes of a Task.
Definition: task_attributes.h:42
mtapi_queue_hndl_t GetInternal() const
Returns the internal representation of this object.
Definition: queue.h:282
Queue & operator=(Queue const &other)
Copies a Queue.
Definition: queue.h:79
Queue()
Constructs an invalid Queue.
Definition: queue.h:58
Task Enqueue(mtapi_task_id_t task_id, const ARGS *arguments, RES *results, Group const &group)
Enqueues a new Task.
Definition: queue.h:154
Queue(Queue const &other)
Copies a Queue.
Definition: queue.h:67
void Disable(mtapi_timeout_t timeout)
Disables the Queue.
Definition: queue.h:110
void Enable()
Enables the Queue.
Definition: queue.h:99
Task Enqueue(const ARGS *arguments, RES *results, TaskAttributes const &attributes)
Enqueues a new Task.
Definition: queue.h:247
Represents a facility to wait for multiple related Tasks.
Definition: group.h:52
Task Enqueue(mtapi_task_id_t task_id, const ARGS *arguments, RES *results, TaskAttributes const &attributes, Group const &group)
Enqueues a new Task.
Definition: queue.h:134
mtapi_task_hndl_t mtapi_task_enqueue(const mtapi_task_id_t task_id, const mtapi_queue_hndl_t queue, 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 using a queue.
Task Enqueue(mtapi_task_id_t task_id, const ARGS *arguments, RES *results)
Enqueues a new Task.
Definition: queue.h:192
Common (static) functionality for unaligned and aligned memory allocation.
Definition: memory_allocation.h:55
void Disable()
Disables the Queue.
Definition: queue.h:123
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