Wes McKinney created ARROW-7001:
-----------------------------------

             Summary: [C++] Develop threading APIs to accommodate nested 
parallelism 
                 Key: ARROW-7001
                 URL: https://issues.apache.org/jira/browse/ARROW-7001
             Project: Apache Arrow
          Issue Type: New Feature
          Components: C++
            Reporter: Wes McKinney


Tasks invoked in parallel may be able to submit their own subtasks, which in 
OpenMP and TBB documentation is often called "nested parallelism". 

If a task blocks on the completion of subtasks, then outright deadlocks are 
possible -- running tasks are all blocking on their subtasks, but the thread 
pool will not schedule any further tasks.

I suggest that such code have a way to indicate to the thread pool (if one is 
passed in) that it is blocking on the completion of other tasks so that further 
tasks can be run while the task waits for its child tasks to complete. One 
possible way to do this is to have a floating "soft limit" for concurrent tasks 
that can be incremented when tasks are waiting. 

So if we normally allow 8 concurrent tasks, then this can be temporarily 
increased for each "suspended" task. Preferably we would provide some way for 
the dependent task group to "awaken" the suspended task so that it does not 
have to do any work while waiting for the task group to finish

Note this feature can also be used in tasks that are waiting for IO calls




--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to