メッセージ・パッシング・プロトコル

インテル® スレッディング・ビルディング・ブロック (インテル® TBB) のフローグラフで、エッジは、メッセージを渡すために push プロトコルと pull プロトコルを動的に切り替えます。 インテル® TBB のフローグラフ G = ( V, S, L ) で、V はノードのセット、S は現在 push プロトコルを使用しているエッジのセット、L は現在 pull プロトコルを使用しているエッジのセットです。 各エッジ (Vi, Vj) の Vi は先行 (predecessor) / センダー (sender) で、Vj は後続 (successor) / レシーバー (receiver) です。 push セット S では、エッジ上のメッセージはセンダーによって開始され、レシーバーに put しようとします。 pull セット L では、メッセージはレシーバーによって開始され、センダーから get しようとします。

あるエッジでメッセージの処理に失敗した場合、そのエッジはほかのセットに移動されます。 例えば、エッジ (Vi, Vj) で put に失敗すると、エッジは push セット S から削除され、pull セット L に移動されます。 失敗した送信または受信を単に繰り返すことが効率的なオプションでない場合、この動的 push / pull プロトコルがインテル® TBB のようなノンプリエンプティブなタスク・ライブラリーのパフォーマンスの鍵となります。 次の図は、この動的プロトコルを要約したものです。

動的 push / pull プロトコル
動的 push / pull プロトコル