27 #ifndef EMBB_ALGORITHMS_INVOKE_H_ 28 #define EMBB_ALGORITHMS_INVOKE_H_ 30 #include <embb/base/function.h> 31 #include <embb/mtapi/mtapi.h> 34 namespace algorithms {
59 template<
typename Function1,
typename Function2, ...>
75 template<
typename Function1,
typename Function2, ...>
93 template<
typename Function>
100 explicit TaskWrapper(
103 : function_(function), task_() {
113 task_.
Wait(MTAPI_INFINITE);
129 class TaskWrapper<embb::mtapi::Job> {
135 explicit TaskWrapper(
138 : function_(function), task_() {
143 static_cast<void const *>(MTAPI_NULL),
144 static_cast<void *>(MTAPI_NULL),
152 task_.
Wait(MTAPI_INFINITE);
162 template<
typename Function1,
typename Function2>
167 internal::TaskWrapper<Function1> wrap1(func1, policy);
168 internal::TaskWrapper<Function2> wrap2(func2, policy);
171 template<
typename Function1,
typename Function2,
typename Function3>
177 internal::TaskWrapper<Function1> wrap1(func1, policy);
178 internal::TaskWrapper<Function2> wrap2(func2, policy);
179 internal::TaskWrapper<Function3> wrap3(func3, policy);
182 template<
typename Function1,
typename Function2,
typename Function3,
190 internal::TaskWrapper<Function1> wrap1(func1, policy);
191 internal::TaskWrapper<Function2> wrap2(func2, policy);
192 internal::TaskWrapper<Function3> wrap3(func3, policy);
193 internal::TaskWrapper<Function4> wrap4(func4, policy);
196 template<
typename Function1,
typename Function2,
typename Function3,
197 typename Function4,
typename Function5>
205 internal::TaskWrapper<Function1> wrap1(func1, policy);
206 internal::TaskWrapper<Function2> wrap2(func2, policy);
207 internal::TaskWrapper<Function3> wrap3(func3, policy);
208 internal::TaskWrapper<Function4> wrap4(func4, policy);
209 internal::TaskWrapper<Function5> wrap5(func5, policy);
212 template<
typename Function1,
typename Function2,
typename Function3,
213 typename Function4,
typename Function5,
typename Function6>
222 internal::TaskWrapper<Function1> wrap1(func1, policy);
223 internal::TaskWrapper<Function2> wrap2(func2, policy);
224 internal::TaskWrapper<Function3> wrap3(func3, policy);
225 internal::TaskWrapper<Function4> wrap4(func4, policy);
226 internal::TaskWrapper<Function5> wrap5(func5, policy);
227 internal::TaskWrapper<Function6> wrap6(func6, policy);
230 template<
typename Function1,
typename Function2,
typename Function3,
231 typename Function4,
typename Function5,
typename Function6,
242 internal::TaskWrapper<Function1> wrap1(func1, policy);
243 internal::TaskWrapper<Function2> wrap2(func2, policy);
244 internal::TaskWrapper<Function3> wrap3(func3, policy);
245 internal::TaskWrapper<Function4> wrap4(func4, policy);
246 internal::TaskWrapper<Function5> wrap5(func5, policy);
247 internal::TaskWrapper<Function6> wrap6(func6, policy);
248 internal::TaskWrapper<Function7> wrap7(func7, policy);
251 template<
typename Function1,
typename Function2,
typename Function3,
252 typename Function4,
typename Function5,
typename Function6,
253 typename Function7,
typename Function8>
264 internal::TaskWrapper<Function1> wrap1(func1, policy);
265 internal::TaskWrapper<Function2> wrap2(func2, policy);
266 internal::TaskWrapper<Function3> wrap3(func3, policy);
267 internal::TaskWrapper<Function4> wrap4(func4, policy);
268 internal::TaskWrapper<Function5> wrap5(func5, policy);
269 internal::TaskWrapper<Function6> wrap6(func6, policy);
270 internal::TaskWrapper<Function7> wrap7(func7, policy);
271 internal::TaskWrapper<Function8> wrap8(func8, policy);
274 template<
typename Function1,
typename Function2,
typename Function3,
275 typename Function4,
typename Function5,
typename Function6,
276 typename Function7,
typename Function8,
typename Function9>
288 internal::TaskWrapper<Function1> wrap1(func1, policy);
289 internal::TaskWrapper<Function2> wrap2(func2, policy);
290 internal::TaskWrapper<Function3> wrap3(func3, policy);
291 internal::TaskWrapper<Function4> wrap4(func4, policy);
292 internal::TaskWrapper<Function5> wrap5(func5, policy);
293 internal::TaskWrapper<Function6> wrap6(func6, policy);
294 internal::TaskWrapper<Function7> wrap7(func7, policy);
295 internal::TaskWrapper<Function8> wrap8(func8, policy);
296 internal::TaskWrapper<Function9> wrap9(func9, policy);
299 template<
typename Function1,
typename Function2,
typename Function3,
300 typename Function4,
typename Function5,
typename Function6,
301 typename Function7,
typename Function8,
typename Function9,
315 internal::TaskWrapper<Function1> wrap1(func1, policy);
316 internal::TaskWrapper<Function2> wrap2(func2, policy);
317 internal::TaskWrapper<Function3> wrap3(func3, policy);
318 internal::TaskWrapper<Function4> wrap4(func4, policy);
319 internal::TaskWrapper<Function5> wrap5(func5, policy);
320 internal::TaskWrapper<Function6> wrap6(func6, policy);
321 internal::TaskWrapper<Function7> wrap7(func7, policy);
322 internal::TaskWrapper<Function8> wrap8(func8, policy);
323 internal::TaskWrapper<Function9> wrap9(func9, policy);
324 internal::TaskWrapper<Function10> wrap10(func10, policy);
327 template<
typename Function1,
typename Function2>
333 template<
typename Function1,
typename Function2,
typename Function3>
341 template<
typename Function1,
typename Function2,
typename Function3,
351 template<
typename Function1,
typename Function2,
typename Function3,
352 typename Function4,
typename Function5>
362 template<
typename Function1,
typename Function2,
typename Function3,
363 typename Function4,
typename Function5,
typename Function6>
371 Invoke(func1, func2, func3, func4, func5, func6,
375 template<
typename Function1,
typename Function2,
typename Function3,
376 typename Function4,
typename Function5,
typename Function6,
386 Invoke(func1, func2, func3, func4, func5, func6, func7,
390 template<
typename Function1,
typename Function2,
typename Function3,
391 typename Function4,
typename Function5,
typename Function6,
392 typename Function7,
typename Function8>
402 Invoke(func1, func2, func3, func4, func5, func6, func7, func8,
406 template<
typename Function1,
typename Function2,
typename Function3,
407 typename Function4,
typename Function5,
typename Function6,
408 typename Function7,
typename Function8,
typename Function9>
419 Invoke(func1, func2, func3, func4, func5, func6, func7, func8, func9,
423 template<
typename Function1,
typename Function2,
typename Function3,
424 typename Function4,
typename Function5,
typename Function6,
425 typename Function7,
typename Function8,
typename Function9,
438 Invoke(func1, func2, func3, func4, func5, func6, func7, func8, func9, func10,
442 #endif // else DOXYGEN 447 #endif // EMBB_ALGORITHMS_INVOKE_H_ Definition: lock_free_mpmc_queue.h:40
static Node & GetInstance()
Gets the instance of the runtime system.
Function< ReturnType,[Arg1,..., Arg5]> MakeFunction(ClassType &obj, ReturnType(ClassType::*func)([Arg1,..., Arg5]))
Wraps an object and a member function pointer into a Function.
mtapi_status_t Wait(mtapi_timeout_t timeout)
Waits for Task to finish for timeout milliseconds.
Definition: task.h:86
void Invoke(Function1 func1, Function2 func2,..., const embb::mtapi::ExecutionPolicy &policy)
Spawns two to ten function objects or embb::mtapi::Job at once and runs them in parallel using the gi...
Task Start(SMPFunction const &func)
Starts a new Task.
Definition: node.h:193
Represents a collection of Actions.
Definition: job.h:41
Wraps function pointers, member function pointers, and functors with up to five arguments.
Definition: function.h:94
Contains attributes of a Task.
Definition: task_attributes.h:42
Describes the execution policy of a parallel algorithm.
Definition: execution_policy.h:48
TaskAttributes & SetPolicy(ExecutionPolicy const &policy)
Sets the ExecutionPolicy of a Task.
Definition: task_attributes.h:114
embb::base::Function< void > InvokeFunctionType
Function type used by Invoke.
Definition: invoke.h:47
Provides information about the status of the currently running Task.
Definition: task_context.h:41
A Task represents a running Action of a specific Job.
Definition: task.h:41