Commit 58924228 authored by Paul's avatar Paul
Browse files

Format

parent 38d3fc69
......@@ -208,14 +208,15 @@ struct compile_plan
struct parallel_work
{
std::size_t start = 0;
std::size_t stop = 0;
std::size_t start = 0;
std::size_t stop = 0;
std::shared_ptr<std::mutex> m = std::make_shared<std::mutex>();
// parallel_work(parallel_work&&) noexcept = default;
optional<std::size_t> pop() {
optional<std::size_t> pop()
{
std::lock_guard<std::mutex> guard(*m);
if (stop >= start)
if(stop >= start)
return nullopt;
return start++;
}
......@@ -232,27 +233,29 @@ void par_compile(std::size_t n, F f)
std::vector<parallel_work> pw(d);
std::size_t work = 0;
std::generate(pw.begin(), pw.end(), [&] {
std::cout << "Work: " << work << ", " << (work + grainsize) << std::endl;
parallel_work p{work, work + grainsize};
work += grainsize;
return p;
});
std::cout << "Work: " << work << ", " << (work + grainsize) << std::endl;
parallel_work p{work, work + grainsize};
work += grainsize;
return p;
});
if(work < n)
MIGRAPHX_THROW("Work missing");
par_for(d, 1, [&](auto i) {
while(auto w = pw[i].pop())
f(*w);
while(any_of(range(d), [&](auto j) {
auto k = (j + i + 1) % d;
if (k == i)
return false;
auto w = pw[k].pop();
if (w.has_value()) {
std::cout << "Steal" << std::endl;
f(*w);
}
return w.has_value();
}));
auto k = (j + i + 1) % d;
if(k == i)
return false;
auto w = pw[k].pop();
if(w.has_value())
{
std::cout << "Steal" << std::endl;
f(*w);
}
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