Commit 58924228 authored by Paul's avatar Paul
Browse files

Format

parent 38d3fc69
...@@ -208,14 +208,15 @@ struct compile_plan ...@@ -208,14 +208,15 @@ struct compile_plan
struct parallel_work struct parallel_work
{ {
std::size_t start = 0; std::size_t start = 0;
std::size_t stop = 0; std::size_t stop = 0;
std::shared_ptr<std::mutex> m = std::make_shared<std::mutex>(); std::shared_ptr<std::mutex> m = std::make_shared<std::mutex>();
// parallel_work(parallel_work&&) noexcept = default; // parallel_work(parallel_work&&) noexcept = default;
optional<std::size_t> pop() { optional<std::size_t> pop()
{
std::lock_guard<std::mutex> guard(*m); std::lock_guard<std::mutex> guard(*m);
if (stop >= start) if(stop >= start)
return nullopt; return nullopt;
return start++; return start++;
} }
...@@ -232,27 +233,29 @@ void par_compile(std::size_t n, F f) ...@@ -232,27 +233,29 @@ void par_compile(std::size_t n, F f)
std::vector<parallel_work> pw(d); std::vector<parallel_work> pw(d);
std::size_t work = 0; std::size_t work = 0;
std::generate(pw.begin(), pw.end(), [&] { std::generate(pw.begin(), pw.end(), [&] {
std::cout << "Work: " << work << ", " << (work + grainsize) << std::endl; std::cout << "Work: " << work << ", " << (work + grainsize) << std::endl;
parallel_work p{work, work + grainsize}; parallel_work p{work, work + grainsize};
work += grainsize; work += grainsize;
return p; return p;
}); });
if(work < n) if(work < n)
MIGRAPHX_THROW("Work missing"); MIGRAPHX_THROW("Work missing");
par_for(d, 1, [&](auto i) { par_for(d, 1, [&](auto i) {
while(auto w = pw[i].pop()) while(auto w = pw[i].pop())
f(*w); f(*w);
while(any_of(range(d), [&](auto j) { while(any_of(range(d), [&](auto j) {
auto k = (j + i + 1) % d; auto k = (j + i + 1) % d;
if (k == i) if(k == i)
return false; return false;
auto w = pw[k].pop(); auto w = pw[k].pop();
if (w.has_value()) { if(w.has_value())
std::cout << "Steal" << std::endl; {
f(*w); std::cout << "Steal" << std::endl;
} f(*w);
return w.has_value(); }
})); return w.has_value();
}))
;
}); });
} }
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment