共通の入力で動作するタスクの特定

インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) は、トレースにタスクが動作しているフレーム番号などのメタ情報を追加します。このメタデータを使用して、実行中の各種パイプライン・ステージを追跡できます (不均一なパイプラインの識別など)。次に、ユーザー・イベント・トレース・インターフェイスを使用して、フローグラフ・アナライザーのデータの色分け機能を有効にする方法を示します。

太字で強調されるコード行は、フローグラフ・アナライザーが任意の ID (フレーム ID) をグループタスクに追加するコードです。

#include "tbb/flow_graph.h"
#include "tbb/tbb_profiling.h"
#include <string>
#include <vector>
int main() {
  tbb::flow::graph g;
  const int max_frames = 20;
  std::vector<tbb::profiling::event*> e;
  for(int i=0; i<nbr_of_frames;++i)
    e.push_back(new tbb::profiling::event(std::to_string(i)));
  tbb::flow::source_node<int> source( g,
    [&]( int &v) -> bool {
      static int i = 0;  
      if( i < max_frames ) {
        e[i]->emit();
        v = i++; 
        return true;
      }
      return false;
    }, false);
  tbb::flow::function_node<int> foo( g, tbb::flow::unlimited,
    []( const int &input1) -> int {
      tbb::profiling::event::emit(std::to_string(input1));
      return input1;
    });
  tbb::flow::function_node<int> bar( g, tbb::flow::unlimited,TBB
    []( const int &input1) -> int {
      tbb::profiling::event::emit(std::to_string(input1));
      return input1;
    });
  make_edge(source, foo);
  make_edge(source, bar);
  source.activate();
  g.wait_for_all();
  return 0;  
}

TBB_USE_THREADING_TOOLS マクロを定義してコードをコンパイルし、tbb ライブラリーとリンクします。

フローグラフ・アナライザーでデータの色分け機能を有効にするには、次の操作を行います。

  1. 次のいずれかを行うイベントに ID を割り当てます。

    • オプション 1:

      1. イベント・オブジェクトやイベントの収集を事前に作成します。唯一の引数はイベントを識別する文字列 (データ ID) です。

      2. タスクにデータ ID をタグ付けするため、オブジェクトの emit 関数を呼び出します。

    • オプション 2: 静的関数をインラインで (タスク本体から) 呼び出します。
  2. 下にあるペインの [Execution Trace Views] タブで、ドロップダウン・リストから [Color By Data] を選択します。

結果: フローグラフ・アナライザーは、同じデータ ID を共有するタスクをグループ化して同じ色で表します。

同じデータ ID を共有するタスクは同じ色で表示されます