b'\n_START_ARTICLE_\nCharm++\n_START_SECTION_\nStoria\n_START_PARAGRAPH_\nAlla fine degli anni 80 il team di sviluppo dell\'Universit\xc3\xa0 cre\xc3\xb2 un software denominato C HARM, il quale comprendeva un kernel, chiamato Chare Kernels, fino al 1993, quando al suo interno fu incluso il nuovo modello di sviluppo CHARM++. Con la versione 4.5 del C HARM, il pacchetto fu nominato definitivamente come CHARM++ e, all\'inizio del 1999, il tutto fu riscritto in C++. La versione attuale, la 6.8.0 supporta linguaggi come OpenMP. Le versioni pi\xc3\xb9 recenti, inoltre, oltre a supportare linguaggi per gpu come OpenCl, hanno una loro libreria dedicata, chiamata "GPU Manager Library", scritta in linguaggio CUDA.\n_START_SECTION_\nStruttura del linguaggio\n_START_PARAGRAPH_\nI programmi scritti in linguaggio Charm++ vengono scomposti in una serie di chiamate coordinate ad oggetti definite chares: quando un programma invoca un metodo od un oggetto, il sistema di runtime di Charm++ invia un messaggio a quell\'oggetto, il quale pu\xc3\xb2 essere residente sul processore locale o su una cpu remota (computazione parallela). Questo messaggio attiva l\'esecuzione del codice all\'interno della chare, gestendo il messaggio in maniera asincrona. Le chares possono essere raccolte in gruppi chiamati chares array, a cui \xc3\xa8 possibile inviare messaggi che possono coinvolgere l\'intero array o una singola chare al suo interno. _NEWLINE_La mappatura delle chares \xc3\xa8 assolutamente trasparente per il programmatore, permettendo l\'allocazione dinamica delle chares al processore durante l\'esecuzione del programma: i risultati sono la possibilit\xc3\xa0 di fault-tolerance, il bilanciamento di carico misurabile, i checkpoint, e la possibilit\xc3\xa0 di ampliare o restringere il set di processori utilizzabili dal programma. _NEWLINE_Adaptive MPI (AMPI) \xc3\xa8 una implementazione dello standard MPI (Message Parsing Interface) al di sopra del sistema di runtime di Charm++, fornendo le funzionalit\xc3\xa0 di quest\'ultimo in un modello di programmazione MPI pi\xc3\xb9 tradizionale. AMPI incapsula ogni processo MPI all\'interno di un thread che migra a livello di utente e che viene associato a un oggetto Charm++. Incorporando ogni thread con una chare, i programmi AMPI possono sfruttare automaticamente le funzionalit\xc3\xa0 del sistema di runtime Charm ++ con modeste (o nessuna) modifiche al programma MPI sottostante.\n_START_SECTION_\nApplicazioni\n_START_PARAGRAPH_\nGrazie alla possibilit\xc3\xa0 di essere usato per calcolo su piattaforme parallele, Charm++ \xc3\xa8 alla base di molti programmi scientifici come NAMD (dinamica molecolare), OpenAtom (simulazioni ab-initio), ChaNGa e SpECTRE (astronomia), ROCFlow (simulazione aerospaziale), Episimdemics (epidemiologia). Tutti questi programmi sono in grado di scalare perfettamente da un singolo pc a sistemi cluter con migliaia di processori.'