フローグラフ・アナライザーの入れ子になった並列処理

フローグラフ・アナライザーは、入れ子になったインテル® 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;  
}   
    

入れ子になったインテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) アルゴリズムのトレース

oneTBB は、並列アルゴリズムの一般的なトレースを可能にします。これは、デフォルトで有効であり、フローグラフ・アナライザーのトレースコレクターによってアクティブ化されます。

これにより、フローグラフ・アナライザーは、入れ子になったアルゴリズムと入れ子ではないアルゴリズムで oneTBB ライブラリーのアクティビティーを表示できます。タスクのコンテキスト切り替えをキャプチャーし、フローグラフ・アナライザーで視覚化できます。このワークはタイムラインのタスクと類似しており、アルゴリズムに応じて名前が与えられます (parallel_for など)。

この情報は、ユーザー定義のタスクグループでは利用できないことがあります。

入れ子になった OpenMP* アルゴリズムのトレース

フローグラフ・アナライザーの OpenMP* テクノロジーのサポートに関する詳細は、OpenMP* アプリケーションの実験的サポートをご覧ください。