This phase decomposes the communicating processes into some smaller computational subprocesses and communication processes. The decomposition step ensures that all of the precedence relationships imposed by the required blocking/nonblocking communication mechanisms are added. Transformation of the communicating processes into computational subprocesses and communication processes for blocking send/blocking receive, nonblocking send/blocking receive, blocking send/nonblocking receive and nonblocking send/nonblocking receive are shown in [CP99] Note that there is strong internal communication (variable accesses) and logical coherence between two subprocesses decomposed from the same original coarse-grain proceee and thus they should be finally mapped to the same hardware/software instance.
For a task graph with complex communications among processes, we follow the transformation rules to create to the decomposed task graph. When there is more than one midway communication for a given process the decomposition of this process depends on whether it is single threaded or multi-threaded. More details can be seen in [CP99].