Commit e2562a99 authored by neverlord's avatar neverlord

benchmark fix

parent 06133ae0
...@@ -201,7 +201,7 @@ void chain_link(actor_ptr next) ...@@ -201,7 +201,7 @@ void chain_link(actor_ptr next)
( (
on<atom("token"), int>() >> [&](int v) on<atom("token"), int>() >> [&](int v)
{ {
next->enqueue(nullptr, std::move(last_received())); next << last_received();
if (v == 0) if (v == 0)
{ {
done = true; done = true;
...@@ -211,17 +211,14 @@ void chain_link(actor_ptr next) ...@@ -211,17 +211,14 @@ void chain_link(actor_ptr next)
.until([&]() { return done == true; }); .until([&]() { return done == true; });
} }
void chain_master(actor_ptr msgcollector) void worker_fun(actor_ptr msgcollector)
{ {
auto worker = spawn([=]()
{
actor_ptr mc = msgcollector;
bool done = false; bool done = false;
do_receive do_receive
( (
on<atom("calc"), uint64_t>() >> [&](uint64_t what) on<atom("calc"), uint64_t>() >> [&](uint64_t what)
{ {
send(mc, atom("result"), factorize(what)); send(msgcollector, atom("result"), factorize(what));
}, },
on(atom("done")) >> [&]() on(atom("done")) >> [&]()
{ {
...@@ -229,24 +226,25 @@ void chain_master(actor_ptr msgcollector) ...@@ -229,24 +226,25 @@ void chain_master(actor_ptr msgcollector)
} }
) )
.until([&]() { return done == true; }); .until([&]() { return done == true; });
}); }
auto new_ring = [&](int ring_size, int initial_token_value) -> actor_ptr
{ actor_ptr new_ring(actor_ptr next, int ring_size)
send(worker, atom("calc"), s_task_n); {
actor_ptr next = self; for (int i = 1; i < ring_size; ++i) next = spawn(chain_link, next);
for (int i = 1; i < ring_size; ++i)
{
next = spawn(chain_link, next);
}
send(next, atom("token"), initial_token_value);
return next; return next;
}; }
void chain_master(actor_ptr msgcollector)
{
auto worker = spawn(worker_fun, msgcollector);
receive receive
( (
on<atom("init"), int, int, int>() >> [&](int rs, int itv, int n) on<atom("init"), int, int, int>() >> [&](int rs, int itv, int n)
{ {
int iteration = 0; int iteration = 0;
auto next = new_ring(rs, itv); auto next = new_ring(self, rs);
send(next, atom("token"), itv);
send(worker, atom("calc"), s_task_n);
do_receive do_receive
( (
on<atom("token"), int>() >> [&](int v) on<atom("token"), int>() >> [&](int v)
...@@ -255,7 +253,9 @@ void chain_master(actor_ptr msgcollector) ...@@ -255,7 +253,9 @@ void chain_master(actor_ptr msgcollector)
{ {
if (++iteration < n) if (++iteration < n)
{ {
next = new_ring(rs, itv); next = new_ring(self, rs);
send(next, atom("token"), itv);
send(worker, atom("calc"), s_task_n);
} }
} }
else else
......
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