インテル® スレッディング・ビルディング・ブロックのコード解析

インテル® VTune™ プロファイラーを使用して、インテル® oneAPI スレッディング・ビルディング・ブロック (oneTBB) を使用したアプリケーションのパフォーマンス解析を行います。

アプリケーションがインテル® ランタイム・ライブラリーを使用する場合、次を実行できます。

インテル® C++ コンパイラーを使用すると、インテル® VTune™ プロファイラーからさらに包括的な診断情報を得ることができます。

ホットスポット解析で oneTBB の並列化効率の調査を始めます。アプリケーションの並列化レベルを見るには、[効率良い CPU 利用率の分布図] を確認します。分布図は、スレッドランタイムで費やされた時間を差し引いた有効時間を基に、アプリケーションの並列化レベルを示すことに注意してください。

アイドルまたは低い CPU 利用率で大部分の経過時間が費やされている場合、[上位のホットスポット] のリストを調査してください。フラグ付きの oneTBB 関数は、スケジュールのオーバーヘッドやインバランスなど非効率な並列処理により、アプリケーションが oneTBB のランタイムで CPU 時間を費やしている可能性があることを意味します。理由を確認するにはフラグにカーソルを移動します。

[ボトムアップ] タブでは、特定の oneTBB 構造での同期やオーバーヘッドに関する説明が示されます。特定の oneTBB ランタイム関数の実行時間が通常よりも長い理由を確認するには、グリッドの [スピン時間][オーバーヘッド時間] カラムを展開します。oneTBB ランタイム関数が CPU 時間の 5% 以上を消費するとフラグが示されます。

例えば、高いスケジュール値を持つ oneTBB ランタイム関数は、アプリケーションがスレッドのワークを細かく分割していることを示している可能性があります。これは、アプリケーションがランタイムを呼び出す際に過度のスケジュール・オーバーヘッドの原因となります。この問題はスレッドのチャンクサイズを増やすことで回避できます。

oneTBB ランタイムの同期で CPU 時間を消費しないアイドル待機時間がある場合、スレッド化解析を実行して効率的な CPU 利用を妨げる同期のボトルネックを特定します。インテル® VTune™ プロファイラーはすべてのインテル® TBB 同期オブジェクトを認識します。ソースコードで生成するオブジェクトに分りやすい名前を付けることで、インテル® VTune™ プロファイラーはそれらを認識して [結果] タブに表示します。パフォーマンス上の理由から、この機能は oneTBB ヘッダーではデフォルトで無効にされています。インテル® VTune™ プロファイラーでユーザー定義オブジェクトを表示するには、TBB_USE_THREADING_TOOLS に 1 を設定してアプリケーションを再コンパイルします。

oneTBB ライブラリー内部で発生したオーバーヘッドを表示するため、インテル® VTune™ プロファイラーは oneTBB ランタイム・ライブラリーからのすべての待機を含む疑似同期オブジェクト TBB スケジューラーを作成します。

関連情報