Obliczenia równoległe i rozproszone

Współczesny wzrost dostępności big data i liczby jednoczesnych użytkowników w Internecie wywiera szczególną presję na potrzebę wykonywania zadań obliczeniowych „równolegle” lub jednocześnie. Obliczenia równoległe i rozproszone występują w wielu różnych obszarach tematycznych informatyki, w tym w algorytmach, architekturze komputerowej, sieciach, systemach operacyjnych i inżynierii oprogramowania. Na początku XXI wieku nastąpił gwałtowny rozwój konstrukcji wieloprocesorowych i innych strategii umożliwiających szybsze działanie złożonych aplikacji. Obliczenia równoległe i rozproszone opierają się na podstawowych koncepcjach systemowych, takich jak współbieżność, wzajemne wykluczanie, spójność w manipulacji stanem/pamięcią, przekazywanie komunikatów i modele pamięci współdzielonej.

Utworzenie wieloprocesora z kilku pojedynczych procesorów wymaga fizycznych połączeń i mechanizmu komunikacji między procesorami, aby mogły one działać równolegle. Ściśle sprzężone multiprocesory współdzielą pamięć, a więc mogą komunikować się poprzez przechowywanie informacji w pamięci dostępnej dla wszystkich procesorów. Luźno sprzężone wieloprocesory, w tym sieci komputerowe, komunikują się wysyłając do siebie wiadomości przez łącza fizyczne. Informatycy badali różne architektury wieloprocesorowe. Na przykład, możliwe konfiguracje, w których setki lub nawet tysiące procesorów mogą być połączone razem są badane w celu znalezienia geometrii, która wspiera najbardziej efektywną przepustowość systemu. Często badaną topologią jest hipersześcian, w którym każdy procesor jest połączony bezpośrednio z pewną ustaloną liczbą sąsiadów: dwa dla dwuwymiarowego kwadratu, trzy dla trójwymiarowego sześcianu i podobnie dla hipersześcianów o wyższych wymiarach. Informatycy badają również metody wykonywania obliczeń na takich wieloprocesorowych maszynach (np. algorytmy optymalnego wykorzystania architektury i techniki unikania konfliktów w transmisji danych). Oprogramowanie, które umożliwia korzystanie z danej maszyny, w szczególności jej system operacyjny, jest integralną częścią tych badań.

Współbieżność odnosi się do wykonywania więcej niż jednej procedury w tym samym czasie (być może z dostępem do wspólnych danych), albo naprawdę jednocześnie (jak na wieloprocesorze), albo w nieprzewidywalnej kolejności. Nowoczesne języki programowania, takie jak Java, zawierają zarówno enkapsulację, jak i funkcje zwane „wątkami”, które pozwalają programiście zdefiniować synchronizację występującą pomiędzy współbieżnymi procedurami lub zadaniami.

Dwa ważne zagadnienia w kontroli współbieżności są znane jako deadlocki i warunki wyścigu. Deadlock występuje wtedy, gdy zasób trzymany w nieskończoność przez jeden proces jest żądany przez dwa lub więcej innych procesów jednocześnie. W rezultacie żaden z procesów, które żądają zasobu, nie może kontynuować pracy; są one w martwym punkcie, czekając na uwolnienie zasobu. System operacyjny może radzić sobie z taką sytuacją za pomocą różnych technik zapobiegania lub wykrywania i odzyskiwania. Z kolei stan wyścigu występuje wtedy, gdy dwa lub więcej współbieżnych procesów przypisuje zmiennej inną wartość, a wynik zależy od tego, który proces przypisuje zmienną jako pierwszy (lub ostatni).

Przeciwdziałanie martwym punktom i stanom wyścigu jest bardzo ważne, ponieważ zapewnia integralność aplikacji. Ogólna strategia zapobiegania jest nazywana synchronizacją procesów. Synchronizacja wymaga, aby jeden proces poczekał na zakończenie pewnej operacji przez drugi, zanim przystąpi do działania. Na przykład, jeden proces (zapisujący) może zapisywać dane do pewnego obszaru pamięci głównej, podczas gdy inny proces (czytający) może chcieć odczytać dane z tego obszaru. Czytnik i zapisujący muszą być zsynchronizowane tak, aby zapisujący nie nadpisywał istniejących danych, dopóki czytnik ich nie przetworzy. Podobnie, czytnik nie powinien rozpoczynać odczytu, dopóki dane nie zostaną zapisane w danym obszarze.

Z chwilą pojawienia się sieci, obliczenia rozproszone stały się wykonalne. Obliczenia rozproszone to takie, które są wykonywane przez grupę połączonych ze sobą komputerów pracujących wspólnie. Takie obliczenia wymagają zazwyczaj rozproszonego systemu operacyjnego do zarządzania rozproszonymi zasobami. Ważnymi zagadnieniami są: współdzielenie obciążenia, które próbuje wykorzystać dostęp do wielu komputerów w celu szybszego ukończenia zadań; migracja zadań, która wspiera współdzielenie obciążenia poprzez efektywne rozdzielanie zadań pomiędzy maszyny; oraz automatyczna replikacja zadań, która występuje w różnych miejscach w celu zwiększenia niezawodności.

.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *