Our goal is to develop technology that improves performance of
parallel applications while also improving programmer productivity. We aim to
reach a point where, with our freely distributed software base, complex
irregular and dynamic applications can (a) be developed quickly and (b) perform
scalably on machines with thousands of processors.

Processor virtualization is one of our core techniques: the
programmer divides the computation into a large number of entities, which are
mapped to the available processors by an intelligent runtime system. This
separation of concerns between programmers and the system is key to attaining
both our goals together.

Charm++ and MPI: Combining the Best of Both Worlds

This work explores a framework that enables hybrid parallel programming with MPI and Charm++, and allows programmers to develop different modules of a parallel application in these two languages while facilitating smooth interoperation. MPI and Charm++ embody two distinct perspectives for writing parallel programs. While MPI provides a processor-centric, user-driven model for developing parallel codes, Charm++ supports work-centric, overdecomposition-based, system-driven parallel programming. One or the other can be the best or...