With this set of dependencies, it may be possible for the scheduler to synchronize task dependencies with threads, i.e. thread 1 completes a bunch of short task dependencies that complete once thread 2 has finished one long task. Then both threads can run the next portion of tasks with minimal lag. Is this how the optimal scheduling would work in this case?
During lecture, Prof. Kayvon mentioned a good point that the way CPU instruction scheduler schedules instructions for super-scalar executions on CPU cores based on instruction dependencies is similar to the way a task scheduler would schedule tasks onto multiple parallel threads based on tasks dependencies.
Is it possible to create a cilk program that paralellizes work with this type of dependency tree? Specifically, how does one specify to cilk that some subset of tasks need to complete before another task can be called, but not necessarily every outstanding task?
Does the dependency graph work with the model of having distributed queues on the previous slide. Would we have a different dependency graph of tasks for each queue/thread, or would there be some global dependency graph? Is there extra synchronization overheads in this case?
Please log in to leave a comment.
I'm not sure I understand the image in this slide. Is the main point that dependent tasks can be broken up into smaller pieces if they follow a dependency graph?