フローグラフの基本: エッジ

フローグラフの基本: エッジ#

ほとんどのアプリケーションには、エッジで相互に接続された複数のノードが含まれています。フロー・グラフ・インターフェイスでは、エッジはメッセージが渡される有向チャネルです。これらは、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 には nm の 2 つがあります。make_edge を呼び出すと、n から m へのエッジが作成されます。ノード n は並行性が無制限で作成されますが、m の並行性の制限は 1 です。n の呼び出しはすべて並列に実行できますが、m の呼び出しはシリアル化されます。n から m へのエッジがあるため、n によって返される各値 v は、ランタイム・ライブラリーによってノード m に自動的に渡されます。