Methodology for malleable applications on distributed memory systems