In this section we solve the problem of finding data and computation decompositions that maximize parallelism when both data reorganization and pipeline communication are allowed. Data reorganizations occur when the decomposition for an array in one loop nest differs from the decomposition of the same array in another loop nest. We find a data decomposition for each array at each loop nest, and a computation decomposition for each loop nest.