====== Klasyfikacja komputerów MIMD. ======

===== Klasyfikacja systemów komputerowych =====

==== Taksonomia Flynna: ====
podstawą tej klasyfikacji jest: liczba strumieni danych, liczba strumieni instrukcji
  * SISD ( Single Instruction Stream- Single Data Stream)
    * Klasyczna architektura (Johna) von Neumanna
  * SIMD (Single Instruction Stream- Multiple Data Stream)
    * SM-SIMD – maszyny wektorowe (Sherd Memory)
    * DM-SIMD – tablica procesów (Disk Memory)
  * MISD (Multiple Instruction Stream- Single Data Stream) 
  * MIMD (Multiple Instruction Stream- Multiple Data Stream)
    * SM-MIND - wieloprocesory (z pamięcią dzieloną)
    * DM-MIND - wielokomputery (z pamięcia prywatną)

===== Klasyfikacja maszyn typu MIMD =====

**SM-MIND** - wieloprocesory/multiprocesory

SM - Shared Memory

PRAM – parrarel RAM\\
UMA – uniform memory acces\\
SMP – symmetric multi-processing\\

{{:9.2_image002.jpg}}

Przełącznica krzyżowa  (ang. Crossbar switch)\\
{{:9.2_image006.jpg}}

Magistrala danych\\
{{:9.2_image004.jpg}}\\
{{:9.2_image008.gif}}- przełączników

1 cykl dostępu do pamięci\\
Najgorszy przypadek:  p przełączników, p cykli opóźnionych w dostępie\\
Najczęściej spotykany – Snopy bar protocol   - najszybszy\\

**DM-MIND** - wielokomputery/multikomputery

DM - Distributed Memory

{{:9.2_image012.jpg}}\\

__średnica d (diameter)__ – największa odległość między dwoma procesorami (z pamięcią) w systemie zgodnie z obowiązującym algorytmem routingu mierzony w przeskokach.

__przekrój połówkowy__
Hipersześcian (hiperkostka, hypercube)\\
Hipesześcian wymiaru 0 - jest to pojedynczy procesor bez etykiety. Hipesześcian wymiaru n tworzy się kopiując 2 razy h. wymiaru n-1 łącząc parami odpowiadające sobie węzły (wierzchołki oraz dodając 0 do etykiet pierwszej kopii i 1 do drugiej)
{{:9.2_image014.jpg}}

===== Klasyfikacja komputerów MIMD =====
  * silnie powiązane: Wieloprocesory (multiprocessors) – komputery wyposażone we wspólną pamięć (shared memory). W wieloprocesorze istnieje pojedyncza fizyczna przestrzeń adresowa, współdzielona przez wszystkie procesory. Są używane zazwyczaj jako systemy równoległe (do rozwiązywania pojedynczych problemów,  między jednostkami opóźnienia komunikatów –małe oraz szybkość przesyłania bardzo duża)
  * słabo powiązane: Multikomputery (multicomputers) – komputery bez pamięci wspólnej (pamięć prywatna). Stosuje się je głównie w systemach rozproszonych (do prac nad wieloma osobnymi problemami, ale może również być wykonywany ten sam problem; opóźnienia komunikatów duże, szybkość przesyłania mała)

{{:9.2_image016.jpg}}
Rysunek: Architektura systemów rozproszonych

===== Zależnie od architektury połączeń między komputerami można wyróżnić dwie kategorie systemów:  =====
  * **z pojedynczą szyną** (ang. //bus-based//) - istnieje pojedyncza sieć, szkielet, szyna, kabel lub inne medium transmisyjne, które łączy wszystkie komputery (tak działa telewizja kablowa); 
  * **z przełącznikami** (ang. //switched//) - nie ma pojedynczej sieci szkieletowej, komputery są połączone między sobą różnymi kablami, przy przejściu komunikatu z jednego kabla do drugiego trzeba podejmować jawną decyzję (tak działa tradycyjna telefonia). Przełączniki przełącza się sprzętowo. Wiele CPU może mieć równocześnie dostęp do pamięci (do różnych bloków). Pełna siatka wymaga n x n przełączników, sieć typu omega wymaga mniejszej liczby, ale bardziej skomplikowanych (droższych) przełączników (w przykładowej sieci każdy ma dwa wejścia i dwa wyjścia). 

{{:9.2_image018.jpg}}
Rysunek: Typy połączeń (źródło: Tanenbaum, Distributed Systems)

Można zredukować koszt przełączników budując systemy hierarchiczne. Każde CPU ma szybki dostęp do własnej lokalnej pamięci i dłuższy dostęp do pamięci innych CPU. Takie architektury nazywają się **NUMA** (ang. Non-uniform memory access). Mają one krótszy średni czas dostępu niż systemy z sieciami typu omega, ale ten czas zależy od właściwego rozmieszczenia kodu i danych programów w pamięciach lokalnych. 
Tradycyjne wieloprocesory określa się terminem **UMA** (ang. //Uniform Memory Access//), a wielokomputery terminem **NORMA **(ang. //No Remote Memory Access//).\\

**Wieloprocesory:**
  * w systemie z pojedynczą szyną szyna jest potencjalnym wąskim gardłem,
  * w systemie z przełącznikami można dodawać procesory, ale system jest złożony, wolny i kosztowny,
  * programowanie jest proste: dostęp do wspólnej pamięci, programowe mechanizmy synchronizacji procesów. 
**Wielokomputery:**
  * łatwo się buduje,
  * rozwiązanie jest skalowalne,
  * programowanie jest trudne: komunikacja poprzez przesyłanie komunikatów, problem gubionych komunikatów, buforowania, zakładania blokad itp. 

===== Przydatne linki: =====
[[http://rainbow.mimuw.edu.pl/SO/Wyklady-html/11_distr/]]

====== Pobierz dokument ======
{{:9.2.doc|9.2.doc}}