yohhoyの日記

技術的メモをしていきたい日記

(翻訳)Intel Threading Building Blocks フローグラフがフルサポートされます

元記事:The Intel® Threading Building Blocks flow graph is now fully supported | Intel® Software, Michael Voss氏, 2011/9/8

自分自身の理解のために日本語訳を行ったIntel TBB フローグラフの紹介記事。

Intel® Threading Building Blocks フローグラフがフルサポートされます

Intel® Threading Building Blocks (Intel® TBB) 3.0 Update 5では、Community Preview機能*1としてグラフAPIを導入しました。その後のメディア、ゲーム、金融サービス、技術計算分野に渡る開発チームからの数ヶ月におよぶ評価を経て、Intel® TBB 4.0ではグラフ機能をフルサポートします。一部API変更や性能向上に加えて、私たちはグラフに新しい名前を付けています。本機能がアプリケーション制御フローを表すことを強調するため、フローグラフ(flow graph)という名前を使います。より一般的な名前であるグラフ(graph)では、データ構造中心的なアプローチであると誤った印象を与えるためです。(訳注:Community Previewの段階ではフローグラフは単にグラフ(graph)という名前だった。)

Intel® TBB フローグラフは3つの要素:グラフオブジェクト(graph object)、ノード/頂点(node)、エッジ/辺(edge)から構成され、これら全ての要素は新しい名前空間 tbb::flow に見ることができます。例えばグラフオブジェクトは tbb::flow::graph となります。Community Previewバージョンと同じく、グラフオブジェクトはフローグラフコンテキストでのタスク実行メソッドや、フローグラフ完了を待つ待機メソッドを提供します。

図1
図1: Intel® TBB フローグラフの構成要素

図2に示す通り、さまざまな種類のノードタイプが存在します。メッセージの生成、変換、消費といったユーザ提供の計算を処理する汎関数(Functional)や、バッファリング(Buffering)機能を提供するノードタイプがあります。ノード join_node, split_node, or_node では、メッセージのN-タプルの分解/生成(Split/Join)を行います。また、その他(Other)の有用なユーティリティノードも用意されています。

図2
* Intel® TBB 4.0では multioutput_function_node, split_node, or_node はCommunity Preview機能として導入されます。
図2: Intel® Threading Building Blocks フローグラフでサポートされるノードタイプ

フローグラフはIntel® Threading Building Blocks 4.0に重要な機能を追加します。しかし、フローグラフに適した一部のアプリケーションでは、TBBライブラリ低レイヤAPIを用いたタスク(task)の非循環グラフによる実装や、汎用pipelineクラスやparallel_pipelineアルゴリズムを用いた実装も可能です。アプリケーションに最適なモデル選択の助けとなるよう、表1では機能の差異とその特徴について比較します。

表1: フローグラフ(flow graph), パイプライン(pipeline/parallel_pipeline), タスクのグラフ(task graphs) の比較

- タスクのグラフ パイプライン フローグラフ
表現能力 非循環依存性グラフを表現可能 線形パイプラインを表現可能 非循環依存性グラフや、非循環/循環メッセージンググラフを表現可能
使い易さ 低レベルなbook-keepingコードや明示的なタスク生成処理が必要 簡潔かつ型安全なインタフェース parallel_pipelineよりは冗長だが、book-keepingや明示的なタスク生成は不要
永続性 グラフは破壊的に実行され、再実行は不可能 複数回実行可能 複数回実行可能
スケジューリング キャッシュ局所性最適化のため、生成したタスクを用いる キャッシュ局所性最適化のため、生成したタスクを用いる 公平性指向(fairness-oriented)と一方向メッセージ(fire-and-forget)ユースケースのサポートのため、待機状態のタスクを用いる
性能 タスクを直接構築して破壊的に実行するため、非常に小さいオーバーヘッド フローグラフと同程度のオーバーヘッド パイプラインと同程度のオーバーヘッド



Intel® Threading Building Blocks (Intel® TBB) 4.0 はフルサポート機能としてフローグラフを備えています。フローグラフは、静的および動的な依存性グラフや、計算間でメッセージ送受信を行うようなリアクティブ/イベントベースグラフの表現に利用可能です。

Intel® TBBフローグラフで表現可能なアルゴリズムタイプ調査に役立つように、今後いくつかのブログ記事にて詳細な応用例を説明していく予定です。これらフローグラフ関連のブログ記事は http://software.intel.com/en-us/blogs/tag/flow_graph/ から辿ることができます。