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

ほとんどのアプリケーションには、複数のノードとノードを接続するエッジが含まれています。フローグラフのインターフェイスでは、エッジはメッセージを渡す指示チャネルです。エッジは、make_edge( p, s ) 関数を呼び出して作成します。引数は p (サクセサー) と s (プレデセッサー) の 2 つです。出力する前に受け取った値の 2 乗を計算する 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_nodenm の 2 つになりました。make_edge を呼び出すと、n から m へのエッジが作成されます。ノード n は同時実行数を unlimited にして作成していますが、m は同時実行数を 1 に制限して作成しています。n の呼び出しはすべて並列に処理できますが、m の呼び出しはシリアルに処理されます。n から m へのエッジがあるため、n が返す値 v はそれぞれ、ランタイム・ライブラリーによってノード m へ自動的に渡されます。

関連情報