You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@mesos.apache.org by "Benjamin Mahler (JIRA)" <ji...@apache.org> on 2018/02/15 19:50:00 UTC

[jira] [Created] (MESOS-8587) Introduce a parallel for each loop (and other parallel algorithms).

Benjamin Mahler created MESOS-8587:
--------------------------------------

             Summary: Introduce a parallel for each loop (and other parallel algorithms).
                 Key: MESOS-8587
                 URL: https://issues.apache.org/jira/browse/MESOS-8587
             Project: Mesos
          Issue Type: Improvement
          Components: libprocess
            Reporter: Benjamin Mahler


Consider the following code:

{code}
SomeProcess::func()
{
  foreach (const Item& item, items) {
    // Perform some const work on item.
  }
}
{code}

When {{items}} becomes very large, this code would benefit from some parallelism. With a parallel loop construct, we could improve the performance of this type of code significantly:

{code}
SomeProcess::func()
{
  foreach_parallel (items, [=](const Item& item) {
    // Perform some const work on item.
  });
}
{code}

Ideally, this could enforce const-access to the current Process for safety. An implementation of this would need to do something like:

# Split the iteration of {{items}} into 1 <= N <= num_worker_threads segments.
# Spawn N-1 additional temporary execution Processes (or re-use from a pool)
# Dispatch to these N-1 additional processes for them to perform their segment of the iteration.
# Perform the 1st segment on the current Process.
# Have the current Process block to wait for the others to finish. (note need to avoid deadlocking the worker threads here!)

This generalizes to many other algorithms rather than just iteration. It may be good to align this with the C++ Parallelism TS, which shows how many of the C++ algorithms have potential for parallel counterparts.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)