A condensed static task graph can be defined analogously, where a sequence of task nodes can be collapsed if they do not include any communication and if every task node is instantiated into an identical set of dynamic task instances at run-time.
This representation may be important because capturing all the fine-grain parallelism in the program (e.g., all individual loop iterations) as individual tasks might be too expensive for very large problems. The condensed graph essentially collapses all the tasks executed by a thread between synchronization points into a single condensed task. Note that this graph therefore depends on the specific allocation of tasks to threads. The tradeoffs in using the condensed dynamic task graph are described below.