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);}); 
}