43using Node = tbb::flow::continue_node<tbb::flow::continue_msg>;
47std::vector<std::vector<NodePtr>>
nodes;
79std::uniform_int_distribution<int>
uni(250,1000);
83 return std::make_shared<Node>(
G,
84 [lev, sldeg](
const tbb::flow::continue_msg &msg)
87 std::this_thread::sleep_for(std::chrono::milliseconds(sleepTime));;
88 std::lock_guard<std::mutex> guard(
myMutex);
89 std::cout <<
"computed lev=" << lev <<
" sldeg="
90 << sldeg <<
" sum=" << lev + sldeg
91 <<
" sleep time=" << sleepTime << std::endl;
98 for (
int lev = 0; lev < nlevels; ++lev)
nodes.emplace_back(std::vector<NodePtr>(nslanted_degrees));
101 for (
int lev=0; lev<nlevels; ++lev)
102 for (
int sldeg=0; sldeg < nslanted_degrees; ++sldeg)
106 for (
int lev=0; lev<nlevels; ++lev)
107 for (
int sldeg=0; sldeg < nslanted_degrees; ++sldeg)
110 tbb::flow::make_edge(*
nodes[lev-1][sldeg], *
nodes[lev][sldeg]);
112 tbb::flow::make_edge(*
nodes[lev][sldeg-1], *
nodes[lev][sldeg]);
118 std::cout <<
"Hi there, we have " << tbb::info::default_concurrency()
119 <<
" thread(s) available." << std::endl;
120 const int nlevels = 5;
121 const int nslanted_degrees = 10;
124 nodes[0][0]->try_put(tbb::flow::continue_msg());
128 for (
int lev=0; lev<nlevels; ++lev)
129 for (
int sldeg=0; sldeg < nslanted_degrees; ++sldeg)
130 std::cout <<
"nodes[" << lev <<
"," << sldeg <<
"] = " <<
nodes[lev][sldeg] << std::endl;
NodePtr createNode(tbb::flow::graph &G, int lev, int sldeg)
std::uniform_int_distribution< int > uni(250, 1000)
std::shared_ptr< Node > NodePtr
tbb::flow::continue_node< tbb::flow::continue_msg > Node
std::vector< std::vector< NodePtr > > nodes
void makeDependencyGraph(int nlevels, int nslanted_degrees)
Scratch task descriptor used by the standalone TBB dependency-graph example.