フローグラフの基本: エッジ#
ほとんどのアプリケーションには、エッジで相互に接続された複数のノードが含まれています。フロー・グラフ・インターフェイスでは、エッジはメッセージが渡される有向チャネルです。これらは、2 つの引数を持つ関数 make_edge( p, s ) を呼び出すことで作成されます: p は先行、s は後続です。フローグラフの基本の例を変更できます。ノードトピックには、受け取った値を二乗してから出力する 2 つ目のノードを追加し、そのノードを最初のノードとエッジで接続します。
graph g;
function_node< int, int > n( g, unlimited, []( int v ) -> int {
cout << v;
spin_for( v );
cout << v;
return v;
} );
function_node< int, int > m( g, 1, []( int v ) -> int {
v *= v;
cout << v;
spin_for( v ); cout << v;
return v;
} );
make_edge( n, m );
n.try_put( 1 );
n.try_put( 2 );
n.try_put( 3 );
g.wait_for_all();現在、 function_node には n と m の 2 つがあります。make_edge を呼び出すと、n から m へのエッジが作成されます。ノード n は並行性が無制限で作成されますが、m の並行性の制限は 1 です。n の呼び出しはすべて並列に実行できますが、m の呼び出しはシリアル化されます。n から m へのエッジがあるため、n によって返される各値 v は、ランタイム・ライブラリーによってノード m に自動的に渡されます。