Charm++
Pojawienie się | |
---|---|
Paradygmat | |
Implementacje | |
Aktualna wersja stabilna |
7.0.0 / (dts) 25 października 2021 |
Twórca | |
Platforma systemowa | |
Strona internetowa |
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.
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 | edytuj kod]
- The Charm Parallel Programming Language and System: Part I -- Description of Language Features, pdf file
- The Charm Parallel Programming Language and System: Part II -- The Runtime System, pdf file