Charm++

język programowania

Charm++ – równoległy, zorientowany obiektowo język programowania bazujący na C++ i stworzony w Laboratorum Programowania Równoległego na Uniwersytecie Illinois. Charm++ powstał w celu zwiększenia produktywności programisty poprzez udostępnienie abstrakcji wysokiego poziomu w programowaniu równoległym, przy jednoczesnym zachowaniu wysokiej wydajności dla większości stosowanych platform sprzętowych.

Charm++
Pojawienie się

1980

Paradygmat

Obliczenia równoległe

Implementacje

C++, Python

Aktualna wersja stabilna

7.0.0 / 2021-10-25 25 października 2021(dts)

Twórca

Laxmikant Kale

Platforma systemowa

Linux, Mac OS, Windows

Strona internetowa

Programy pisane w Charm++ są dekomponowane na wiele sterowanych komunikatami obiektów, zwanych kontenerami (chares). Kiedy programista wywołuje metodę obiektu, system uruchomieniowy Charm++ (Charm++ runtime system) wysyła odpowiednie komunikaty do wywołanych obiektów, które mogą byś przechowywane zarówno na lokalnej jednostce, jak i jednostce zdalnej, będącej w strukturze równoległej. Wysłany komunikat uruchamia wykonywanie kodu zawartego w kontenerze w celu asynchronicznego jego przetworzenia.

Kontenery mogą być grupowane w postaci indeksowanych tablic kontenerów (chare arrays), a komunikaty mogą być wysyłane do pojedynczych kontenerów lub do wszystkich znajdujących się w tablicy jednocześnie.

W programie kontenery są kojarzone przez adaptacyjny system uruchomieniowy bezpośrednio z fizycznymi procesorami. Kojarzenie to jest zupełnie transparentne dla programisty co pozwala środowisku na dynamiczne zmiany w przydzielaniu procesorów kontenerom podczas wykonywania programu. To z kolei zapewnia obsługę takich mechanizmów jak measurement-based load balancing, fault tolerance, automatic checkpointing, jak również możliwość zmiany ilości procesorów wykorzystywanych przez program.

Biblioteka wspierająca symulowanie dynamiki molekularnej (dynamika molekularna – molecular dynamics simulation package NAMD) jest zaimplementowana właśnie z użyciem Charm++.

Adaptive MPI (AMPI) jest implementacją standardu Message Passing Interface na czele z Charm++ runtime system i udostępnia jego możliwości dla bardziej tradycyjnego modelu programowania, jakim jest MPI.

AMPI zamyka każdy proces MPI w migrowalnym na poziomie użytkownika wątku, pod postacią obiektu Charm++. Poprzez wbudowanie każdego wątku w kontener, programy AMPI automatycznie zaczynają korzystać z możliwości systemu uruchomieniowego Charm++, po małych, lub nawet bez zmian w oryginalnym programie MPI.

Bibliografia edytuj

Linki zewnętrzne edytuj