インテル® 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 ライブラリーとリンクします。
フローグラフ・アナライザーでデータの色分け機能を有効にするには、次の操作を行います。
次のいずれかを行うイベントに ID を割り当てます。
オプション 1:
イベント・オブジェクトやイベントの収集を事前に作成します。唯一の引数はイベントを識別する文字列 (データ ID) です。
タスクにデータ ID をタグ付けするため、オブジェクトの emit 関数を呼び出します。
結果: フローグラフ・アナライザーは、同じデータ ID を共有するタスクをグループ化して同じ色で表します。
