フローグラフの基本: バッファリングと転送

フローグラフの基本: バッファリングと転送#

oneAPI スレッディング・ビルディング・ブロック (oneTBB) のフロー・グラフ・ノードは、データ通信と依存関係の強制にメッセージを使用します。ノードがメッセージを後続ノードに正常に渡すと、そのノードではメッセージに対してそれ以上のアクションは実行されません。シングルプッシュとブロードキャスト・プッシュのセクションで説明したように、ノードのタイプ、ノードに接続されている後続ノードの数、およびメッセージがプッシュされるかプルされるかに応じて、メッセージは 1 つまたは複数の後続ノードに渡される場合があります。

ノードがメッセージを後続ノードに正常にプッシュできないことがあります。その場合、メッセージで何が起こるかはノードのタイプによって異なります。可能性は次の 2 つです。

  • ノードは後で転送するメッセージを保存します。

  • ノードはメッセージを破棄します。

ノードが転送されないメッセージを破棄し、この動作が望ましくない場合は、プッシュできないメッセージを保存するバッファーノードにノードを接続する必要があります。

メッセージがノードで保存されている場合、そのメッセージを別のノードに渡す方法は 2 つあります。

  • ノードの後続ノードは、try_get() または try_reserve() を使用してメッセージをプルできます。

  • 後続ノードは make_edge() を使用して接続できます。

try_get() がメッセージを正常に転送した場合、そのメッセージは保存されているノードから削除されます。ノードが make_edge を使用して接続されている場合、ノードは保存されたメッセージを新しい後続ノードにプッシュしようとします。