parallel_invoke
[algortihms.parallel_invoke]
複数の関数を並列に評価する関数テンプレート。
// <oneapi/tbb/parallel_invoke.h> ヘッダーで定義
namespace oneapi {
namespace tbb {
template<typename...Functions>
void parallel_invoke(Functions&&... fs);
} // namespace tbb
} // namespace oneapi
要件:
Functions
のすべてのメンバーのパラメーター・パックは、[function.objects] ISO C++ 標準の Function Objects の要件を満たしている必要があります。Functions
パラメーター・パック最後のメンバーは、task_group_context&
タイプである可能性があります。
parallel_invoke
に渡されたそれぞれのメンバーを並列に評価します。戻り値は無視されます。
アルゴリズムは、task_group_contextオブジェクトを受け入れることができるためアルゴリズムのタスクはこのコンテキストで実行されます。デフォルトでは、アルゴリズムは自身がバインドされているコンテキストで実行されます。
例
次の例では、f()
、g()
、h()
、および bar(1)
を並列に評価します。
#include
"oneapi/tbb/parallel_invoke.h"
extern void f();
extern void bar(int);
class MyFunctor {
int arg;
public:
MyFunctor(int a) : arg(a) {}
void operator()() const { bar(arg); }
};
void RunFunctionsInParallel() {
MyFunctor g(2);
MyFunctor h(3);
oneapi::tbb::parallel_invoke(f, g, h, []{bar(1);});
}