Charm++ är ett C ++- baserat parallellt objektorienterat programmeringsspråk utvecklat vid Parallel Programming Laboratory vid University of Illinois . Charm++ är designat för att förbättra kodningseffektiviteten genom abstraktioner på hög nivå samtidigt som prestandan ökar på en mängd olika hårdvaruplattformar. Charm++-program är uppdelade i flera objekt som kommunicerar genom meddelanden, så kallade charms . När ett program anropar en metod på ett objekt, skickar Charm++ runtime-systemet ett meddelande till det anropade objektet, vilket kan bearbetas på den lokala processorn eller på en fjärrprocessor i parallell beräkning. Detta meddelande gör att metoden inuti char exekveras för att bearbeta meddelandet asynkront.
Charms kan kombineras till char -arrayer och meddelanden kan skickas till individuella chars i arrayen och till hela char-arrayen samtidigt.
Förtrollningar mappas till fysiska processorer av runtime-systemet. Mappningen av charms till processorer är transparent för programmeraren, den tillåter runtime-systemet att dynamiskt tilldela charms till olika processorer under runtime, vilket gör det möjligt att mer effektivt fördela belastningen och ändra antalet inblandade processorer.
Adaptive MPI ( AMPI ) är en implementering av Message Passing Interface- standarden ovanpå Charm++ runtime som gör Charm++-faciliteter tillgängliga i den mer traditionella MPI-programmeringsmodellen. AMPI skapar ett omslag för varje MPI-process i form av ett Charm++-objekt.