Processor virtualization is a powerful technique that enables the
runtime system to carry out intelligent adaptive optimizations like
dynamic resource management. Charm++ is an early language/system
that supports processor virtualization. This paper describes
Adaptive MPI or AMPI, an MPI implementation and extension, that
supports processor virtualization. AMPI implements virtual MPI
processes (VPs), several of which may be mapped to a single
physical processor. AMPI includes a powerful runtime support system
that takes advantage of the degree of freedom afforded by allowing
it to assign VPs onto processors. With this runtime system, AMPI
supports such features as automatic adaptive overlap of
communication and computation and automatic load balancing. It can
also support other features such as checkpointing without
additional user code, and the ability to shrink and expand the set
of processors used by a job at runtime. This paper describes AMPI,
its features, benchmarks that illustrate performance advantages and
tradeoffs offered by AMPI, and application experiences.