Przekazywanie wiadomości w klastrach komputerowych
Przekazywanie wiadomości jest nieodłącznym elementem wszystkich klastrów komputerowych . Wszystkie klastry komputerowe, od domowych Beowulfów po jedne z najszybszych superkomputerów na świecie, polegają na przekazywaniu wiadomości w celu koordynowania działań wielu węzłów, które obejmują. Przekazywanie wiadomości w klastrach komputerowych zbudowanych z typowych serwerów i przełączników jest wykorzystywane przez praktycznie każdą usługę internetową.
W ostatnim czasie upowszechniło się wykorzystanie klastrów komputerowych liczących ponad tysiąc węzłów. Wraz ze wzrostem liczby węzłów w klastrze, szybki wzrost złożoności podsystemu komunikacyjnego sprawia, że opóźnienia w przekazywaniu komunikatów przez połączenie międzysieciowe stanowią poważny problem z wydajnością podczas wykonywania programów równoległych .
Specyficzne narzędzia mogą służyć do symulacji, wizualizacji i zrozumienia wydajności przekazywania wiadomości w klastrach komputerowych. Przed złożeniem dużego klastra komputerowego symulator oparty na śledzeniu może użyć niewielkiej liczby węzłów, aby pomóc przewidzieć wydajność przekazywania komunikatów w większych konfiguracjach. Po przeprowadzeniu testów na niewielkiej liczbie węzłów symulator odczytuje pliki dziennika wykonywania i przesyłania komunikatów oraz symuluje wydajność podsystemu przesyłania komunikatów, gdy między znacznie większą liczbą węzłów wymienianych jest znacznie więcej komunikatów.
Komunikaty i obliczenia
Podejścia do przekazywania wiadomości
Historycznie, dwa typowe podejścia do komunikacji między węzłami klastra to PVM, równoległa maszyna wirtualna i MPI, interfejs przekazywania wiadomości . Jednak MPI stało się de facto standardem przekazywania wiadomości w klastrach komputerowych.
PVM poprzedza MPI i został opracowany w Oak Ridge National Laboratory około 1989 roku. Zapewnia zestaw bibliotek oprogramowania, które pozwalają węzłowi obliczeniowemu działać jako „równoległa maszyna wirtualna”. Zapewnia środowisko wykonawcze do przekazywania komunikatów, zarządzania zadaniami i zasobami oraz powiadamiania o błędach i musi być instalowane bezpośrednio na każdym węźle klastra. PVM może być używany przez programy użytkownika napisane w C , C++ lub Fortran itp.
W przeciwieństwie do PVM, który ma konkretną implementację, MPI jest specyfikacją, a nie konkretnym zestawem bibliotek. Specyfikacja powstała na początku 1990 roku w wyniku dyskusji między 40 organizacjami, przy wsparciu ARPA i National Science Foundation . Projekt MPI opierał się na różnych funkcjach dostępnych w ówczesnych systemach komercyjnych. Specyfikacje MPI dały następnie początek konkretnym wdrożeniom. Implementacje MPI zwykle używają protokołu TCP/IP i połączeń gniazdowych. MPI jest obecnie powszechnie dostępnym modelem komunikacji, który umożliwia pisanie programów równoległych w językach takich jak C , Fortran, Python itp. Specyfikacja MPI została zaimplementowana w systemach takich jak MPICH i Open MPI .
Testowanie, ocena i optymalizacja
Klastry komputerowe wykorzystują szereg strategii radzenia sobie z rozłożeniem przetwarzania na wiele węzłów i wynikającym z tego narzutem komunikacyjnym. Niektóre klastry komputerowe, takie jak Tianhe-I, używają innych procesorów do przekazywania wiadomości niż te używane do wykonywania obliczeń. Tiahnhe-I wykorzystuje ponad dwa tysiące FeiTeng-1000 w celu usprawnienia działania swojego zastrzeżonego systemu przekazywania wiadomości, podczas gdy obliczenia są wykonywane przez procesory Xeon i Nvidia Tesla .
Jednym ze sposobów zmniejszenia narzutu komunikacyjnego jest wykorzystanie lokalnych sąsiedztw (zwanych także lokalizacjami ) do określonych zadań. Tutaj zadania obliczeniowe są przypisywane do określonych „osiedli” w klastrze, aby zwiększyć wydajność poprzez użycie procesorów, które są bliżej siebie. Jednak biorąc pod uwagę, że w wielu przypadkach rzeczywista topologia węzłów klastra komputerowego i ich połączeń może nie być znana twórcom aplikacji, próba precyzyjnego dostrojenia wydajności na poziomie aplikacji jest dość trudna.
Biorąc pod uwagę fakt, że MPI stało się obecnie de facto standardem w klastrach komputerów, wzrost liczby węzłów klastra zaowocował dalszymi badaniami mającymi na celu poprawę wydajności i skalowalności bibliotek MPI. Wysiłki te obejmowały badania mające na celu zmniejszenie zużycia pamięci przez biblioteki MPI.
Od samego początku MPI zapewniało narzędzia do profilowania wydajności za pośrednictwem „systemu profilowania” PMPI. Wykorzystanie prefiksu PMIPI pozwala na obserwację punktów wejścia i wyjścia komunikatów. Jednak biorąc pod uwagę wysoki poziom tego profilu, tego typu informacje dają jedynie wgląd w rzeczywiste zachowanie systemu komunikacyjnego. Potrzeba większej ilości informacji zaowocowała rozwojem systemu MPI-Peruse. Peruse zapewnia bardziej szczegółowy profil, umożliwiając aplikacjom dostęp do zmian stanu w bibliotece MPI. Osiąga się to poprzez rejestrowanie wywołań zwrotnych w Peruse, a następnie wywoływanie ich jako wyzwalaczy w miarę pojawiania się komunikatów. Peruse może współpracować z systemem wizualizacji PARAVER. PARAVER ma dwa komponenty, komponent śledzenia i komponent wizualny do analizy śladów, statystyk związanych z określonymi zdarzeniami itp. PARAVER może wykorzystywać formaty śledzenia z innych systemów lub wykonywać własne śledzenie. Działa na poziomie zadania, na poziomie wątku oraz w formacie hybrydowym. Ślady często zawierają tak wiele informacji, że często są przytłaczające. W ten sposób PARAVER podsumowuje je, aby umożliwić użytkownikom ich wizualizację i analizę.
Analiza wydajności
opracowywany jest system równoległy na dużą skalę, często na poziomie superkomputera , niezbędna jest możliwość eksperymentowania z wieloma konfiguracjami i symulowania wydajności. Istnieje wiele podejść do modelowania wydajności przekazywania komunikatów w tym scenariuszu, od modeli analitycznych po symulacje oparte na śledzeniu, a niektóre podejścia polegają na wykorzystaniu środowisk testowych opartych na „sztucznej komunikacji” do przeprowadzania syntetycznych testów wydajności przekazywania komunikatów . Systemy takie jak BIGSIM zapewniają te udogodnienia, umożliwiając symulację wydajności na różnych topologie węzłów , strategie przekazywania komunikatów i planowania.
Podejścia analityczne
Na poziomie analitycznym konieczne jest modelowanie czasu komunikacji T w postaci zestawu składowych, takich jak opóźnienie uruchomienia , asymptotyczna przepustowość i liczba procesorów. Dobrze znanym modelem jest model Hockneya, który po prostu opiera się na komunikacji punkt-punkt , używając T = L + (M / R), gdzie M to rozmiar wiadomości, L to opóźnienie uruchamiania, a R to asymptotyczna przepustowość w MB/s.
Xu i Hwang uogólnili model Hockneya, aby uwzględnić liczbę procesorów, tak że zarówno opóźnienie, jak i asymptotyczna przepustowość są funkcjami liczby procesorów. Gunawan i Cai następnie uogólnili to dalej, wprowadzając rozmiar pamięci podręcznej i rozdzielili wiadomości na podstawie ich rozmiarów, uzyskując dwa oddzielne modele, jeden dla wiadomości poniżej rozmiaru pamięci podręcznej i jeden dla tych powyżej.
Symulacja wydajności
Do symulacji i zrozumienia wydajności przekazywania wiadomości w klastrach komputerowych można wykorzystać określone narzędzia. Na przykład CLUSTERSIM wykorzystuje środowisko wizualne oparte na Javie do symulacji zdarzeń dyskretnych . W tym podejściu obliczone węzły i topologia sieci są modelowane wizualnie. Zadania oraz ich czas trwania i złożoność są reprezentowane za pomocą określonych rozkładów prawdopodobieństwa, co pozwala na proponowanie i eksperymentowanie z różnymi równoległymi algorytmami planowania zadań . Narzut komunikacji dla MPI przekazywanie komunikatów można zatem symulować i lepiej rozumieć w kontekście równoległego wykonywania zadań na dużą skalę.
Inne narzędzia symulacyjne to MPI-sim i BIGSIM. MPI-Sim to symulator oparty na wykonywaniu, który wymaga do działania programów C lub C++. Z drugiej strony ClusterSim wykorzystuje hybrydowy system modelowania wyższego poziomu, niezależny od języka programowania używanego do wykonywania programu.
W przeciwieństwie do MPI-Sim, BIGSIM jest systemem opartym na śledzeniu, który symuluje na podstawie dzienników wykonań zapisanych w plikach przez oddzielny program emulujący. BIGSIM zawiera emulator i symulator. Emulator wykonuje aplikacje na niewielkiej liczbie węzłów i przechowuje wyniki, dzięki czemu symulator może z nich korzystać i symulować działania na znacznie większej liczbie węzłów. Emulator przechowuje informacje o sekwencyjnych blokach wykonawczych (SEB) dla wielu procesorów w plikach dziennika, przy czym każdy SEB rejestruje wysłane komunikaty, ich źródła i miejsca docelowe, zależności, czasy itp. Symulator odczytuje pliki dziennika i symuluje je i może gwiazdować dodatkowe wiadomości, które następnie są również przechowywane jako SEB. Symulator może więc zapewnić podgląd wydajności bardzo dużych aplikacji na podstawie śladów wykonania dostarczonych przez emulator na znacznie mniejszej liczbie węzłów, zanim cała maszyna będzie dostępna lub skonfigurowana.