Flow Graph Basics: Edges

Flow Graph Basics: Edges#

Most applications contain multiple nodes with edges connecting them to each other. In the flow graph interface, edges are directed channels over which messages are passed. They are created by calling the function make_edge( p, s ) with two arguments: p, the predecessor, and s, the successor. You can modify the example used in the Nodes topic to include a second node that squares the value it receives before printing it and then connect that to the first node with an edge.

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();

Now there are two function_node s, n and m. The call to make_edge creates an edge from n to m. The node n is created with unlimited concurrency, while m has a concurrency limit of 1. The invocations of n can all proceed in parallel, while the invocations of m will be serialized. Because there is an edge from n to m, each value v, returned by n, will be automatically passed to node m by the runtime library.