Systemy rozproszone. Państwowa Wyższa Szkoła Zawodowa w Chełmie. ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie



Podobne dokumenty
16. Taksonomia Flynn'a.

Programowanie równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Programowanie w modelu przesyłania komunikatów specyfikacja MPI. Krzysztof Banaś Obliczenia równoległe 1

Operacje grupowego przesyłania komunikatów

Operacje grupowego przesyłania komunikatów. Krzysztof Banaś Obliczenia równoległe 1

Obliczenia równoległe i rozproszone. Praca zbiorowa pod redakcją Andrzeja Karbowskiego i Ewy Niewiadomskiej-Szynkiewicz

Nowoczesne technologie przetwarzania informacji

Podstawy Techniki Mikroprocesorowej wykład 13: MIMD. Dr inż. Jacek Mazurkiewicz Katedra Informatyki Technicznej

Algorytmy i Struktury Danych

Zapoznanie z technikami i narzędziami programistycznymi służącymi do tworzenia programów współbieżnych i obsługi współbieżności przez system.

Tryby komunikacji między procesami w standardzie Message Passing Interface. Piotr Stasiak Krzysztof Materla

Tworzenie programów równoległych cd. Krzysztof Banaś Obliczenia równoległe 1

Dr inż. hab. Siergiej Fialko, IF-PK,

Architektura komputerów

Architektura komputerów

Numeryczna algebra liniowa

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Programowanie Równoległe Wykład 4. MPI - Message Passing Interface. Maciej Matyka Instytut Fizyki Teoretycznej

Analiza ilościowa w przetwarzaniu równoległym

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Programowanie współbieżne i rozproszone

Podstawy Informatyki Systemy sterowane przepływem argumentów

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Tworzenie programów równoległych. Krzysztof Banaś Obliczenia równoległe 1

Algorytmy dla maszyny PRAM

3.Przeglądarchitektur

61 Topologie wirtualne

Klasyfikacje systemów komputerowych, modele złożoności algorytmów obliczeniowych

Programowanie współbieżne... (4) Andrzej Baran 2010/11

Architektura mikroprocesorów TEO 2009/2010

5. Model komunikujących się procesów, komunikaty

LEKCJA TEMAT: Zasada działania komputera.

Systemy operacyjne. Systemy operacyjne. Systemy operacyjne. Zadania systemu operacyjnego. Abstrakcyjne składniki systemu. System komputerowy

Architektura Komputerów

PODSTAWY PRZETWARZANIA RÓWNOLEGŁEGO INFORMACJI

Wydajność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Message Passing Interface

1. ARCHITEKTURY SYSTEMÓW KOMPUTEROWYCH

Programowanie współbieżne i rozproszone

Systemy operacyjne i sieci komputerowe Szymon Wilk Superkomputery 1

Przetwarzanie równoległesprzęt. Rafał Walkowiak Wybór

Programowanie Równoległe Wykład 5. MPI - Message Passing Interface (część 3) Maciej Matyka Instytut Fizyki Teoretycznej

3.Przeglądarchitektur

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak

Architektura von Neumanna

Programowanie współbieżne Wykład 2. Iwona Kochańska

21 Model z pamięcią współdzieloną (model PRAM) - Parallel Random Access Machine

Wprowadzenie. Co to jest klaster? Podział ze względu na przeznaczenie. Architektury klastrów. Cechy dobrego klastra.

Programowanie w modelu przesyłania komunikatów specyfikacja MPI, cd. Krzysztof Banaś Obliczenia równoległe 1

Modele programowania równoległego. Programowanie z przekazywaniem komunikatów Message-Passing Programming Rafał Walkowiak dla PR PP

Skalowalność obliczeń równoległych. Krzysztof Banaś Obliczenia Wysokiej Wydajności 1

Obliczenia rozproszone z wykorzystaniem MPI

Architektura komputerów

dr inż. Jarosław Forenc

Klasyfikacja systemów komputerowych. Architektura von Neumanna Architektura harwardzka Zmodyfikowana architektura harwardzka. dr inż.

Projektowanie algorytmów równoległych. Zbigniew Koza Wrocław 2012

Budowa komputera Komputer computer computare

Wykład 2 Podstawowe pojęcia systemów równoległych, modele równoległości, wydajność obliczeniowa, prawo Amdahla/Gustafsona

Architektura komputerów

Rywalizacja w sieci cd. Protokoły komunikacyjne. Model ISO. Protokoły komunikacyjne (cd.) Struktura komunikatu. Przesyłanie między warstwami

Wprowadzenie. Klastry komputerowe. Superkomputery. informatyka +

Budowa komputera. Magistrala. Procesor Pamięć Układy I/O

Komputery równoległe. Zbigniew Koza. Wrocław, 2012

Zadania jednorodne 5.A.Modele przetwarzania równoległego. Rafał Walkowiak Przetwarzanie równoległe Politechnika Poznańska 2010/2011

SYSTEMY OPERACYJNE: STRUKTURY I FUNKCJE (opracowano na podstawie skryptu PP: Królikowski Z., Sajkowski M. 1992: Użytkowanie systemu operacyjnego UNIX)

Obliczenia Wysokiej Wydajności

Informatyka. informatyka i nauki komputerowe (computer science)

Budowa karty sieciowej; Sterowniki kart sieciowych; Specyfikacja interfejsu sterownika sieciowego; Open data link interface (ODI); Packet driver

Dodatek B. Zasady komunikacji z otoczeniem w typowych systemach komputerowych

Wydajność systemów a organizacja pamięci, czyli dlaczego jednak nie jest aż tak źle. Krzysztof Banaś, Obliczenia wysokiej wydajności.

Wstęp. Historia i przykłady przetwarzania współbieżnego, równoległego i rozproszonego. Przetwarzanie współbieżne, równoległe i rozproszone

Poziom kwalifikacji: I stopnia. Liczba godzin/tydzień: 2W E, 2L PRZEWODNIK PO PRZEDMIOCIE

Literatura. 11/16/2016 Przetwarzanie równoległe - wstęp 1

Wydajność systemów a organizacja pamięci. Krzysztof Banaś, Obliczenia wysokiej wydajności. 1

4. Procesy pojęcia podstawowe

Wykorzystanie architektury Intel MIC w obliczeniach typu stencil

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Ćwiczenie nr: 9 Obliczenia rozproszone MPI

10/14/2013 Przetwarzanie równoległe - wstęp 1. Zakres przedmiotu

Metody optymalizacji soft-procesorów NIOS

Zadania badawcze prowadzone przez Zakład Technik Programowania:

Systemy rozproszone. na użytkownikach systemu rozproszonego wrażenie pojedynczego i zintegrowanego systemu.

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

RDZEŃ x86 x86 rodzina architektur (modeli programowych) procesorów firmy Intel, należących do kategorii CISC, stosowana w komputerach PC,

Analiza efektywności przetwarzania współbieżnego

Mikroprocesor Operacje wejścia / wyjścia

Wprowadzenie. Dariusz Wawrzyniak. Miejsce, rola i zadania systemu operacyjnego w oprogramowaniu komputera

Zaawansowane narzędzia programowania rozproszonego

ARCHITEKTURA PROCESORA,

Magistrala systemowa (System Bus)

Systemy operacyjne. Wprowadzenie. Wykład prowadzą: Jerzy Brzeziński Dariusz Wawrzyniak

System mikroprocesorowy i peryferia. Dariusz Chaberski

Architektury systemów równoległych

Wsparcie dla OpenMP w kompilatorze GNU GCC Krzysztof Lamorski Katedra Informatyki, PWSZ Chełm

Architektura komputera. Cezary Bolek. Uniwersytet Łódzki. Wydział Zarządzania. Katedra Informatyki. System komputerowy

Architektura komputerów. Układy wejścia-wyjścia komputera

dr inż. Konrad Sobolewski Politechnika Warszawska Informatyka 1

Zagadnienia egzaminacyjne INFORMATYKA. Stacjonarne. I-go stopnia. (INT) Inżynieria internetowa STOPIEŃ STUDIÓW TYP STUDIÓW SPECJALNOŚĆ

Transkrypt:

Systemy rozproszone Rafał Ogrodowczyk *, Krzysztof Murawski **,*, Bartłomiej Bielecki * * Katedra Informatyki Państwowa Wyższa Szkoła Zawodowa w Chełmie ** Instytut Fizyki Uniwersytet Marii Curie-Skłodowskiej w Lublinie Streszczenie W artykule tym opisano podstawowe zagadnienia związane z teorią systemów równoległych, ich architekturą oraz wykorzystywanym oprogramowaniem. Wybrane aspekty teoretyczne omówiono na przykładzie ich realizacji w kodzie numerycznym FLASH, uwidaczniając szczególnie czynniki mogące wpływać na zmniejszenie efektywności obliczeń rozproszonych. Abstract In this paper we describe basic issues that are associated with a theory of parallel systems, their architecture as well as applied software. The Flash code is used as an example to present the main stages of parallel computations and point out some problems that reduce effectiveness of such computations.

Wstęp W obecnej dobie istnieje często potrzeba modelowania i symulacji złożonych zjawisk przyrody. Symulacje takie można przeprowadzić przy zastosowaniu komputerów dysponujących dużą mocą obliczeniową. Mimo ciągłego rozwoju technologii informatycznych komputery osobiste nie dysponują wciąż wystarczającymi parametrami. Od wielu lat trwają prace nad budową superkomputerów mogących rozwiązywać nawet najbardziej wymagające numerycznie zadanie obliczeniowe. Badania te w wielu przypadkach zostały uwieńczone sukcesami. Jednak powstające w ten sposób centra komputerowe są niezwykle kosztowne i dlatego wciąż niedostępne dla małych grup badawczych skupionych w środowiskach akademickich. Równolegle do idei budowy ogromnych ośrodków obliczeniowych z początkiem lat 90 tych rozpoczęto prace nad wykorzystaniem sieci komputerów osobistych dysponujących wspólnie duża mocą obliczeniową mogącą zadowolić, również ze względu na niskie koszty budowy, środowiska naukowe [1]. Badania te doprowadziły do powstania standardów struktury sprzętowej i wymiany komunikatów w coraz bardziej popularnych rozproszonych systemach komputerowych. Niniejsze opracowanie ma na celu przedstawienie zarysu osiągnięć, jakimi dysponuje ówczesna informatyka w dziedzinie obliczeń rozproszonych. 1. Architektura komputerów równoległych Przez równoległy system komputerowy rozumiemy zespół co najmniej dwóch procesorów zdolnych do wspólnego rozwiązywania złożonego zadania obliczeniowego, zaś przez rozproszony system komputerowy (ang. distributed system), zbiór samodzielnych komputerów połączonych za pomocą sieci z zaimplementowanym rozproszonym oprogramowaniem systemowym. Oba z powyższych systemów mają na celu zwiększenie wydajności obliczeń i umożliwienie wykonywania ich z dużo większą dokładnością. Potencjalna moc obliczeniowa takiego systemu jest równa sumie mocy procesorów. Należy jednak zauważyć, że nie wszystkie zadania mogą być efektywnie rozwiązywane na komputerach równoległych. Mimo opracowania schematów postępowania prowadzących do otrzymania algorytmów równoległych z sekwencyjnych istnieją aspekty, które należy rozważyć przed rozpoczęciem procesu zrównoleglenia kodu programu, a mianowicie: czy problem może być podzielony na relatywnie niezależne zadania i czy prędkość obliczeń wzrasta ze zwiększającą się liczbą procesorów. Architekturę współczesnych komputerów równoległych możemy sklasyfikować ze względu na dwa główne kryteria: sposób dostępu do pamięci operacyjnej i sposób przetwarzania danych. Rozważając dostęp do pamięci wyróżnić możemy dwie podstawowe kategorie: komputery z pamięcią (przestrzenią adresową) wspólną (ang. Global Shared Memory (SM)) jak również komputery z pamięcią lokalną (ang. Local Distributed Memory (DM)). Do drugiej z nich zaliczać będziemy zarówno systemy wieloprocesorowe z modułami pamięci należącymi do poszczególnych procesorów i komputery rozproszone składające się z komunikujących się ze sobą komputerów klasy PC. Podział ze względu na sposób przetwarzania danych nosi nazwę Taksonomii Flynna i wyróżnia on cztery podstawowe struktury funkcjonalne: 133

Single Instruction Single Data (SISD) komputery sekwencyjne cechuje jeden procesor i jeden blok pamięci. Obecnie jednostki wykonane w tej architekturze wykazują cechy przetwarzania równoległego. Jako przykład należy tu wymienić chociażby rozwiązania zaimplementowane przez firmę Intel: Streaming SIMD Extensions w procesorach typu Pentium III czy Hyper-Threading w jednostkach Pentium IV. Single Instruction Multiple Data (SIMD) te same operacje wykonywane są jednocześnie na wielu zestawach danych. Zaliczamy do nich procesory wektorowe oraz tablice procesorów z pamięcią lokalną strumienie danych kierowane do procesorów wykonujących ten sam kod. Architektura ta, ze względu na szybki rozwój komputerów klasy PC i jednostek rozproszonych, jest coraz rzadziej wykorzystywana, zwłaszcza przez małe grupy badawcze. Multiple Instruction Single Data (MISD) na tym samym zestawie danych równocześnie wykonywanych jest wiele instrukcji. Są to specjalistyczne komputery, które ze względu na wysokie koszty budowy oraz specyfikę wykonywania obliczeń są rzadko spotykane i wykorzystywane jedynie do problemów dedykowanych. Multiple Instruction Multiple Data (MIMD) równolegle wykonywanych jest wiele różnych instrukcji na wielu zestawach danych. Obecnie jest to najbardziej rozpowszechniona grupa komputerów wysokiej mocy obliczeniowej. Uwzględniając podział określający sposób dostępu do pamięci w grupie MIMD wyróżnić możemy dwie podgrupy SM-MIMD i DM-MIMD. Procesory pracujące w architekturze SM-MIMD wykorzystują ten sam moduł pamięci, odwołując się do wspólnej przestrzeni adresowej RAM. Teoretycznie dostęp do pamięci określają standardy: Uniform Memory Access (UMA), spotykany również pod nazwami (PRAM) Parallel Random Memory Access czy komercyjną Symmetric Multi-Processing (SMP) zapewniający każdemu procesorowi zapis/odczyt na dowolnym elemencie pamięci oraz równy dostęp do wspomnianych modułów; Non Uniform Memory Access (NUMA) oraz Coherent NUMA (ccnuma), który definiuje obsługę jednostek centralnych z pamięcią podręczną typu cache. Brak gwarancji równego czasu dostępu do pamięci. Systemy SM-MIMD cechują wysokie koszty budowy oraz ograniczone możliwości skalowalności/rozbudowy. Sprzętowo obsługa pamięci realizowana jest przy pomocy skomplikowanych struktur przełącznic krzyżowych lub wspólnej magistrali danych wymuszającej sekwencyjny dostęp dla poszczególnych procesorów. Jednostki te najczęściej wykorzystują od 6 do 8 procesorów, których ewentualne zwiększenie liczby bardzo komplikuje stosowane rozwiązania. Systemy komputerowe DM-MIMD charakteryzuje duża liczba procesorów, działających niezależnie i posiadających własne moduły pamięci każdy. Cechują je również skalowalność, możliwość stopniowej rozbudowy i niski koszt budowy w porównaniu do maszyn SM- MIMD. Do tej grupy zaliczamy klastry (ang. Cluster of Workstations) wirtualne komputery składające się z wielu maszyn PC zdolnych rozwiązywać to samo zadanie. Wyróżniamy wśród tej grupy typy: Boewulf węzły połączone siecią dedykowaną i NOW (ang. Network of Workstation) połączone siecią LAN, wykorzystywaną również przez komputery, które nie wchodzą w skład klastra. Wykonywanie obliczeń na tychże jednostkach wymusza konieczność przesyłania komunikatów, odpowiednią strukturą algorytmów, powodując opóźnieniami w komunikacji. 134

2. Algorytmy równoległe Rozważając wykorzystanie komputerów rozproszonych należy zwrócić uwagę na pojęcia związane z wykonywaniem algorytmów równoległych takie jak: granularności obliczeń, rodzajach generowanego ruchu oraz korzyści wynikające z ich wykorzystania. Termin granularność obliczeń określa liczbę operacji wykonywanych przez procesor pomiędzy kolejnymi etapami wymiany danych lub synchronizacji między procesami. Możemy wyróżnić tu dwa przypadki skrajne: duża ziarnistość (ang. coarse grain) synchronizacja po dużej liczbie operacji wykonywanych lokalnie. Jest to sytuacja idealna, gdyż zapewnia równy udział wszystkich procesorów w obliczeniach przy maksymalnym ograniczeniu opóźnień wynikających z komunikacji. mała ziarnistość (ang. fine grain) synchronizacja nawet po jednej instrukcji procesora, co pociąga ze sobą częstą komunikację i zwolnienie obliczeń. Do jej wad należy również zaliczyć fakt, że szybsze procesory są mniej obciążone od wolniejszych. Rodzaje ruchu generowanego przez daną aplikację możemy podzielić na: HSHD (ang. High Synchronization, High Data Traffic) charakteryzujący się częstą komunikacją zrównoleglenie tego typy zadań jest bardzo mało efektywne; LSLD (ang. Low Synchronization, Low Data Traffic) cechuje go rzadka komunikacja i wymiana danych, efektywne wykonywanie obliczeń oraz małe opóźnienia komunikacyjne. Typ ten jest idealny dla obliczeń rozproszonych; LSHD (ang. Low Synchronization, High Data Traffic) wyróżnia się dużą ilością przesyłanych danych ważna duża przepustowość sieci w tak obciążonym systemie; HSLD (ang. High Synchronization, Low Data Traffic) jest praktycznie niespotykane jego przykładem może być wiele węzłów dostarczających strumienie danych do jednego procesora zajmującego się ich analizą. W celu ilościowej klasyfikacji efektywności wykorzystania maszyn rozproszonych wprowadzono współczynnik przyśpieszenia S(n,p), który jest zdefiniowany jako iloraz czasów wykonania zadania o wielkości n przez komputer sekwencyjny do czasu wykonania tego zadania prze komputer równoległy zbudowany z p procesorów T ( n,1) S ( n, p) =. T( n, p) (1) Tutaj T(n,p) jest to czas wykonania zadania o wielkości n przez p procesorów. Rozwinięcie powyższej zależności nosi nazwę Prawo Amdahla: T( n,1) 1 S( n, p) = =, (2) T( n, p) 1 β( n) β( n) + p gdzie β(n) jest współczynnikiem określającym iloraz części sekwencyjnej (nie dającej się zrównoleglić) do części równoległej mierzony jako liczba rozkazów (instrukcji) procesora wykonywanych podczas przetwarzania tej części zadania do liczby instrukcji potrzebnych do wykonania całego programu. Zwykle czas wykonania części sekwencyjnej jest stały, a podlegającej zrównolegleniu zależy od wielkości zadania. Na wielkość współczynnika przyśpieszenia mają ponad to wpływ czynniki związane z budową sprzętową systemu rozproszonego takie jak przepustowość sieci, opóźnienia urządzeń I/O, protokoły sieciowe oraz wielkość przesyłanych danych [1]. 135

3. Oprogramowanie Implementacja projektu obliczeniowego dla systemu rozproszonego przebiegać powinna z uwzględnieniem następujących faz: podział problemu na zbiór jak najbardziej niezależnych zadań, przypisanie danych dla zadania i przypisanie zadania do konkretnego procesora z uwzględnieniem zrównoważenia obciążenia oraz dużej ziarnistości. Realizuje się to zwykle przez umieszczenie w kodzie nowych elementów funkcjonalnie realizujących czynności: zainicjalizowanie środowiska rozproszonego, identyfikacja procesów poprzez nadanie im numerów, funkcji odpowiedzialnych za komunikacją i synchronizację oraz zakończenie pracy środowiska równoległego. Współcześnie wykorzystywane pakiety oprogramowania do obliczeń równoległych posiadają moduły realizujące stawiane im zadania. Wśród najpopularniejszych implementacji dla systemów DM-MIMD wyróżniamy: Multicomputer Operating Systems for UnIX (MOSIX) - część systemu operacyjnego, dynamicznie zarządza procesami i optymalizuje obciążenie węzłów wykorzystując kryteria: równoważenie obciążenia i ochrona zasobów pamięci. Uważa się go za softwarową symulację architektury SMP. Wśród jego wad należy wymienić: brak możliwości zrównoleglenia zadania oraz obsługę tej samej architektury jednostek CPU w systemie (możliwe różne generacje procesorów); Parallel Virtual Machine (PVM) - środowisko oprogramowania do realizacji programów rozproszonych na komputerach wieloprocesorowych z pamięcią wspólna i lokalną. W skład pakietu wchodzą: demon (usługa systemowa w architekturze klient-serwer zapewniająca współdziałanie procesów), konsola służąca do konfiguracji i zarządzania maszyną wirtualną oraz biblioteka procedur (C i Fortran) do synchronizacji i wymiany komunikatów. PVM obsługuje dowolną architekturą sprzętową oraz różne systemy operacyjne zapewniając automatyczną konwersje danych do różnych reprezentacji. Prowadzi dynamicznie zarządzanie procesami, możliwość dołączenia/odłączenia węzła w trakcie obliczeń, oraz mechanizmy równoważenia obciążenia (ang. load balancing); Bulk Synchronous Parallel Computation (BSP) jest to standard programowania, który został zaimplementowany w C++ i Fortran. Zapewnia on przesyłanie danych, synchronizacje obliczeń wprowadzając mechanizmy minimalizujące komunikację miedzy węzłami. Obecnie dostępne są realizacje obsługujące różne architektury sprzętowe oraz systemy operacyjne. Tworzony przez europejskie środowiska naukowe jak alternatywa dla amerykańskich standardów; Message Passing Interface (MPI) [2]. 4. Message Passing Interface MPI to biblioteka procedur i funkcji, zapewniająca komunikację i synchronizację pomiędzy procesami. Obecnie dostępnych jest wiele implementacji dostarczanych przez różnych producentów dla różnych systemów operacyjnych w dwu językach programowania: Fortran, C++, różniących się głównie sposobem definiowania zasobów sprzętowych. Należy podkreślić fakt, iż MPI jako standard nie definiuje mechanizmów dynamicznego zarządzania procesami, równoważeniem obciążenia czy obsługi błędów związanych z awarią wątków. Tworzenie algorytmu rozproszonego z przy użyciu MPI wiąże się z implementacją w kodzie programu funkcji, z których wybrane są krótko scharakteryzowane w Tab. 1. Do najważniejszych z nich należy zaliczyć inicjalizujące i zamykające środowisko rozproszone oraz procedury odpowiedzialne za komunikację. 136

Tabela 1. Wybrane funkcje standardu MPI. int MPI_Init(int *argc, char ***argv) int MPI_Comm_size(MPI_Comm comm, int *size) int MPI_Comm_rank(MPI_Comm comm, int *rank) int MPI_Send(void *msg, int count, MPI_Datatype datatype, int dest, int tag, MPI_Comm comm) int MPI_Recv(void *msg, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status) int MPI_Bcast(void *msg, int count, MPI_Datatype datatype, int root, MPI_Comm comm) int MPI_Finalize() Funkcja inicjalizuje środowisko wykonywania programu Funkcja pobiera ilość procesów (w obrębie komunikatora comm) i umieszcza ją w zmiennej size Funkcja pobiera numer aktualnego procesu (w obrębie komunikatora comm) i umieszcza go w zmiennej rank Funkcja wysyła komunikat typu datatype 1 do procesu numer dest oznaczony znacznikiem tag w obrębie komunikatora comm. Funkcja odczytuje z kolejki komunikatora comm (z ewentualnym blokowaniem do czasu nadejścia) pierwszy komunikat od procesu source oznaczony znacznikiem tag typu datatype. Wynik umieszczany jest w buforze msg a status operacji w zmiennej status. Funkcja rozsyła komunikat do wszystkich procesów w obrębie komunikatora comm poczynając od procesu root. Pozostałe argumenty jak w funkcji MPI_Send(). Funkcja zwalnia zasoby używane przez MPI i przygotowuje system do zamknięcia Standard MPI obsługuje komunikację czterech podstawowych typów: synchroniczną, asynchroniczną, blokującą i nieblokującą, jak również ich kombinacje. Domyślnym typem jest komunikacja blokująca, której istotą jest oczekiwanie procesu, po wysłaniu komunikatu, na potwierdzenie odebrania od drugiego procesu. Alternatywę dla niej stanowi komunikacja nieblokująca, w której obliczenia wykonywane są bez przerwy (bez zwolnienia bufora pamięci), aż do momentu wywołania funkcji synchronizujących (np. MPI_Wait, MPI_Test) w miejscach zdefiniowanych prze twórcę algorytmu. Zasadą działania środowiska MPI jest podział programu na tzw. komunikatory. Są to podstawowe jednostki funkcjonalne, między którymi wymieniane są dane i przesyłane są komunikaty. Poszczególne procesy w komunikatorze są oznaczone Tagami (znacznikami). Proces nadrzędny root ma przypisany Tag z numerem 0. Standard ten pozwala na zdefiniowanie dwóch podstawowych struktur procesów w obrębie jednego komunikatora. Pierwsza z nich to topologia kartezjańska, w której procesy ułożone są w macierz niekoniecznie dwuwymiarową. Mogą one, oprócz standardowych operacji, dodatkowo uzyskiwać informacje o swoim położeniu w macierzy. Jest to ważny czynnik w sposobie ich rozlokowywania wpływający na efektywności obliczeń. Druga, bardziej ogólna topologia - topologia grafu - działa na podobnej zasadzie, ale dla struktury grafu. Ważną cechą implementacyjną topologii jest fakt, że szczegóły techniczne numeracji procesów są ukryte przed programistą. 1 Typ komunikatu jest zawarty w zmiennej datatype i może to być któryś z predefiniowanych typów takich jak MPI_INT, MPI_FLOAT, MPI_DOUBLE, MPI_CHAR, czy typy predefiniowane przez użytkownika 137

5. Obliczenia rozproszone z wykorzystaniem MPI we FLASH Code. Przykładem oprogramowania wykorzystującego MPI jest program numeryczny FLASH [5,3]. Pakiet ten został napisany i jest stale udoskonalany w ASCI Center for Astrophysical Thermonuclear Flashes. Jest to zaawansowany numerycznie kod, wykorzystujący zarówno obliczenia rozproszone jak i samoadaptacyjne siatki numeryczne [4]. Jego zadaniem jest rozwiązywanie równań magnetohydrodynamicznych, którymi możemy opisywać chociażby termojądrowe rozbłyski, czy ewolucję plazmy korony słonecznej. Realizacja obliczeń równoległych rozpoczyna się podziałem zadania na wątki przynależne poszczególnym procesorom. Rysunek 1 przedstawia schemat obszaru symulacji wraz z uwzględnieniem siatki numerycznej. Obszar ten dzielony jest następnie na mniejsze obszary, tzw. subdomeny. Komunikacja między nimi związana jest, poza synchronizacją obliczeń, głównie z zagadnieniami związanymi z zagęszczaniem/rozrzedzaniem adaptacyjnej siatki numerycznej. Należy zaznaczyć, iż informacja o poziomie zagęszczenia siatki musi być uzgadniana pomiędzy procesami w każdym kroku czasowym. Dodatkowo wymieniane są również dane z komórek buforowych 2 przechowujących wartości zmiennych fizycznych dla skrajnych bloków sąsiadujących procesów. Wykorzystywanie adaptacyjnych siatek numerycznych oprócz niekwestionowanych zalet [4] posiada również szereg uciążliwości związanych ze specyfiką ich działaniem w systemach rozproszonych. Najbardziej znaczące z nich to: zwiększenie komunikacji pomiędzy procesami (zwiększenie wartości współczynnika β(n)) powodujące wydłużenie obliczeń danego problemu, podział obszaru symulacji na niejednolite elementy, konieczność redystrybycji zadań, brak równomiernego obciążenia procesorów czy częsta zmiana liczby komórek siatki skutkująca przesyłaniem dużej ilości danych. Rysunek 1. Schemat podziału siatki numerycznej na poszczególne procesy wykonywane na odrębnych procesorach. Kolorem szarym zaznaczono odpowiadające sobie pary komórek buforowych. W trakcie realizowanych obliczeń wykonywane są również zadania definiowane przez użytkownika. Do najważniejszych z nich należy agregacja wyników cząstkowych, realizowana prze funkcje zdefiniowane w bibliotece MPI: MPI_Reduce 3 oraz MPI_Allreduce 4. 2 ang. guard cells 3 Przykładowe operatory to MPI_MAX, MPI_MIN, MPI_SUM - kompletna lista znajduje się w dokumentacji FLASHa. Istnieje również możliwość definiowania własnych operatorów dla funkcji MPI_Reduce(). 4 int MPI_Allreduce(void *operand, void *result, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); - zasada działania jak przy funkcji MPI_Reduce, jednak wynik jest przesyłany do wszystkich procesów. 138

We programie FLASH zrównoleglenie zadania może przebiegać zgodnie z dwoma schematami (Rys.2). Główna różnica miedzy nimi wynika z faktu, że według pierwszego schematu wszystko wykonywane jest przez system, zaś zgodnie z drugim podział zadania jest wykonywany przez użytkownika, który może również kontrolować jego przebieg [6]. Rysunek 2. Schemat sposobów podziały procesu na zadania wykonywane równolegle oraz ich implementacji w programie FLASH z wykorzystaniem odpowiednich funkcji MPI. Dokładny opis tych funkcji można znaleźć w dokumentacji kodu FLASH [7]. 6. Wnioski Obliczenia rozproszone stanowią potężne narzędzie w symulacjach numerycznych, które ze względu na niskie koszty może być wykorzystywane przez małe grupy badawcze. Warte podkreślenia jest to, że system rozproszony może być zestawiony z komputerów klasy PC będących na wyposażeniu pracowni studenckich z wykorzystaniem darmowego oprogramowania 5. Należy zwrócić uwagę na fakt, że efektywność wykonywania obliczeń wiąże się również z czynnikami zależnymi od danego zadania: wielkość przesyłanych danych, częstość ich wymiany, czy wartość współczynnika β(n), jak również właściwościami sprzętowymi systemu takimi jak przepustowość sieci, protokoły sieciowe czy opóźnienia urządzeń I/O 6. Literatura [1] R. Ogrodowczyk, K. Murawski, Parallel computing in a network of workstations, Task Quarterly, 8, No. 3 (2004). [2] http://www-unix.anl.gov/mpi [3] M. Selwa, K. Murawski, FLASH a tool for surgery of solar plasma, Annales UMCS Informatica, A1, 2 (2004) [4] G. Olszanowski, R. Ogrodowczyk, Adaptacyjne siatki numeryczne, KEI III, Chełm (2004) [5] Fryxell i inni, FLASH: An Adaptive Mesh Hydrodynamics Code for Modeling Astrophysical Thermonuclear Flashes, Astrophys. J. Suppl., 131, 273 (2000) [6] Anshu Dubey, Parallel programming and MPI, Flash Code Tutorial, http://flash.uchicago.edu/website/codesupport/tutorial_talks. [7] http://flash.uchicago.edu/flashcode 5 Wszystkie z wymienionych w tym opracowaniu pakietów oprogramowania rozproszonego posiadają darmowe implementacje. 6 ang. Input/Output wejście/wyście. 139