srodowiska_programowania_rownoleglego

# Środowiska programowania równoległego.

- Programowanie równoległe na maszynach z pamięcią współdzieloną (Shared Memory):
  - procesy i wątki,
  - semafory i synchronizacja,
  - Inter Process Communication (IPC),
  - dyrektywy kompilatora, OpenMP.
- Programowanie równoległe na maszynach z pamięcią rozproszoną (Distributed Memory):
  - gniazdka (sockets),
  - Messsage Passing Interface (MPI),
  - Parallel Virtual Machine (PVM),
  - High Performance Fortran (HPF),
  - Linda.
- Narzędzia do obiektowego programowania rozproszonego:
  - Remote Procedure Call (RPC),
  - Java Remote Method Invocation (RMI),
  - Common Object Request Broker Architecture (CORBA).

## PVM – Parallel Virtual Machine

Opracowany w 1989 roku w Oak Ridge Nationa Laboratory Tennessee w USA. Twórcami tego środowiska byli Sunderam i Geist. Jest to jedno z najbardziej popularnych środowisk do realizacji programów rozproszonych w oparciu o model przesyłania komunikatów. PVM umożliwia używanie heterogenicznej sieci komputerów jak jednego dużego komputera równoległego. Pozwala również na realizowanie zadania na maszynach wieloprocesorowych. Z punktu widzenia programisty PVM nie jest językiem programowania, ale zbiorem funkcji bibliotecznych umożliwiających komunikację między procesami, zarządzanie nimi i ich synchronizację. PVM oparty jest o model typu pamięć rozproszona (distributed memory) i przekazywanie komunikatów (message-passing)

W skład systemu PVM wchodzą:

- Demon programu- pvmd3 – umożliwia współdziałanie poszczególnych programów (procesów UNIX-a) składających się na program rozproszony
- Program konsoli służącej do zarządzania maszyną wirtualną – program pvm
- Biblioteka funkcji PVM – zbiór libpvm3.a
- Biblioteka z funkcjami operującymi na grupach procesów – zbiór libgpvm3.a

Zalety systemu PVM:

- Prostota – system zawiera kilkanaście funkcji bibliotecznych
- Łatwość instalacji
- Łatwość implementacji na różnych platformach sprzętowych
- Możliwość działania w sieci heterogenicznej
- Możliwość równoczesnego uruchamiania wielu aplikacji na jednej maszynie wirtualnej
- Możliwość równoczesnej pracy wielu maszyn wirtualnych różnych użytkowników

## Środowisko OpenMP

Środowisko programowania OpenMP (Open Multi-Processing) przeznaczone dla maszyn ze wspólną pamięcią (ang. shared-memory). Jest to środowisko bardzo mocno wspierane przez wielu producentów sprzętu i oprogramowania, które jest już nieoficjalnym standardem korporacyjnym. Cechy środowiska OpenMP zapewniają mu wielką popularność przy zastosowaniach typu High Performance Computing. Prostota posługiwania się środowiskiem OpenMP pozwala na stworzenia wysoce wydajnego oprogramowania
Środowisko to pozwala na ujednolicenie postaci dyrektyw ( postacie dyrektyw kompilatorów na różnych komputerach nie są identyczne). Dodatkowo dostarcza bogatą bibliotekę zawierającą elementy kontrolne i synchronizujące. OpenMP jest interfejsem do wątków POSIX Threads (Portable Operating System Interface) w skrócie PThreads. PThreads to standard programowania wielowątkowego, obecnie bardzo często używany i najbardziej rozpowszechniony. Jest to jednak programowanie równoległe na niskim poziomie, gdzie programista dba o tworzenie wątków, ich synchronizację i zniszczenie. Środowisko OpenMP powstało we wczesnych latach 90-tych, początkowo dla języka Fortran, Później dla języków C i C++. Głównym celem przedsięwzięcia było umożliwienie automatycznego zrównoleglenia kodu.
Zrównoleglenie kodu odbywa się w oparciu o model fork-and-join. Polega on na wytworzeniu przez jeden wątek grupy wątków (ang. Team of threads), które wykonują jakąś pracę, a następnie wszystkie się synchronizują i dalsze przetwarzanie wykonywane jest już sekwencyjnie. Wątek tworzący grupę staje się wątkiem typu master i również bierze udział w przetwarzaniu. Jego numer w utworzonej grupie to 0. Po synchronizacji wątek master kontynuuje swoje działanie, a pozostałe wątki z grupy są niszczone.

## MPI – Message Passing Interface

Standard MPI jest używany w wielu klasach maszyn równoległych, w szczególności o pamięci rozproszonej. W założeniu twórców miał on połączyć zalety istniejących systemów typu message passing. W procesie standaryzacji udział brała większość producentów maszyn współbieżnych, naukowcy uniwersyteccy, przedstawiciele ośrodków rządowych.

Pierwsza propozycja standardu, znana jako MPI1, została przedłożona w listopadzie 1992, a jej korekty ukończono w lutym 1993. Autorzy opisali jedynie konieczne do działania message passingu właściwości; skupili się głównie na komunikacji punkt - punkt. Nie zaproponowali żadnych rozwiązań dla komunikacji grupowej. Standard MPI został ogłoszony w listopadzie 1993 roku. Głównymi zaletami standardu jest przenośność. Udostępnia on zbiór precyzyjnie zdefiniowanych metod, które mogą być efektywnie zaimplementowane. Stał się on punktem wyjściowym do stworzenia praktycznego, przenośnego, elastycznego i efektywnego narzędzia dla message pasingu.

Główne założenia standardu MPI:

- umożliwia efektywną komunikację bez obciążania procesora operacjami kopiowania pamięci
- może być stosowany w środowisku heterogenicznym
- udostępnia funkcje dla języków C oraz Fortan 77
- pozwala na skupienie się na samej komunikacji bez wnikania w szczegóły. Błędy są obsługiwane wewnątrz systemu
- definiuje interfejs niewiele różniący się od innych standardów, jak PVM
- udostępnia mechanizmy komunikacji punkt - punkt oraz zbiorowej (grupy procesów)
- może być używany na wielu platformach, tak równoległych jak i skalarnych, bez większych zmian w sposobie działania
- semantyka funkcji interfejsu powinna być niezależna od języka
- interfejs powinien być bezpieczny jeśli chodzi o środowisko wielowątkowe

Program napisany w MPI składa się z niezależnych procesów operujących na różnych danych (MIMD). Każdy proces wykonuje się we własnej przestrzeni adresowej, aczkolwiek wykorzystanie pamięci współdzielonej też jest możliwe. Standard nie zabrania, aby poszczególne procesy były wielowątkowe. Nie są też udostępnione mechanizmy związane z rozłożeniem obciążenia pomiędzy poszczególne procesy, z architekturą rozkładu procesorów, z dynamicznym tworzeniem i usuwaniem procesów. Procesy są identyfikowane poprzez ich numer w grupie.

# Pobierz dokument

9.6.doc
9_inne_wazne.doc