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)