フローグラフ・アナライザーは、入れ子になったインテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) のアルゴリズムや OpenMP* 並列領域など、複数レベルの並列処理を含むアプリケーションを視覚化することができます。この機能を使用するには、並列ランタイム・ライブラリーのサポートが必要であり、TBB フローグラフと合わせて利用できます。
次のサンプルコードは、oneTBB フローグラフ、oneTBB の parallel_for アルゴリズム、および OpenMP* 並列領域を組み合わせて入れ子になった並列処理の例です。
#include "tbb/tbb.h"
#include "tbb/flow_graph.h"
#include<omp.h>
#include <iostream>
using namespace tbb;
using namespace tbb::flow;
int main() {
graph g;
const int size = 20;
continue_node< continue_msg> hello( g,
[]( const continue_msg &) {
std::cout << "Hello\n";
tbb::parallel_for(0, size, 1, [=](int k) {
std::cout << k << "\n"; });
});
continue_node< continue_msg> world( g,
[]( const continue_msg &)
std::cout << " World\n";
#pragma omp parallel for
for (int i=0; i<20; i++) {
std::cout << i <<"\n";
}
}
);
make_edge(hello, world);
hello.try_put(continue_msg());
g.wait_for_all();
return 0;
}
oneTBB は、並列アルゴリズムの一般的なトレースを可能にします。これは、デフォルトで有効であり、フローグラフ・アナライザーのトレースコレクターによってアクティブ化されます。
これにより、フローグラフ・アナライザーは、入れ子になったアルゴリズムと入れ子ではないアルゴリズムで oneTBB ライブラリーのアクティビティーを表示できます。タスクのコンテキスト切り替えをキャプチャーし、フローグラフ・アナライザーで視覚化できます。このワークはタイムラインのタスクと類似しており、アルゴリズムに応じて名前が与えられます (parallel_for など)。
この情報は、ユーザー定義のタスクグループでは利用できないことがあります。
フローグラフ・アナライザーの OpenMP* テクノロジーのサポートに関する詳細は、OpenMP* アプリケーションの実験的サポートをご覧ください。